Работа с ЖКИ на контроллере HD44780 и его аналогах

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Alexeyslav
какой отладчик?
Кот гуляет сам по себе, но вблизи холодильника.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Программный конечно же. Напишите для начала программу тестовую, которая выводит символы во все позиции индикатора. Потом можно будет приступить к отладке вашего алгоритма, на каждом шаге проконтролировать содержимое переменных передаваемых в подпрограммы и т.д. и т.п. Возможно даже для этого проще задействовать UART и передавать в терминал данные, так вы увидите что и когда выполняется с какими параметрами так будет гораздо проще искать ошибку.
Надеюсь, проблема воспроизводится даже в протеусе? Если в железе то добавляется еще одна причина - сгоревший индикатор.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение GARMIN »

Вопрос ламерский и с бородой, не сильно мяукайте по этому поводу.
Подключил дисплей 1601 в режиме 4-х бит. Выводит пол строки (8 символов).
Я знаю, что вторая половина дисплея адресуется как вторая строчка, но пока не знаю, как передать адрес для отображения всей строки символов.
Команды инициализации дисплея:
пауза 15 мс
0x30
пауза 5 мс
0x30
0x30
0x20
0x20 // (0x20 | LCD_NUM_LINES | LCD_FONT)
0x0C // (0x08 | LCD_DISPLAY_ON | LCD_CURSOR_ON | LCD_CURSOR_BLINK)
0x06 // (0x04 | LCD_INCREMENT | LCD_SHIFT)
0x01

во время вывода символов читаю адрес, и при достижении адреса 0x08 посылаю команду присвоения счётчика адреса 40
(0x80 | 0x40)
После чего продолжаю выводить символы, но на дисплее они не отображаются

69 страниц не осилил, подскажите, в каком посте есть ссылка на библиотеку, или что я не так делаю.
Прошу ткнуть кошачьим носом :(
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

Alexeyslav
Если выводить по одному-два, символы выводятся по всей длинне первой строки. Так что врядли что-то с индикатором. Я подозреваю нестыковку библиотек, MPLAB IDE 8.3 и компилятора HI-TECH 9.60.
Вообще-то это и есть тестовая программа: выводится несколько символов. И все. Куда уж проще?
Протеусом не пользуюсь: небыло необходимости. Автор библиотек, уважаемый Alex использует несколько другой софт. Может, в этом все дело?
Кот гуляет сам по себе, но вблизи холодильника.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Тогда конечно же надо ковырять библиотеки. Раз такое простое не проходит, значит либо библиотеки бажные либо вы неправильно ими пользуетесь. Примеры с библиотеками шли? Если нет то в топку.


или что я не так делаю.

У вас есть команда переключение в 4-битный режим, но потом должна следовать команда 0x28 для дополнительных опций, т.к. в 8-битном режиме эта команда невозможна при 4-битном подключении к индикатору поэтому используют 0x20.
Потом, скачайте все-таки даташит на ваш индикатор и посмотрите как все же адресуются символы в строках. По-разному ведь бывает. Если нет придется тогда методом тыка - пробуйте выводить во все адреса. В первую половину - адрес, во вторую какой-нибудь символ по указанному адресу, если менять адрес раз в секунду то за 2-3 минуты точно узнаете какой адрес второй половины.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение GARMIN »

При инициализации индикатора 0x28 он не запускается, так как бит 0x08 определяет двухстрочный дисплей.
С 0x20 всё проходит и дисплей высвечивает курсор.
Методом тыка можно попробовать, я привык разбираться с даташитами.
Напомните, в каком посте есть ссылка на библиотеку?
Может, поможет точное название дисплея? SC1601ASLB.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение akl »

По мне, нарушена процедура инициализации драйвера KS0066 (стр.27), который во многом схож с HD44780 (стр.46), но имеет отличия.
Также, дисплей 3-х вольтовый.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение GARMIN »

Проверил процедуру инициализации. При использовании кода для KS0066 получаются еле видимые не контрастные символы:

Код: Выделить всё

// для KS0066
   vTaskDelay(30);
   ResetLCD_RS;
   ResetLCD_RW;
   DataToPort (0x20);          //4 bit mode 1
   DataToPort (0x20);
   DataToPort (0x40);
   DataToPort (0x00);
   DataToPort (0xE0);
   DataToPort (0x00);
   DataToPort (0x10);
   vTaskDelay (2);
   DataToPort (0x00);
   DataToPort (0x60);


Дисплей инициализируется только как однострочный HD44780 вот такой последовательностью (здесь применяются байтовые команды)

Код: Выделить всё

   // для HD44780
   vTaskDelay(15);
   ResetLCD_RS;
   ResetLCD_RW;
   DataToPort (0x30);          //4 bit mode 1
   vTaskDelay(5);
   DataToPort (0x30);          //4 bit mode 2
   DataToPort (0x30);          //4 bit mode 3
   DataToPort (0x20);          //4 bit command
   LCDsendCommand (0x20 | LCD_NUM_LINES | LCD_FONT);
   LCDsendCommand (0x08 | LCD_DISPLAY_ON | LCD_CURSOR_ON | LCD_CURSOR_BLINK);
   LCDsendCommand (0x04 | LCD_INCREMENT | LCD_SHIFT);
   LCDsendCommand (0x01);                        // очисить дисплей

Перебор адресов записи от 0 до 128 простой программой не дал результатов.
Вторая половина индикатора пуста

Код: Выделить всё

for (i = 0; i < 0x80; i++)
{
   vTaskDelay (1000);
   itoa (i, addr);
   LCDsendCommand (1 << LCD_DDRAM);
   LCDstring (addr, 4);                              // вывод адреса в первую позицию LCD
   LCDsendCommand (1 << LCD_DDRAM | i);
   LCDstring ("*", 1);                               // запись звёздочки в память LCD по адресу
}

Что - то не так с инициализацией. Никак не прокатывает инициализация как двухстрочный дисплей.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение GARMIN »

Сегодня съездил и купил двухстрочный дисплей WH1602.
С ним проблем не возникло. Первый пациент скорее мёртв чем жив.
Аватара пользователя
GARMIN
Держит паяльник хвостом
Сообщения: 952
Зарегистрирован: Вс дек 02, 2012 16:58:33
Откуда: от туда
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение GARMIN »

Хм, оказывается даташиты врут.
Первый пациент не работал из-за питания его от дискаверивских 3-х вольт. Переключил на пяти вольтовое питание - заработал.
А в инструкции написано, что контроллер работает от 2,7 вольт. Вот и верь после этого людям :)) :)) :)) .
Вадиматоричик
Грызет канифоль
Сообщения: 299
Зарегистрирован: Пн май 16, 2011 10:54:32
Откуда: Красноярск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Вадиматоричик »

