Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Ответить

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

Ср июн 14, 2017 11:53:11

Попробовать бы увеличить задержки при работе с дисплеем. Маловероятно, но возможно, параметры дисплея "уплыли" и стали впритык к тому, что в коде. Как вариант, если нет доступа к коду или лень ковырять его - через FUSE-биты замедлить МК в целом и посмотреть на результат.

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

Ср июн 14, 2017 12:20:26

Сначала надо цепи питания конденсаторами обвязать. А уже потом начинать о таймингах волноваться. У меня стандартные тайминги нормально работают даже с китайскими 1602 по 80 рублей.

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

Ср июн 14, 2017 12:25:12

WiseLord писал(а):Попробовать бы увеличить задержки при работе с дисплеем
а ведь я пытался...
так и с ЖКИ. есть метод, который с любым дисплеем, в любых услвиях, гарантированно дает положительный результат - это работа с контролем занятости контроллера ЖКИ. т.е. разработав соответствующую "библиотеку" можно вообще не беспокоиться о том, какой дисплей какие задержки обеспечивает, достаточно удостовериться, что он придерживается принятого протокола обмена. и абсолютно не стоит переживать, 40 мкС у него цикл или 43 или 37 или 98 вдруг. понимаете? раз - и навсегда.

если у вас в программе задержки (независимо от способа их формирования - циклы, таймеры или еще что), то при любых отступлениях от типа ЖКИ, для которого код проверен, вы обязаны удостовериться, что ваши задержки гарантированно более предельных для конкретного типа, без этого вы не можете быть уверены, что код сработает. и даже если вы закладываете 1 мс паузу там, где по даташиту ожидается 40 мкс, это ни от чего вас не спасает - все равно надо проверять даташит, иначе вы не разработчик, а шаляй-валяйщик.

и кому оно надо - лишние телодвижения? ради чего? ради утешения "я крут, потому что делаю не так, как проще"? можно делать по разному, но, имхо, лучше делать именно так, как я описал. не потому, что я описал, а потому что так правда лучше.

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

Ср июн 14, 2017 14:06:39

а ведь я пытался...


Как обрабатываешь ситуацию «дисплей завис»?

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

Ср июн 14, 2017 14:15:02

Как обрабатываешь ситуацию «дисплей завис»?

примерно так же, как "метеорит упал", т.е. никак. но если очень хочется - в чем проблема? ожидание с таймаутом: хотите парить мозг, так на здоровье.

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

Ср июн 14, 2017 15:44:47

Ай маладес...

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

Чт июл 06, 2017 10:12:38

Всем доброго времени суток! Товарищи программисты, помогите пожалуйста. Суть проблемы такова. МК Atmega16A, индикатор 16х2 (HD44780) подключенный по 4-х битному интерфейсу. В программе пока ничего особенного. Пока просто организовано меню. Движение по меню кнопками +/-. В самом начале описана глобальная переменная menu, которая меняется в зависимости от нажатий кнопок. А в основном цикле в зависимости от содержимого этой переменной с помощью switch(menu) case: на дисплей выводятся нужные пункты меню. В программе сначала вызывается функция инициализации дисплея, затем вывод на него приветственного сообщения и задержка в 3 секунды. Затем очищаю дисплей послав ему код 0х01 и выжидаю 2 мс для выполнения команды(по даташиту надо 1640 мкс). Все, дисплей очищается и начинается основной цикл программы.
Здесь стоит
switch (menu)
{
case 10: ...............; break;
case 20: ...............; break;
case 30: ...............; break;
}
так же здесь находится функция опроса кнопок, но это не важно. проблема не в этом.
С помощью таймера, каждые 100мс я устанавливаю флажок в некой переменной. Как только этот флажок устанавливается, программа заходит в вышеописанный switch, для того чтобы обновить текст на дисплее и сбрасываю этот флаг. Таким образом обновление дисплея происходит каждые 100мс.
И самое важное. Перед каждым обновлением дисплея, я его очищаю командой 0х01 и ставлю задержку в 2мс для выполнения команды. Но при этом наблюдается мерцание дисплея. Движение по меню работает, все нормально, а дисплей мерцает.
Собственно вопрос: кто как и в какой момент времени очищает дисплей? Что я делаю не так? Может подскажете...
МК работает на частоте 4МГц. Пишу на Си в Atmel Studio 7.0

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

