Есть устройство "Бегущая строка" длина ее 6 метров. Индикация статическая. Схема индикации включает в себя 80 шт сдвиговых регистров 74HC595 включенных последовательно. Линии CLK DATA общие. Сигналы CLK DATA LATCH с микроконтроллера идут через 74HC244 (буфер, шинный формирователь). Устройство блочное 6 блоков по 1 метру. В первом блоке стоит контроллер.
Микроконтроллер MEga168, работает на частоте 7,3728 Мгц
Проблема:
При +50...0 градусов информация отображается нормально, 0...-20 идут искажения, искажения не хаотичного характера а постоянны ( например столбец символа делиться на 2 столбца, или верх символа налазит на низ) при 0 градусов эффект только в том что верхняя строка светодиодов сдвинута на 1 пиксель назад ( т.е. когда бежит как бы тянется за остальными) при более низких температурах -10 -20 искажения усиливаются до неузнаваемости символов.
Думаю возможные причины:
1) Криво написан код вывода в последовательный регистр. Уже было 2 варианта
В1... этот код не менялся пару лет и работает с драйверами типа MBI5026, DM134
Тут я вижу лишь один косяк Clock фронт идет сверху вних а не снизу вверх (одна из главных причин)
CODE
void loadReg(unsigned int value)
{
char bitCnt;
for(bitCnt=0;bitCnt<8;bitCnt++)
{
if((value&0x01)==0x01)PORTC|=(1<<PC3); //Data
else PORTC&=~(1<<PC3);
PORTC|=(1<<PC1);
PORTC&=~(1<<PC1); //Clock
value=(value>>1);
}
}
B2.... Это проба немного изменить его ( когда менял попал на теплую погоду поэтому не мог видеть дефект, вносил изменения в слепую, но с морозами эффект не изменился)
Тут вроде исправил фронт Clock на СНИЗУ-ВВЕРХ, плюс пытался ввести задержки несколько ns
CODE
void loadReg(unsigned int value)
{
char bitCnt;
for(bitCnt=0;bitCnt<8;bitCnt++)
{
PORTC&=~(1<<PC1); //Clock
delay(clk_delay);
if((value&0x01)==0x01)PORTC|=(1<<PC3); //Data
else PORTC&=~(1<<PC3);
delay(data_delay);
PORTC|=(1<<PC1);
delay(clk_delay);
value=(value>>1);
}
}
Также в качестве причины возможно неправильные тайминги, длинная линия передачи данных, большая емкость линий которая с уменьшением температуры растет (Как ее посчитать и как с ней бороться программно?)
Помогите выбрать наиболее вероятную причину или укажите на ошибку.
74HC595PW.pdf ( 129.25 килобайт )
Кол-во скачиваний: 492
Сообщение отредактировал An@BoLiK - Jan 6 2010, 08:32