Всех с наступившим новым годом!
Маленькая предыстория: Около года назад купил себе дисплей на этом контроллере (HD44780). Подключил по 8-ми битной шине, поигрался, и успокоился. Схему подключения нашел в help-е для mikroPascal (Случайно.).
LCD.jpg
(89.28 КБ) 645 скачиваний

Помучился недельку с 4-х битной шиной и забыл о ней на год (Не смог "уломать".). Но вот совершенно недавно столкнулся с потребностью в использовании данного дисплея (А он у меня бело-синий 16*2.) по 4-х битной шине. Не нашел готовых "библиотек" под ассемблер (Часть либо сильно перегружена лишним для меня мусором, либо СИ... Но СИ мне не по душе.). И вот таки решился "домучить" передачу по 6 проводам (D4..D7, RS, E). Заодно и написал небольшую библиотечку. Т.к. мне нужно выводить "не стабильную информацию" (Вывести статический текст и менять его параметры. Например часы.) то я не делал возможность выдачи строк. Изучив кучу материала и разобравшись с косяками, я решил ее выложить.
Пояснения. Моя библиотека может: проводить автоматическую инициализацию на 4-х битную шину, отправлять команды/данные по ней. Можно настроить каждый пин (Для каждой ножки отдельный порт и пин), задержку между командами/данными тоже можно регулировать. Файл "LCDDraver.asm" "выдает" команду/данные содержащиеся в регистре "Temp" (Его нужно обязательно указать в заголовочном файле). Подпрограмма задержки использует Temp, Temp1 (Но восстанавливает их после окончания работы).
"LCD_Init.asm" - подключаете в том месте, где планируете проинициализировать экран. Это просто заранее прописные команды инициализации.
Настройка:
Спойлер;Описание портов LCD.----------
.equ PAUZA_LCD = 1 ;Длительность паузы при подаче на LCD.
.equ PAUZA_LCD1= 1
.equ PRS = PORTC ;Порт RS.
.equ RS = 2 ;Номер пина RS.
.equ PEE = PORTC ;Порт E.
.equ E = 3 ;Номер пина E.
.equ PL_D3 = PORTD ;Порт пина 4.
.equ PL_D2 = PORTD ;Порт пина 3.
.equ PL_D1 = PORTD ;Порт пина 2.
.equ PL_D0 = PORTD ;Порт пина 1.
.equ D3 = 3 ;№ Пина D7 в порту.
.equ D2 = 2 ;№ Пина D6 в порту.
.equ D1 = 1 ;№ Пина D5 в порту.
.equ D0 = 0 ;№ Пина D4 в порту.

