Перейти к содержанию
    

не запускается индикатор

в устройствах стоял WH1602D-YGH-CTK. Вот в новой партии решил вые.... и поставил синенькие WH1602C-TMI-CT. Все девайсы перестали показывать. Пишут какую- то муйню, причем видно что вторая строка на нем даже не инициализируется. Параллельно подпаяный старый индикатор работает.подключение 4 -битное, через 74hc164.без бизи флага.Тайминги уже чуть-ли не часовые...

Перебробовал несколько инициализаций- но бестолку. По идее они отличаются только перевернутыми ногами питания. Что посоветуете? или может кинете инициализацией?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А не могут ли отличаться полярности управляющих сигналов? Я вроде в протеусе сталкивался с такими граблями.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

МП41, контроллер у них один и тот же - KS0066, управление должно быть одинаковым.

Судя по описанию неполадки (с учётом правильности инициализации и таймингов), не проходит самое начало инициализации. Такое бывает если оборвана какая-то из линий в самом индикаторе.

По умолчанию он настроен на восьмибитный интерфейс. Можно попробовать в таком режиме вывести в него текст с целью проверки целостности линий.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В моем случае контроллер был один и тот же, а одна из линий - в инверсии. Чтобы не переделывать программу я вставлял просто инвертор в схему (ведь это моделирование, в реальности проще было бы подправить программу).

 

Эти ЖКИ (старый и новые) внешне хоть одинаковые по компоновке, распиновке и т.д.? - Ой, уже вижу, что буквы разные, C и D.

Изменено пользователем МП41

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

МП41, контроллер у них один и тот же - KS0066, управление должно быть одинаковым.

Судя по описанию неполадки (с учётом правильности инициализации и таймингов), не проходит самое начало инициализации. Такое бывает если оборвана какая-то из линий в самом индикаторе.

По умолчанию он настроен на восьмибитный интерфейс. Можно попробовать в таком режиме вывести в него текст с целью проверки целостности линий.

 

линии не могут быть оборваны, так как молчит весь десяток девайсов. DB0-DB3 уже пробовал сажать на землю. Сигналы управления 0, 3В и 5,1 В. Фронты крутые. R/W жестко на земле. распиновка у этих типов индикаторов одинаковая, только 1,2 нога-питание перевернуты. Играясь инициализациями как-то добился свечения 2 строк, но ничего не выводилось. Параллельно еще подцепил третьим-CCM1620- так эта зараза все инициализации проглатывает. Если пропустить процедуру инициализации- то на всех трех индикаторах - одинаковые кракозябры.Вывод- она по какой-то причине не проходит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А как Вы осуществляете инициализацию?

Вот что пишут для контроллера HD44780.

If the power supply conditions for correctly operating the internal reset circuit are not met, initialization by instructions becomes necessary.

Т.е. если в индикаторе не реализована схема сброса, то применяются следующие шаги по инициализации.

И далее инструкция по запуску в 4х-битном режиме (HD44780U стр. 46 рисунок 24, ссылка ниже):

 

1. Ждать >15 мс после подъема питания до 4,5В (или >40 мс при 3,3В)

2. Подаем команду перехода в 8-битный режим (RS=0, D = 0011xxxx). Флаг BF не проверять

3. Ждем >4.1 мс

4. Команда перехода в 8-битный режим (RS=0, D[7:0] = 0011xxxx) Флаг BF не проверять

5. Ждем >100 мкс

6. Команда перехода в 8-битный режим (RS=0, D[7:0] = 0011xxxx) Флаг BF не проверять

7. Дождаться завершения предыдущей инструкции ( для Fosc = 270 кГц t > 37 мкс)

8. Команда перехода в 4-битный режим (RS=0, D[7:0] = 0010xxxx) После этой инструкции можно уже проверять BF.

9. Команда перехода в 4-битный режим+размер индикатора (RS=0, D[7:4] = 0010, D[7:4] = NF** )

10 Display off [0000]:[1000]

11 Display clear [0000]:[0001]

12 Entry mode set [0000]:[01,I/D,S]

 

Обратить внимание, что пункты 2,4,6,8 выполняются в 8-битном режиме. Т.е. по одному стробу сигнала Е на 1 байт(вернее, 4 бита) данных

Начиная с п. 9 (включительно) команды подавать в 4-битном режиме (2строба х 4бита).

