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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

Что значит с параметрами? У вас что, при вызове подпрограммы что-то обнуляется?
К примеру, если перевести этот макрос в подпрограмму (взято из вашей программы)
Спойлер

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

   .MACRO   STROBE

      sbi Eport, Epin      ; Подняли строб
         
         rcall DELAY      ; Задержка более 500 нс

      cbi Eport, Epin      ; Опустили строб

         rcall DELAY      ; Задержка более 500 нс

   .ENDM

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

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

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

ДА, этот я уже перевел. Это было просто. Сэкономил на этом еще 26 Байт. 8)
А вот этот как?
Спойлер

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

   .MACRO   ADDRESS      ; Адерс в формате Адрес (х,у) , где х - строка (1 или 2), у - позиция в строке (0...16)
      
         ldi R17, @0

         cpi R17, 1

         breq RAVNO      ; Перейти, если равно, т.е. выбрана 1 строка

            ldi R17, (192+@1)   ; А если выбрана 2 строка, то прибавляем к ее адресу (и команде) позицию
         
            rjmp W
         
      RAVNO:   ldi R17, (128+@1)   ; А если первая строка, то прибавляем к ее команде позиции

      W:   rcall CMD_WR

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

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

Сообщение Alexeyslav »

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

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

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

А задержки могут быть больше намного, чем рекомендуется? Вроде же написано, что не менее 40 мкс? Значит можно и в 1 сек? А то что-то я все изломал...
Станислав
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

Не намного, но могут. Я никогда не обращяю на них внимание, поскольку всегда, перед обращением к индикатору, проверяю BS.
СпойлерПримечания:
1. Указанное время выполнения команд является максимальным. Его не обязательно выдерживать при условии чте+
ния флага занятости BS — как только флаг BS=0, так сразу можно писать следующую команду или данные. Если же
флаг BS перед выдачей команд не проверяется — необходимо формировать паузу между командами не менее ука+
занного времени для надежной работы модуля.
2. При чтении бита статуса никакую паузу делать не надо.
С Уважением, Альберт (Albert_V).
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Ну, вот. Написано "Не менее указанного" Т.е. можно и больше? Почему же тогда ненамного?
Теоретически: могу ли я на порт дисплея повесить тупо тумблеры и вручную подавать нужные мне команды и строб соответственно? Будет так работать? :roll:

З.Ы. в процессе инициализации, не проверяют же флаг... Вот я и думаю...
Последний раз редактировалось СКАЗОЧНИК Вс янв 11, 2015 15:18:08, всего редактировалось 1 раз.
Станислав
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

Если цель: работать с индикатором как можно медленее - ДА. :)))
СКАЗОЧНИК писал(а):Почему же тогда не намного?

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

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

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

Не... :))) цель маленько не такая. )))
Просто есть несколько типов индикаторов на разных контроллерах. Какой контроллер у меня - не известно. Т.к. не могу на него найти точный даташит, да и производитель китайский... Поэтому решил пойти путем "голь на выдумку хитра". Т.е. собрать типы инициализации всех возможных контроллеров и сделать один универсальный для всех. И он даже начал работать, пока я не взялся за оптимизацию и что-то поломал, пока не могу найти что... :facepalm: :)))

Вот для MT-16S2H:
1. Включить питание
2. Ждать 20 мс.
3. Команда 0011 (8 разрядов)
4. Ждать 40 мкс.
5. Команда 0011
6. Ждать 40 мкс.
7. Команда 0011
8. Ждать 40 мкс.
9. Команда 0010 (4 разряда)
10. Ждать 40 мкс.
11. Дальше не регламентировано. )))))

Вот для HD44780:
1. Включить питание
2. Ждать 15 мс.
3. Команда 0011
4. Ждать 4,1 мс.
5. Команда 0011
6. Ждать 100 мкс.
7. Команда 0011
8. Ждать 50 мкс. (хотя не регламентировано)
9. Команда 0010
10. Ждать 50 мкс. и т.д.

Вот для KS0066:
1. Включить питание
2. Ждать 30 мс.
3. Команда 0010
4. Ждать 39 мкс.
5. Дальше уже полные команды и паузы 39 мкс. А для очистка дисплея с паузой 1, 53 мс.