Мое устройство работает на часовом кварце. И, в принципе, задержку я выставляю 1, 1. Но без нее все же нельзя. Сделал 2-х регистровую задержку, т.к. возможно понадобится работать на большей частоте, а контроллер (LCD) чувствителен к задержкам.
Пример использования библиотеки:
Спойлер

Код: Выделить всё

.include "m8def.inc"
.def Temp = R16
.def Temp1= R17
.def Max  = R29                         ;Храним 0xFF.

;Описание портов LCD.----------
.equ PAUZA_LCD = 1                      ;Длительность паузы при подаче на LCD.
.equ PAUZA_LCD1= 1
.equ PRS       = PORTC                  ;Порт RS.
.equ RS        = 2                      ;Номер пина RS.
.equ PEE       = PORTC                  ;Порт E.
.equ E         = 3                      ;Номер пина E.
.equ PL_D3     = PORTD                  ;Порт пина 4 (D7).
.equ PL_D2     = PORTD                  ;Порт пина 3.(D6).
.equ PL_D1     = PORTD                  ;Порт пина 2.(D5).
.equ PL_D0     = PORTD                  ;Порт пина 1.(D4)
.equ D3        = 3                      ;№ Пина D7 (4) в порту.
.equ D2        = 2                      ;№ Пина D6 (3) в порту.
.equ D1        = 1                      ;№ Пина D5 (2) в порту.
.equ D0        = 0                      ;№ Пина D4 (1) в порту.

ldi Max, 0xFF                 
out DDRC, Max
out DDRD, Max
out DDRB, Max

;Cтек.----------
         ldi      Temp,      Low(RAMEND)
      out      SPL,       Temp
      ldi      Temp,      High(RAMEND)
      out      SPH,       Temp


.include "LCD_Init.asm"                 ;Подключаем экран.

ldi Temp, 't'
rcall LCD_OUT_D
ldi Temp, '='
rcall LCD_OUT_D
ldi Temp, '2'
rcall LCD_OUT_D
ldi Temp, '6'
rcall LCD_OUT_D

ldi Temp, ' '
rcall LCD_OUT_D

ldi Temp, 'O'
rcall LCD_OUT_D
ldi Temp, 'S'
rcall LCD_OUT_D
ldi Temp, ':'
rcall LCD_OUT_D
ldi Temp, '2'
rcall LCD_OUT_D
ldi Temp, '1'
rcall LCD_OUT_D
ldi Temp, '0'
rcall LCD_OUT_D

ldi Temp, ' '
rcall LCD_OUT_D

ldi Temp, 'L'
rcall LCD_OUT_D
ldi Temp, '='
rcall LCD_OUT_D
ldi Temp, '2'
rcall LCD_OUT_D

ldi   Temp,   0b10000000|0x40 ;Вывод команды (переносим адрес на новую строчку).
rcall LCD_OUT_Com

ldi Temp, '1'
rcall LCD_OUT_D
ldi Temp, '6'
rcall LCD_OUT_D
ldi Temp, ':'
rcall LCD_OUT_D
ldi Temp, '4'
rcall LCD_OUT_D
ldi Temp, '5'
rcall LCD_OUT_D
ldi Temp, ':'
rcall LCD_OUT_D
ldi Temp, '1'
rcall LCD_OUT_D
ldi Temp, '9'
rcall LCD_OUT_D

main:
rjmp main

.include "LCDDraver.asm"                ;Библиотека общения с LCD по 4-м проводам (пинам).

Схема к коду:
111.jpg
(131.76 КБ) 560 скачиваний
Вложения
LCDDraver.asm
(2.87 КБ) 488 скачиваний
LCD_Init.asm
(588 байт) 548 скачиваний
Все можно сделать, было бы желание!
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Alexeyslav »

Странно. Тоже ковыряю такой же алгоритм.

несколько у вас сложно все...

вместо

Код: Выделить всё

 sbrc   Temp,  3             
 sbi   PL_D3, D3   
 sbrs   Temp,  3       
 cbi   PL_D3, D3

