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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
ksardas_90
Родился
Сообщения: 3
Зарегистрирован: Пн окт 20, 2014 09:38:35

Re: Переопределяемые символы в HD44780

Сообщение ksardas_90 »

koyodza писал(а): Обычно я стараюсь не использовать символ с кодом 00, вместо него использую 08


1)А чем может быть чревато использование символа 00?



2)т.е. если я хочу например в 07 символ записать рисунок вертикальной палочки справа, в качестве команды передаю адрес CGRAM 0x78 затем в режиме данных (RS=1) значение этой ячейки 0х01, повторяю этот шаг увеличивая на 1 адрес CGRAM до восьми раз, и посылаю команду 0х80 для вывода символа в первое место верхней строки, и вызвать сам символ послав данные 0x07 ?
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

Re: Переопределяемые символы в HD44780

Сообщение ARV »

CyberVad писал(а): 7 байтов значащих (первый описывает верхнюю строку, седьмой нижнюю), а восьмой произвольный.
попадаются индикаторы, в которых все 8 байтов отображаются, поэтому обнуление восьмого будет правильной тактикой.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
koyodza
Собутыльник Кота
Сообщения: 2623
Зарегистрирован: Вс июл 17, 2011 11:51:52
Контактная информация:

Re: Переопределяемые символы в HD44780

Сообщение koyodza »

ksardas_90 писал(а):1)А чем может быть чревато использование символа 00?

Сложностями использования нормальных строк, которые оканчиваются нулём.
Не все пишут 50 раз подряд lcdwrite('a'), бывают и более сложные программные реализации, в которых хочется по-возможности использовать более "объектный" подход.
ksardas_90 писал(а):2)в качестве команды передаю адрес CGRAM 0x78 затем в режиме данных (RS=1) значение этой ячейки 0х01,

Всё верно, только адрес всё же 0х38, поскольку в самом адресе 6 бит, но передаётся на этом этапе 0х78, поскольку бит7=0 и бит6=1 означает запись адреса CGRAM
Привыкайте использовать правильные названия и понятия.
CyberVad писал(а):И хоть символ 5х7, а передать надо 8 байтов: 7 байтов значащих (первый описывает верхнюю строку, седьмой нижнюю), а восьмой произвольный.

Большинство современных индикаторов восьмую строку отображают. Поэтому если она не нужна записывайте туда 0.
Аватара пользователя
ksardas_90
Родился
Сообщения: 3
Зарегистрирован: Пн окт 20, 2014 09:38:35

Re: Переопределяемые символы в HD44780

Сообщение ksardas_90 »

Всем огромное спасибо, ответы многое прояснили и теперь стало получаться).
Аватара пользователя
yur4ik
Вымогатель припоя
Сообщения: 613
Зарегистрирован: Сб окт 17, 2009 18:56:05
Откуда: РФ, Башкортостан г.Сибай
Контактная информация:

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

Сообщение yur4ik »

Здравствуйте, прошу помощи. Купил седня WH1602B-YYK-CTK# как я думал, но оторвав наклейку увидел надпись 1602F. :shock: ПОсмотрел датники на WH1602 нескольких серий, у всех 1,2 ножка это +, -, но меняются местами в зависимости от серии. Раз наклейка не соответствует надписи на плате, то может по факту это ваще другая серия где 1 ножка это не GND, а +5В(Как раз первая ножка идет на кондер которого нет, но есть знак + около пяточка). У моего индикатора как я понял LED подсветка, то есть чтобы что-то увидеть на нем, нужно запитать подсветку через резистор 40-150Ом и настроить контрастность? Может у кого такое же чудо было уже? Не хочу просто на ветер 400р выкинуть

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

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

Сообщение Alexeyslav »

Подсветка не мешает увидеть изображение.
Просто прозвони питание в режиме прозвонки диодов - в таких схемах имеется обратный диод по питанию, если подключишь щупы тестера не так как надо - питание индикатора будет звониться как диод.
Аватара пользователя
yur4ik
Вымогатель припоя
Сообщения: 613
Зарегистрирован: Сб окт 17, 2009 18:56:05
Откуда: РФ, Башкортостан г.Сибай
Контактная информация:

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

Сообщение yur4ik »

Alexeyslav, благодарю :) ща узнаем где +, а где -
Нельзя всё знать, достаточно понимать.
mrFox
Нашел транзистор. Понюхал.
Сообщения: 190
Зарегистрирован: Пт сен 21, 2007 17:53:23
Откуда: Зарайск

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

Сообщение mrFox »

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

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

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

