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

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

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

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

А как же на этом сэкономить?

Где толково написано про организацию памяти МК? У всех АВР она одинаковая? Сколько занимает одна страница?

"Черная магия" - классное выражение. :)))

И еще вопросик. Вот я сделал вместо макроса вывод строки, используя символ "конец строки" - $.
Теперь, если я не хочу выводить строку, у меня компилятор ругается, что она не объявлена... Т.е. я не задал MY: db. "", а в коде к нему идет обращение. Как лучше сделать?
И второе. А если я хочу выводить не одну строку, а несколько разных, ну пусть две на обеих строчках ЖКИ. Как реализовать два массива, а для вызова использовать ту же подпрограмму rcall MY_LINE?

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

   MY:   .db "My line is here!$"
...
...
...
  rcall MY_LINE
...
...
...
   MY_LINE:                        ;
                              ; плюс массив символов добавит по два байта на каждые два знака (и "конец строки")
      ldi ZH, high (MY*2)          ; Переходим на нашу таблицу символов на самый первый элемент (точнее нулевой)
      ldi ZL, low (MY*2)

         LETTER:   lpm   R18, Z+               ; Загружаем элемент в регистр Р18 (загрузка с пост-инкрементом)

                  cpi R18, 0x24
                  breq ENDL

               rcall   DATA_WR   
            
               rjmp LETTER
   ENDL: ret
Станислав
Реклама
<!-- Yandex.RTB R-A-62247-3 --> <div id="yandex_rtb_R-A-62247-3"></div> <script type="text/javascript"> (function(w, d, n, s, t) { w[n] = w[n] || []; w[n].push(function() { Ya.Context.AdvManager.render({ blockId: "R-A-62247-3", renderTo: "yandex_rtb_R-A-62247-3", async: true }); }); t = d.getElementsByTagName("script")[0]; s = d.createElement("script"); s.type = "text/javascript"; s.src = "//an.yandex.ru/system/context.js"; s.async = true; t.parentNode.insertBefore(s, t); })(this, this.document, "yandexContextAsyncCallbacks"); </script>
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Cделать макрос который будет подставлять переданный в него параметр вместо MY

.macro Print_string
ldi ZH, high (&1*2)
ldi ZL, low (&1*2)
rcall LETTER
.endmacro


А потом в программе раскидать код где надо вывести строки:

Print_string MYstr
Print_string MYstr1
Print_string MYstr2

.....

MYstr: .db 'str 1$'
MYstr1: .db 'str 2$'
MYstr2: .db 'str 3$'

Вобщем, параметр макроса - это метка с которой начинается строка.
Реклама
гостевая2
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

СКАЗОЧНИК писал(а):Где толково написано про организацию памяти МК? У всех АВР она одинаковая? Сколько занимает одна страница?
А как же на этом сэкономить?

В ДШ на АВР явно не употреблено слово "страница", я использовал его для удобства из других МК. К примеру, в конце проги, в той ее части, которую отведем под константы/тексты пишем:

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

.org   0xC00
Text:   .db  "......"