Для каждого отправляемого бита, которые каждый раз дергают порт я сделал так:
данные для передачи порции из 4-х бит находятся в старших 4 битах регистра ACCUM.
tempi - временный регистр из старшей половины R16-R31

Код: Выделить всё


; Индикатор
#define   lcd_data_port   PORTB
#define   lcd_enable      PB7
#define   lcd_rs         PB6
#define   lcd_light         PB4
#define   LCD_data_D7      PB3
#define   LCD_data_D6      PB2
#define   LCD_data_D5      PB1
#define   LCD_data_D4      PB0

.EQU LCD_data_mask      = (1<<LCD_data_D7)|(1<<LCD_data_D6)|(1<<LCD_data_D5)|(1<<LCD_data_D4)

....

 IN      tempi, lcd_data_port
 CBR   tempi, LCD_data_mask ; обнуляем биты порта где должны быть данные.
 
// Перенос кода команды на выводы порта
 SBRC ACCUM, 7
  ORI tempi, 1<<LCD_data_D7
 SBRC ACCUM, 6
  ORI tempi, 1<<LCD_data_D6
 SBRC ACCUM, 5
  ORI tempi, 1<<LCD_data_D5
 SBRC ACCUM, 4
  ORI tempi, 1<<LCD_data_D4
 
 OUT   lcd_data_port, tempi


Да, такое расположение выводов было удобно при разводке ATMEGA48A в TQFP-корпусе.
Вадиматоричик
Грызет канифоль
Сообщения: 299
Зарегистрирован: Пн май 16, 2011 10:54:32
Откуда: Красноярск

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Вадиматоричик »

Ваш вариант мне знаком (когда-то делал так же). Отказался от него из-за того, что при разводке иногда легче развести ножки по разным портам, еже ли мучиться с 2-х сторонней развязкой. Пусть мой вариант выполняется немного дольше (Но из-за того, что все равно следует выжидать задержку - это незаметно), зато можно подключить LCD к разным пинам разных портов, а это для меня было главное.
Все можно сделать, было бы желание!
HHIMERA
Друг Кота
Сообщения: 4583
Зарегистрирован: Вс дек 05, 2010 06:10:34
Откуда: ЮВ

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение HHIMERA »

Вадиматоричик писал(а):библиотека может: проводить автоматическую инициализацию на 4-х битную шину, отправлять команды/данные по ней.


И что же тут "автоматического"??? :))
Если взять STM8L или STM32... то там да, автоматически... раз пнул таймер - прошла инициализация, второй раз пнул - две строки на дисплее... Привязался к SysTick или к таймеру - бегущая строка обеспечена!!!
"Я не даю готовых решений, я заставляю думать!"(С)
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WishMasterMax »

Подскажите, основаны ли эти дисплеи на на контроллере 44780 - http://radio-market.com.ua/catalog/?SECTION_ID=907&ELEMENT_ID=19779 и http://radio-market.com.ua/catalog/?SECTION_ID=907&ELEMENT_ID=19781? А то я что-то внятного описания не нашел, а неизвестно что брать не хочу. Заранее спасибо за ответ.
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

В гугле забанили, что ли? :) http://teidec-west.co.jp/RC1602D.pdf
Built- in controller (KS 0066 or Equivalent)

http://ru.wikipedia.org/wiki/HD44780
Контроллер HD44780 (а также совместимый с ним KS0066) ...
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WishMasterMax »

Gudd-Head, не поверите и такое было :))
О, я когда первый раз тот документ видел не заметил KS0066, а он вроде как совместим) Спасибо :))
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20091
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Gudd-Head »

WishMasterMax писал(а):а он вроде как совместим

Вроде различия только в расположении пинов питания.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
WishMasterMax
Потрогал лапой паяльник
Сообщения: 389
Зарегистрирован: Пн июл 09, 2012 11:07:59
Откуда: Ukraine
Контактная информация:

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение WishMasterMax »

думаю найду что и куда :)) :solder:
In me the WishMaster...
Изображение
Изображение
Аватара пользователя
Ghost in shell
Держит паяльник хвостом
Сообщения: 931
Зарегистрирован: Пн июн 15, 2009 06:01:38
Откуда: USSR

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах

Сообщение Ghost in shell »

У кого-нибудь заработал LCD с PIC16 используя библиотеки HI-TECH, Alex или Catcatcat?
Кот гуляет сам по себе, но вблизи холодильника.
Ответить

Вернуться в «Периферия»