Чт июл 06, 2017 10:31:15

не надо очищать дисплей. строки меню надо либо выводить с очисткой "справа", либо сделать все по 16 символов, дополнив справа пробелами.
обновлять экран надо только в том случае, если состояние меню изменилось, т.е. было нажатие на кнопки. если состояние не менялось, обновлять не надо. т.е. обновление по таймеру не нужно.

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

Чт июл 06, 2017 10:32:56

Нужно ли очищать дисплей чтобы обновить индикацию? Полагаю, что нет. Сам никогда не использую команду 0x01, а сразу вывожу образ экрана.

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

Чт июл 06, 2017 11:26:06

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

Спасибо, буду пробовать так.
строки меню надо либо выводить с очисткой "справа"

Это как?
а сразу вывожу образ экрана

То есть это то что имел ввиду уважаемый ARV?
сделать все по 16 символов, дополнив справа пробелами

Извиняюсь если что за глупые вопросы, просто ни разу не имел дело с индикаторами, да и пишу недавно...

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

Чт июл 06, 2017 11:51:47

включите логику.
если на экране было МАМА (остальное - пустое место, т.е. пробелы), а вы вывели (без очистки) ПАПА - будет мерцание? нет, конечно! мерцание есть от того, что на долю секунды слово МАМА исчезло и экран опустел, и вы это видели, а потом на экране новое слово.
стоит убрать очистку - мерцание пропадет.
что же будет, если вместо ПАПА вы решите вывести НА? на экране будет НАМА, потому что НА затирает не все 4 позиции, а только две от старого слова. поэтому в этом случае следует вывести еще и 2 пробела после НА.
логично?
распространяя логику на все случаи жизни, приходим к тому, что я уже сказал: всегда выводить по 16 символов. если симвлоов в строке меньше 16, то дополнять строку пробелами. это можно сделать двумя способами: либо на самом деле все строки уровнять по длине при помощи пробелов, либо написать функцию, которая будет выводить символы строки, пока строка не кончится, а затем выводить пробелы, пока общее количество символов не достигнет 16. это я и назвал "вывод с очисткой справа".

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

Чт июл 06, 2017 11:59:35

ARV, спасибо огромное за разъяснение. Буду пробовать :))

Добавлено after 2 minutes 39 seconds:
И еще такой вопросик: хватит ли частоты работы 4МГц? Если учесть, что общение с индикатором происходит по 4-х проводной линии.

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

Чт июл 06, 2017 12:18:25

хватит или нет - это уж от ваших задач зависит :) для меню - не то, что хватит, а еще и останется.

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

Чт июл 06, 2017 12:20:21

И еще такой вопросик: хватит ли частоты работы 4МГц? Если учесть, что общение с индикатором происходит по 4-х проводной линии.


Вопрос не совсем корректен: зависит от того, каким кодом заполняются эти временные слоты. Возьми китайский логический анализатор и посмотри, сколько времени на что уходит.

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

Чт июл 06, 2017 12:54:30

Ой спасибо всем участвующим. С вашей помощью понял я свои ошибки. Понял в каком направлении действовать нужно :)) Уже часть кода изменил. Вроде работает :) Если что, еще напишу.

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

Вт июл 11, 2017 15:48:56

Доброго времени суток! Тоже проблема с экраном Winstar WH2004A-YGH-CT. Если коротко - не работает команда занятия адреса(Set DDRAM Address).
Пару лет назад начинал делать устройство с этим дисплейчиком и забросил, вроде все работало.
Сейчас же делаю новое устройство на новом кристале. Теперь экран просто по порядку(точнее через строчку) заполняется нужным текстом, работают команды включения отключения курсора и подобные, но при попытке занятия адреса - выводит левый символ и пишет дальше со старого места. :kill: Пробовал играться с задержками(до 100-ен миллисекунд) - толку ноль.
При этом при симуляции в Proteus все работает (и работало до всяких манипуляций) корректно.
Прозвонил все цепи - от МК до LCD. На всякий случай подтянул выход R/W.
В режиме отладки через MPlab замерял уровень напряжение на выводе RS - все правильно.(правда в этом режиме даже символ не напечатался)
Контроллер pic16f1937, 32МГц.