Если теперь по листингу видим, что все тексты не вылезают за адрес 0xC7F, можем считать, что все они на одной "странице" . Тогда загрузку старшего адреса ldi ZH, High (Text*2) можно производить один раз, уже в подпрограмме вывода строки. Но это можно рекомендовать только при большом напряге с памятью программ, т.к. приходится постоянно следить за размещением. У меня это отрыжка тех времен, "когда дискеты были большими, а память - маленькой" :) и приходилось экономить каждый байт. потому что предложение "давайте перейдем на более толстый контроллер" вызвало бы у шефа-частника поток слов, не содержащихся в словаре Ожегова. :(
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Когда это возможно, делаю так. Ограничиваю область ZH=0 и все константы размещаю по адресам меньше 0x7F. Регистр ZH навсегда определяется как 0. Программа начинается с .org=0x100. Т. о. можно связать различную память RAM, EEPROM, FLASH. В последнее время активно использую возможности self-programming the FLASH, поскольку EEPROM, по мне, далеко не безупречна в плане надёжности.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Итак... Благодарю всех, кто помог. Выкладываю крайний результат работы, больше переделывать его не буду, ибо считаю достаточным.
От рисования отдельного своего символа (макроса или подпрограммы) отказался окончательно, не функционально это. Кто читал даташит, тот и так знает как нарисовать. Кто не читал, может пользоваться встроенным массивом и рисовать хоть сразу 8 своих символов. Так проще. Еще один момент, что повлияло на это - это то, что не производится чтение текущего адреса из дисплея, поэтому нарисовать свой символ в позицию курсора... :dont_know: А остальные варианты - это пляска с бубном и много лишних телодвижений и увеличение кода.
Зато теперь можно выводить строками буквы (кроме русских) сколько угодно. )))
И как обещал, провел тестирование на однострочном дисплее DV16110 желто-зеленая подсветка, производитель DataVision. Инициализируется он также, как и 1602, т.к. по сути является двухстрочным 8 знаковым, но в одну строку... :))) Кому не понятно, читайте даташиты на эти контроллеры (которые в названии темы).
Также тестирование постоянное проводилось на двух дисплеях LCM1602К RoHS (какой-то китайский неизвестный) один с синей подсветкой и белыми буквами, другой наоборот с белой подсветкой и синими буквами.
Еще один дисплей для проверки приносил друг WH1602A WinStar желто-зеленая подсветка. Этот дисплей тестировался прямо на его плате (тоже ТИНИ2313), только без кварца в 20 МГц, а на внутренней RS - 8 МГц.
На всех работает без изменений кода. Только задавал порты, куда подключены выводы. Кстати, выводы принципиально подключались в разнобой и как попало.
Изображение
Ну и архив, как всегда. Также там основной файл для ТИНИ2313 с примером инициализации и использованием макросов. Все описано в комментариях файла LCD4.asm. Читайте. Если не понятно, спрОшайте. :)))
Вложения
LCD версия 26.01.15.rar
(5.69 КБ) 508 скачиваний
Станислав
Реклама
гостеваая 3
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Прикупил я себе таких дисплейчиков

Но не нахожу в даташите его потребление в разных режимах.

Сколько потребляет сама подсветка не важно. Меня интересует потребление дисплея без подсветки. И играет роль когда на экране есть какие нибудь цифры или нет для потребления.

И если мне нужно для устройства минимально понизить потребление и дисплей работал пару секунд после нажатия кнопок на устройстве как быть?
Есть команда отключения или физически надо вырубить ему питание.

Между ножками МК и ножками дисплея надо использовать резисторы?


Изображение
Вложения
Lcd2x16g.jpg
(25.32 КБ) 3065 скачиваний
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

amd9800 писал(а):Но не нахожу в даташите его потребление в разных режимах.

Там посмотрите по потреблению, может чего подскажет. Там на контроллер его, но думаю, сам ЖКИ мало жрет без подсветки. В любом случае там на последних страницах есть. А разница в есть или нету символов - думаю не большая совсем... Хотя, можете измерить и поделиться самыми точными данными.
amd9800 писал(а):Есть команда отключения или физически надо вырубить ему питание.

Команды на отключение... Это типа "Спящий режим" как у МК? Насколько знаю (вкуривая эти даташиты) такой нету.
amd9800 писал(а):надо использовать резисторы?

Если МК и ЖКИ от 5 Вольт питаются, то не надо. Там один подстроечный на контраст токма. ))))
Вложения
HD44780.pdf
(322.07 КБ) 452 скачивания
Станислав
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Данные по потреблению в даташите на контроллер можно принимать в расчет только если это даташит от конкретного индикатора, сейчас идут контроллеры-капельки и многочисленные аналоги что фиг разберешься что именно там стоит. Надёжней, конечно, подавать питание на индикатор прямо с ножки контроллера а при отключении сначала перевести все выводы подключенные к нему в ноль а потом обесточить индикатор. Это то что заработает с ЛЮБЫМ индикатором и он точно ничего потреблять в паузах не будет. только учти, что каждый раз включая его надо ждать и по полной программе проводить инициализацию.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Alexeyslav, благодарю, за подсказку по макросу выше. :beer:
Станислав
Аватара пользователя
xkp
Опытный кот
Сообщения: 781
Зарегистрирован: Ср ноя 18, 2009 12:50:31
Откуда: ковров
Контактная информация:

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