Сообщение Alexeyslav »

Но он всегда меньше чем в обратном направлении.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Спасите. ))) Подключил ЖКИ, мк АтМега8. Алгоритм по ДИ-ХАЛТУ, только урезал его, потом что мне чтение не надо. Однако Дисплей не инициализируется. Проверил вольтметром, на всех ногах DB0-DB7 у дисплея присутствует 5 вольт. Подключил по 4 битной шине.



Ничего не понимаю. Мега прошивается. Порт рабочий только что проверял. Все в идеале. ))) А на дисплее че DB подтянуты к плюсу? Так и должно быть?

Такс... еще лишние DB0-DB3 посадил на землю, чтобы не болтались.... Не знаю на сколько это правильно. Однако, ничего не изменилось.

Еще одну хрень понял... Это все из-за временных задержек. Если на выводы кварца положить палец, то начинает дисплей мерцать и можно даже разглядеть символ, который я на него отправил...

Поправил еще фьюзы СКОРТ. Теперь пальцем прижимать не реагирует, амплитуда на кварце стала больше. Проверял осциллографом. Но и запускаться дисплей теперь отказывается.
Станислав
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Такс... Не выдержал и полностью все переписал по своему.. Теперь можно подключать дисплей вообще на любые пины любых портов, хоть все на разные по 4 битной шине (6 проводов). И даже инициализация проходит (разбирался с кучей всяких даташитов). Загораются обе строки белыми квадратами. Контраст регулируется.
Остался такой вопрос. Я уже туплю...
Вывод данных как делать? Просто указывать, что сейчас идут данные и пихать их? Или надо еще адрес где-то поставить сначала, а потом пихать? А то у меня не выводит ничего... И курсор не мигает...
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

Загорание двух строк вовсе не означает удачную инициализацию.
Для надёжной инициализации в 4битном режиме вывода на дисплей нужно:

A)
1. Выставить на D7-D4 режиме INIT_DATA (0x3)
2. Перевести RS/RW в режим записи команды.
3. Задержка 20мс
4. Строб по E
5. Задержка 5мс
6. Строб по E
7. Задержка 120мкс
8. Строб по E

B)
1. Передать в 8битном режиме (1 строб)
KS0066_FUNCTION | KS0066_4BIT (0x20 | 0x00)
2. Уже находясь в 4битном режиме (два строба на команду) инициализировать двухстрочный режим
KS0066_FUNCTION | KS0066_4BIT | KS0066_2LINES (0x20 | 0x00 | 0x08)
3. Включить экран
KS0066_DISPLAY | KS0066_DISPAY_ON (0x08 | 0x04)
4. Очистить экран командой KS0066_CLEAR (0x01) с задержкой после неё 2 мс
5. Включить режим автоинкремента адреса KS0066_SET_MODE | KS0066_INC_ADDR (0x04 | 0x00)

После этого можно задавать командой адрес KS0066_SET_DDRAM + addr (0x80 + addr) и писать уже данные, каждый новый байт данных будет писаться в следующую ячейку (автоинкремент).
Последний раз редактировалось WiseLord Чт янв 08, 2015 09:06:52, всего редактировалось 1 раз.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Кажется не так малость сделал... ))) Мне все интересны эти стробы. В одном ДШ написано, что надо Три раза вывести старшую тетраду команды установки в 8 битный режим с паузами между ними в 40 мкс. А уже четвертой командой вывести старшую тетраду команды установки в 4 битную линию, а дальше без особых задержек уже можно снова пихать уже полностью 8 битные команды (разбивая вперед старшей).
Сейчас перестал две строк и включать... :(
По моему в МЭЛТовских так написано... Только не понятно про строб. 40 мкс давать когда строб наверху и 40 мкс, когда строб внизу? Или 40 мкс делить на один строб, т.е. по 20?
Вот мой проект. Там два файла с комментариями. LCD4_macro.inc и LCD4.asm.
В первом макросы и инициализация с большими задержками. Во втором объявление портов вначале и формирование выводимых данных на порте(ах) с задержками.
Вложения
LCD.rar
(3.65 КБ) 134 скачивания
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

СКАЗОЧНИК писал(а):В одном ДШ написано, что надо Три раза вывести старшую тетраду команды установки в 8 битный режим с паузами между ними в 40 мкс.

Команда установки в 8бит режим - это KS0066_FUNCTION | KS0066_8BIT (0x20 | 0x10). Это то же самое, что я выше и говорил - устанавливаем на D7-D4 число 0x3 (на всём порту получается 0x30, но D3-D0 не подключены, так что всё равно) и три раза делаем строб. Потом уже переводим (8-битной командой - по стробу на команду) в 4-битный режим, а дальше добиваем инициализацию уже 4-хбитными командами (по два строба на команду).

P.S.
Посмотрел на код - вроде никакого особо криминала не видно, должно бы работать.
Можете глянуть на мой код (на C) - он-то точно работает, может какие-то идеи появятся. Комментариев по коду нет, но там вроде бы всё понятно должно быть. Задержки те же поменять, например.
https://github.com/WiseLord/boardcomput ... s0066.h#L7
https://github.com/WiseLord/boardcomput ... 0066.c#L65
У меня несколько иначе стробирование сделано - сначала выставляются данные, а потом идёт строб (задержка - поднять E - задержка - опустить E), но можно как и у Вас - поднять E, выставить данные - задержка - опустить строб - задержка.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

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

Спасибо Вам, что помогаете! )) Даже не лень было код смотреть! Это уже много стоит. Сейчас буду дальше его мучить. :beer:
Станислав
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

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