Если повторить несколько раз подряд одну и туже команду для KS0066, думаю ничего страшного с ним не будет. А вот если для HD44780 не дописать одну команду? Вместо трех подряд подать две? Думаю, ему не понравится.
А паузы при инициализации выбрать самые длинные из указанных. Однако, в целях "сжимания" кода, хотелось бы использовать не разные задержки в разных местах, а одни и те же в некоторых. Например, пауза №2 (при включении) длинной 20 мс. использовать для задержки после очистки дисплея (медленная команда) вместо 1,6 мс.
Станислав
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

СКАЗОЧНИК, INIT "проходи́те" с максимальными временами а потом, когда нужно уже выводить информацию на индикатор, для минимизации времени вывода, читайте BS.
Лично меня, никогда не интересовало время появления текста на индикаторе после включения питания (в разумных пределах). А вот потом вывод надо делать как можно быстрее.
С Уважением, Альберт (Albert_V).
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Albert_V писал(а):Лично меня, никогда не интересовало время появления текста на индикаторе после включения питания.

Вот и я о том же! Пусть инициализируется хоть две-три секунды. )))
Последний раз редактировалось СКАЗОЧНИК Вс янв 11, 2015 15:50:48, всего редактировалось 1 раз.
Станислав
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

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

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

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

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

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

Сообщение koyodza »

Albert_V писал(а):когда нужно уже выводить информацию на индикатор, для минимизации времени вывода, читайте BS.
Лично меня, никогда не интересовало время появления текста на индикаторе после включения питания (в разумных пределах). А вот потом вывод надо делать как можно быстрее.

Ждать готовности индикатора - это слишком ресурсоёмко. Вывод на подобные индикаторы всегда делаю через буфер в памяти, содержимое которого выводится в индикатор отдельной задачей через заведомо большие промежутки времени, чем требуется индикатору.
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

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

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

Сообщение koyodza »

При чем тут приоритеты? Если вывод происходит в буфер, нет необходимости вообще интересоваться готовностью индикатора. Если буфер не используется, то любой вывод более чем одного символа будет блокировать все задачи, которые в это же время тоже пытаются что-то выводить на индикатор. Огранизован буфер может быть по-разному: в виде очереди вывода или в виде shadow памяти. Но для небольших индикаторов (к которым относится HD44780) shadow обычно более экономичен.

На ARM кстати (особенно на старых ARM7 и ARM9) даже простое обращение к GPIO заметно тормозит ядро, поэтому на быстрых МК чем меньше обращений к периферии, тем лучше. Не говоря уже о поллинге таких медленных внешних событий.
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

koyodza писал(а):в виде очереди вывода или в виде shadow памяти

Очередь это типа РТОС?
А что такое шадоу память?
Станислав
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

koyodza писал(а):При чем тут приоритеты?.....

Я не знаю что там в AVR.
У меня, обычно, всегда отдельная подпрограмма выводит информацию на индикатор и она работает с низшим приоритетом.
Вспоминать ASM для AVR - нет желания.
Последний раз редактировалось Albert_V Пн янв 12, 2015 02:47:47, всего редактировалось 1 раз.
С Уважением, Альберт (Albert_V).
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Albert_V писал(а):Я не знаю что там в AVR.

Да в АВР почти тоже самое, что и в ПИКах... чуть команды другие и все.
А он говорит про АРМы. А это уже более крутая хреновина. )))))))

Ковырялся тут со схемой своей, решил кварц все таки заменить. Впаял такой же новый. Теперь осциллографом ловлю какую-то нижнюю гармонику примерно в 333 Гц.. И нормальную на 16 МГц. Понять не могу, что за хрень...

И еще, если переключить на внутреннее тактирование (RC внутренняя 8 МГц), кварц все равно продолжает генерацию на частоте 16 МГц. От чего в данный момент тактируется АТМЕГА8??? :shock: :oops:
Станислав
Аватара пользователя
СКАЗОЧНИК
Идёт направо - песнь заводит, Налево - сказку говорит.
Сообщения: 5000
Зарегистрирован: Чт апр 21, 2011 17:55:50
Откуда: Иркутск

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

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