Убил пол ночи. виню дисплей(хотя в глубине души понимаю - проблема во мне :oops: )
Изображение
Спойлер
Код:
#define RS   PORTD,0
#define RW   PORTD,1
#define E           PORTD,2   
#define LCD_DB   PORTC 
;========================
; Инициализация дисплея
;========================
INIT_LCD
   bcf RS
   bcf RW
   bcf E
   movlw   .20
   call pause_T   ; задержка не менее 15мс
   bsf E
   movlw   b'00110000'   ;Команда "Function set"
   movwf   LCD_DB
   call strobe
   bcf E
   movlw   .5
   call pause_T      ; задержка не менее 4,1 мс
   
   bsf E
   movlw   b'00110000'   ;снова команда "Function set"
   movwf   LCD_DB
   call strobe
   bcf E
   
   movlw   .200
   call pause_T      ; задержка не менее 100 мкс
   

   bsf E
   movlw   b'00111100'   ;И снова команда "Function set"
   movwf   LCD_DB      ;но уже с настройками: 8 бит, 2-line, 5x11dots
   call strobe
   bcf E
   
   movlw   .1
   call pause_T   ; задержка не менее 39 мкс
   
   bsf E
   movlw   b'00001110'   ;Команда "Display On/OF"
   movwf   LCD_DB      ;включаем дисплей, курсор и отелючаем подсветку курсора
   call strobe
   bcf E
   
   movlw   .1
   call pause_T      ; задержка не менее 39 мкс
      
   bsf E
   movlw   b'00000001'   ;Команда "Display Clear"
   movwf   LCD_DB      ;очистка дисплея
   call strobe
   bcf E
   
   movlw   .2
   call pause_T      ; задержка не менее 1,53 мс   
   
   bsf E
   movlw   b'00000110'   ;Команда "Entery Mode Set"
   movwf   LCD_DB      ;автоматический сдвиг курсора(вкл) и сдвиг всего дисплея(откл)
   call strobe
   bcf E
   
   movlw   .1
   call pause_T      ; задержка не менее 39 мкс
   
   call    zalivka
   movlw   40h   ;занимаем 40 адрес
   call    SET_ADRES
   call    zalivka2
   return
;*****************************
; Конец инициализации дисплея
;*****************************
strobe
       nop
       nop
       nop
       nop
    nop
       nop
       nop
       nop
   return
pause_T
   movwf   T3
P1   movlw   .40
   movwf   T2
P2   movlw   .66
   movwf   T1
P3   decfsz   T1,f
   goto   P3

   decfsz   T2,f
   goto   P2

   decfsz   T3,f
   goto   P1 
   return
;==================   

SET_ADRES
   movwf  LCD_DB
   bsf       LCD_DB,7    ;Команда "Set DDRAM Adress"
   bcf RS
   bcf RW
   call strobe
   bsf E
   call strobe
   bcf E
   movlw   .5
   call pause_T      ; задержка не менее 39 мкс
    return

Менял порядок выставления данных в порт и изменения битов RS и R/W. Чередовал эти операции значительными задержками.
Может кто сталкивался с подобными проблемами? Может я не в ту сторону копаю?(

P.S. добавлено 6 часов спустя.
ошибка программная, так что вопрос снимаю. сейчас буду искать, где накосячил, так как при использовании следующей конструкции, все работает
Код:
   bsf E
   movlw   b'11000000'   ;Команда "Команда "Set DDRAM Adresst"
   movwf   LCD_DB      ;с занятием места 40Н
   call strobe
   bcf E
   movlw   .1
   call pause_T      ; задержка не менее 39 мкс

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

Вс окт 15, 2017 08:29:02

Парни, подскажите есть ли возможность инвертировать символ или надо создавать свой? Рою инет и чета тишина...

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

Вс окт 15, 2017 08:38:51

Парни, подскажите есть ли возможность инвертировать символ или надо создавать свой? Рою инет и чета тишина...

Даташита достаточно. был бы это графический дисплей - без проблем. А в символьном - только свои создавать!

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

Вс окт 15, 2017 08:39:58

Для HD44780
...надо создавать свой...
или пользоваться командой B довольствуясь таким
HD44780_BLINK.PNG
(7.33 KiB) Скачиваний: 539

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

Вс окт 15, 2017 09:23:00

спасибо!
А вот еще вопрос на засыпку: возможно ли вывести несколько курсоров? Или подчеркнуть строку?
Ну или подскажите как выделить пункт меню, что он типа выбран. Моргалки (символ->пробел->символ ...) раздражают
Ответить