При выполнении п. 8-12 придерживаться таймингов.

Да, и самое главное. Не забыть включить индикатор (Display On = [0000]:[11CB])

hd44780u.pdf

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Александр Куличок +1.

 

Когда я начинал работать с ЖКИ - написал код инициализации, но не особо внимательно читая даташит... Этот код работал на нескольких моделяж ЖКИ. Но на очередном ЖКИ случилась трабла. Дисплей ничего не показывал и вешал прогу. Jtag-гом определил зависание на первом же опросе BUSY флага. Сразу переделал инициализацию, как рекомендовано в даташите... Вот уже несколько лет этот код кочует по разным девайсам с ЖКИ (HD44780 или аналогом) от разных производителей - проблем пока нету.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

delay_ms(255);

LCD_com(0x03); // 8 бит

delay_ms(10);

LCD_com(0x03); // 8 бит

delay_ms(10);

LCD_com(0x03); // 8 бит

delay_ms(10);

LCD_com(0x02); // переходим на 4 бита

 

LCD_com(0x02); // 4 бита, 2 строки, 5*8

LCD_com(0x08);

 

 

 

LCD_com(0x00); // дисплей выключить

LCD_com(0x08);

 

 

LCD_com(0x00); // очистка экрана

LCD_com(0x01);

delay_ms(10);

 

LCD_com(0x00); //Сдвиг вправо

LCD_com(0x06);

delay_ms(2);

 

LCD_com(0x00); // дисплей включить, курсор и мигание выключить

LCD_com(0x0C);

delay_ms(2);

 

Полностью совпадает hd44780u, но не работает. Другой дисплей, подпаянный параллельно но с буквой D все отображает. Дисплеи менял- есть несколько штук на разъемах. При таком варианте работают 2 строки. Но рисует кракозябли.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Господа, спасибо за помощь. Вопрос решился. В процедуре вывода по интерфейсу я все время держу E=1 и роняю его в нолик только когда вся информация на DB4-DB7 выставлена. Просто добавил его импульсом после вывода информации на пару микросекунд- и все заплясало. Хотя явное отклонение от даташита. Что-то начинает закрадываться сомнение по поводу фиксации информации по перепаду E из 1 в 0. Может прав был товарищ МП41 ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просто добавил его импульсом после вывода информации на пару микросекунд- и все заплясало.
А времянки в даташите, для чего приведены? См. Figure 6 . Write Mode Timing Diagram и таблицу перед ним. До кучи даташит еще одной разновидности клона HD44780U.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при чем здесь времянки? Я же написал, что передний фронт у меня до выставления данных, а задний фронт, когда нужно защелкивать. Всё по даташиту. Причем по всем даташитам, которые я перечитал. Я всего лишь передний фронт переместил после процедуры установки данных, из чего можно предположить, что защелкивается по переднему фронту.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Flasher, опубликуйте функцию LCD_com(), оба варианта.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Работающий вариант (74HC164)

void LCD_com(unsigned char byte)

{

LCD_tetrada(byte&0x0F); // R/S=0

delay_us(50);

}

 

void LCD_tetrada(unsigned char tetrada)

{

unsigned char temp;

tetrada=tetrada<<3;

for(temp=5;temp>0;temp--)

{

CLK=0;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

if(tetrada&0x80)DATA=1; else DATA=0;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

tetrada=tetrada<<1;

CLK=1;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

}

LOAD=1;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

LOAD=0; // Задний фронт, по которому должна идти загрузка

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

DATA=1;

}

 

Не работающий вариант:

void LCD_tetrada(unsigned char tetrada)

{

unsigned char temp;

LOAD=1;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

tetrada=tetrada<<3;

for(temp=5;temp>0;temp--)

{

CLK=0;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

if(tetrada&0x80)DATA=1; else DATA=0;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

tetrada=tetrada<<1;

CLK=1;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

}

LOAD=0;

#asm ("nop");

#asm ("nop");

#asm ("nop");

#asm ("nop");

DATA=1;

}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

при чем здесь времянки? Я же написал, что передний фронт у меня до выставления данных, а задний фронт, когда нужно защелкивать. Всё по даташиту.

А не в том ли дело, что сигнал R/S защелкивается по _переднему_ фронту ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

только что проверил про RS- 6 типов дисплеев - им все равно. Этот на защелкивание RS по переднему фронту не реагирует.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...