Если кому-то интересно, то я продолжаю ужимать и переделывать свою библиотечку для данного типа ЖКИ на всех подобных контроллерах любых дисплеев.
На данный момент получилось:
1. Подключение ЖКИ к любому пину любого порта в любой последовательности (МК АВР) 4 битный интерфейс.
2. Остальные пины в портах никак не изменяются, их можно использовать под что угодно.
3. Пока 6 проводов. Т.е. 7 проводов, но R/W пока программно притягивается к земле, т.е. флаг BF пока не читается еще, но без него работает.
4. Программа писалась под АТТИНИ2313 с внешним кварцевым резонатором в 20 МГц.
5. Проверена программа на АТМЕГА8 с внутренней RC в 8 МГц и другом дисплее, другого производителя. (никаких задержек менять не понадобилось, только указать, куда подключены выводы ЖКИ).
6. Написаны два макроса для выведения символа (из его памяти) на дисплей и макрос для смены позиции курсора на дисплее
формат: SYMBOL 0x41 (выведет букву "А" в позиции курсора)
формат: ADDRESS 2, 6 (переместит курсор на вторую строку в шестую позицию, где строка в диапазоне 1 или 2, а позиция 1...16)
7. Ужимал как можно, язык АССЕМБЛЕР, на данный момент размер библиотеки при компиляции составляет:
7.1 Подключенный файл LCD4.asm и LCD4_MACRO.inc добавит в вашу основную программу всего 164 Байта
7.2 Команда инициализации дисплея прибавит еще 2 Байта
7.3 Вывод одного символа на экран из памяти ЖКИ добавит в вашу программу еще 4 Байта. И ТАК НА КАЖДЫЙ СИМВОЛ! Т.е. 4 символа добавят 16 Байт.
7.4 Смена адреса курсора добавит сразу 10 Байт. (соответственно, так будет с каждой сменой адреса курсора)... Если не использовать этот макрос, а тупо вручную выставлять адрес и вызвать подпрограмму, то занимать будет всего 4 байта, но так неудобно пользоваться.

ИТОГО: Чтобы вывести слово, например, "ПРИВЕТ, КОТ" (без кавычек) программа увеличится на величину подключенной библиотеки и используемых макросов, т.е. на 214 Байт.

Что еще хочу сделать:
1. Вывод собственных символов.
2. Вывод не посимвольно, а сразу строками.
2.1 Вывод строками сделать с возможностью вывода "изменяемых" параметров в процессе работы программы.
3. Выполнить чтение флага BF
4. Сделать процесс условной компиляции, чтобы можно было при конфигурации отключать лишние, например использование флага занятости ЖКИ.
5. Посмотреть, что еще можно исковеркать...
6. Проверить на однострочном дисплее 1601.
Станислав
IAlexey
Родился
Сообщения: 4
Зарегистрирован: Пт янв 16, 2015 22:23:33

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

Сообщение IAlexey »

Подскажите у кого есть сей девайс, какой у него реальная сила тока у подсветки и у контроллера, ибо свой я запил сразу же при включении, но подсветка показывает 20mA, а логика зажарилась... Хорошо бы для версий 3.3 и 5В, хоть это уже и борзость с моей стороны...

И подскажите ПЛЗ, я смотрел в доках, там подстроечный резистор который подключен к выводу пина, как он вообще работает то? Я сперва подумал что там стоит цифровой переменный резистор, но явно это перебор. Пин же имеет всего два напряжения 0.3В при логическом нуле и 3.3В (5В) при логической единице. Т.е. непонятно как он может линейно управлять сопротивлением подстроечного регистра если у пина контроллера есть всего два состояния??? Потом подумал о том, что скорее всего это просто третий контакт как переменная разностная часть напряжения по отношению к номинальному. Т.е. проще говоря это обычный ручной подстроечный резистор с тремя контактами 1,2,3 у которого номинальными являются 1,2, а третий является разностным по отношению к номиналу в случае изменения сопротивления данного резистора?
Ответить

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