Сообщение levaclaus »

Задача разбить "data" на 2 нибла и отправить в жк. Я мыслю в верном направлении?

//PORTA.0 // bit4
//PORTA.1 // bit5
//PORTA.2 // bit6
//PORTA.3 // bit7

PORTB.1 - "Е"

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

void write(char data)
{
char nibble;
   
   
 nibble = (data & 0xF0) >> 4;
 PORTA |= nibble;
 PORTB.1=1;
 PORTB.1=0;
   
 nibble = data & 0x0F;
 PORTA |= nibble;
 PORTB.1=1;
 PORTB.1=0;

}
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

Похоже, что в правильном. Правда я принципиально мучаюсь с ассемблером и поэтому Си начал уже забывать.
У вас только задержек не хватает между и после строба (Е). И еще направления (RS) на выдачу команды или данных.
И еще. КодеВижн со своим синтаксисом - зло.

А я уже думаю надо чтение организовывать. Что-то надоело биться уже с этими задержками.
Станислав
Аватара пользователя
levaclaus
Потрогал лапой паяльник
Сообщения: 302
Зарегистрирован: Пн янв 07, 2008 16:56:28
Откуда: Минск

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

Сообщение levaclaus »

СКАЗОЧНИК писал(а):
У вас только задержек не хватает между и после строба (Е).
КодеВижн со своим синтаксисом - зло.

сколько задержку сделать оптимально?

Ой зло, но приятное :beer:
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

Сообщение СКАЗОЧНИК »

levaclaus писал(а):сколько задержку

Ну... вообще-то я и сам с ними сейчас мучаюсь... Вот лежат у меня распечатки с разными таблицами из даташитов... Уже на кучу индикаторов. Все даташиты (почти все) скачал в этой теме. И уже дочитал ее почти всю до конца... :kill:
По одной таблице я сделал... Но у меня не работает. надо увеличивать, думаю.

А вообще написано "поднять строб", подождать более 230 нсек. потом "Сбросить строб" и еще столько же подождать. Общая длинна периода строба будет равна 500 нсек. так и в таблице нарисовано. В момент, когда строб переходит с высокого в низкий происходит запись в индикатор. Типа того.
Там даже есть табличка, а в ней написано "Период сигнала Е" минимум 500 нсек.

З.Ы. и еще.. Если у вас на порт А подключено еще что-нибудь, то лучше было читать весь порт в переменную, а потом по маске младшую тетраду переделывать, а старшую оставлять без изменений. А то иначе на других пинах порта будет выводить всякую всячину еще... )))))
Станислав
Аватара пользователя
WiseLord
Друг Кота
Сообщения: 4905
Зарегистрирован: Чт апр 11, 2013 11:19:59
Откуда: Минск
Контактная информация:

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

Сообщение WiseLord »

levaclaus писал(а):

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

nibble = (data & 0xF0) >> 4;
 PORTA |= nibble;
 PORTB.1=1;
 PORTB.1=0;
   
 nibble = data & 0x0F;
 PORTA |= nibble;
 PORTB.1=1;
 PORTB.1=0;

Такой код будет работать неправильно. Нужно ещё, как минимум, перед PORTA |= nibble добавить PORTA &= 0xF0, для очистки полубайта в порту, иначе рано или поздно там скопятся 4 единичных бита и по факту в дисплей будут всегда уходить данные 0xFF.
Последний раз редактировалось WiseLord Чт янв 08, 2015 20:03:37, всего редактировалось 1 раз.
Ответить

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