Сообщение xkp »

Здравствуйте. Имеется знакосимвольный дисплей 20х4. У него одна проблема: в нем нет русского алфавита. За место русского, я так понял там арабские буквы. Возможно ли перешить знакосимвольную таблицу в нем на русскоязычную? Или же только остается пользоваться дополнительными "пустыми" символами, которые в начале программы можно запрограммировать?
был тут, но дельного там вроде ничего нету, да и тема закрыта.
R5VCH
Хотелки:
СпойлерАналоговый осциллограф С1-112, С1-118, другие
не/рабочие модули от комплекса ОДА-102
всё что касается AVR, arduino, raspberry
всё что касается КВ-УКВ-радиосвязи, mashtastic
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Нет. Перепрошить невозможно.. :( Придется только рисовать самому.
Станислав
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

СКАЗОЧНИК писал(а):Придется только рисовать самому.
И то всего 8 символов. Остальные использовать англицкие.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Можно сделать библиотеку.
В ней задать таблицу русских символов. А дальше в самой библиотеке схожие символы будут браться из дисплея. А те что не похожи будут подгружаться в дисплей динамически и отображаться.

Наврядли на одном экране будет больше чем 8 русских символов отличных от латинских.

Кстати с подсветкой я решил так что подаю питание через ножку МК и с ограничительным резистором примерно 10мА. Светит нормально.

Надо померить какой расход у экрана и думаю тоже его питать через ножку МК но с другого порта чтоб не перегрузить один порт. таким образом можно будет организовать полный спящий режим.
Последний раз редактировалось amd9800 Чт янв 29, 2015 21:03:16, всего редактировалось 1 раз.
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

У 20-символьных вроде таблица пользовательских символов на 16 штук, не?
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Нет, одновременно максимум 8, не зависит от длины строки, но зато можно менять содержимое много много раз.
HD44780U
64 × 8-bit character generator RAM
8 character fonts (5 × 8 dot)
4 character fonts (5 × 10 dot)
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

akl писал(а):Программа начинается с .org=0x100.

Как такое возможно ? Ведь по адресу 0х0000 располагаются векторы . Или Вы блок констант ставите после векторов, но до 0х7F ? Мне кажется, это неудобно. Я все константы загонял в конец памяти.
akl
Друг Кота
Сообщения: 4444
Зарегистрирован: Пт мар 07, 2008 06:54:43
Откуда: Ижевск

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

Сообщение akl »

Jack_A писал(а):Или Вы блок констант ставите после векторов, но до 0х7F ?
Да, именно так. Например для 2313 первую страницу, отведённую под вектора не трогаю, остальные 224 (16*2*7) байта можно использовать под константы. При этом ZH всегда 0. Мне так удобнее.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Я тоже массивы констант стараюсь располагать с начала страницы.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Аватара пользователя
Jack_A
Друг Кота
Сообщения: 6307
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

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

Сообщение Jack_A »

Я так перестал после одного случая : пришлось в Студии отлаживаться по hex'у, исходник потерялся, так Студия так дизассемблировала константы в код, что мне стало тоскливо. Хотя у каждой бабуси -- свои куры-гуси.
amd9800
Опытный кот
Сообщения: 822
Зарегистрирован: Вс июн 02, 2013 12:23:03

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

Сообщение amd9800 »

Кстати потребление LCD 2x16 примерно 8-10 мА. так что вполне реально его питать через ножку МК.
И когда надо просто отключать экран.
Ответить

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