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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
oleg110592
Друг Кота
Сообщения: 3832
Зарегистрирован: Сб сен 10, 2011 17:46:25

Re: Библиотека LCD AVR Studio6.2

Сообщение oleg110592 »

Проект делал в авр студии 4.19 + Atmel AVR 8-bit Toolchain 3.4.4
LCD_mega16.zip
(100.02 КБ) 194 скачивания

там же и протеус файл
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

Здравствуйте товарищи коты :)
При работе с дисплеем WH1602B (hd44780) у меня иногда возникают сбои, приводящие к выводу на дисплей каши и невозможности вывода на дисплей "нормальных" символов.
Решил лечить это переинициализацией дисплея, в случае, если в одной из точек экрана будет "левый" символ.
Заглох на моменте чтения дисплея...
Использую 4х проводной режим. Вот мой код:

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

void lcd_read(void)   {


   lcd_com(0x80);


   GPIO_InitTypeDef PORT;

   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
   PORT.GPIO_Pin = (GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
   PORT.GPIO_Mode = GPIO_Mode_IN_FLOATING;
   GPIO_Init(GPIOD, &PORT);

   for (uint8_t i = 0x00; i < 255; i++)   {      // каждое чтение должно происходить из след. адреса

      GPIO_SetBits(GPIOC, RS);
      LCD_READ();                                    // RW == 1

      uint32_t temp = 0;

      delay_us(1);
      GPIO_SetBits(GPIOC, E);
      delay_us(100);

      temp = GPIO_ReadInputData(GPIOD) & 0xF0;
      GPIO_ResetBits(GPIOC, E);

      delay_us(1);
      GPIO_SetBits(GPIOC, E);
      delay_us(100);

      temp += GPIO_ReadInputData(GPIOD) & 0x0F;
      GPIO_ResetBits(GPIOC, E);

      LCD_WRITE();
   }
   
   RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOD, ENABLE);
   PORT.GPIO_Pin = (GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7);
   PORT.GPIO_Mode = GPIO_Mode_Out_PP;
   PORT.GPIO_Speed = GPIO_Speed_50MHz;
   GPIO_Init(GPIOD, &PORT);

}


на экран вывожу символы "1234567890" и пытаюсь их считать. ожидаю 0x30, 0x31, 0x32... Вижу - 58, 58, 58, 58...42...74....42,42,42,42.
Может не из той области памяти читаю?
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

Каша возникает видимо из-за того что контроллер переключается на другой размер символов, а матрица ведь другая. Поэтому даже в случае траблов ты считаешь то же самое что и в обычном режиме. Просто вместо вывода символов 8x8 контроллер будет думать что к нему подключена матрица 16x11 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.
sklw35
Родился
Сообщения: 3
Зарегистрирован: Чт авг 07, 2014 23:51:49
Откуда: Новосибирск

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

Сообщение sklw35 »

Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
Вложения
Фото0092.jpg
фото
(133.37 КБ) 293 скачивания
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

Alexeyslav писал(а):Каша возникает видимо из-за того что контроллер переключается на другой размер символов, а матрица ведь другая. Поэтому даже в случае траблов ты считаешь то же самое что и в обычном режиме. Просто вместо вывода символов 8x8 контроллер будет думать что к нему подключена матрица 16x11 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.


переинициализировать в процессе работы напряжно, у меня не предусмотрено памяти на сообщение на дисплее, сообщения формируются довольно развратным способом, дисплей рефрешится редко, в основном сообщения частично перетирают старые. исторически так сложилось =) хотя можно и переделать.
а нельзя ли вычитывать из дисплея его настройки? :idea:
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

sklw35 писал(а):Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо


думаю, что умер. ну или где-то непропай в самом дисплее. пожалуй, будет дешевле дисплей поменять, чем искать неисправность
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
sklw35
Родился
Сообщения: 3
Зарегистрирован: Чт авг 07, 2014 23:51:49
Откуда: Новосибирск

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

Сообщение sklw35 »

slavokhire5 писал(а):
sklw35 писал(а):Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо


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


Благодарю за ответ, еще хотел бы узнать причина не может быть в МК именно в самом дисплее? у меня два LCD отображают только половину, до этого пару дней назад все ок отображалось.
Аватара пользователя
slavokhire5
Прорезались зубы
Сообщения: 202
Зарегистрирован: Пн сен 26, 2011 13:48:25
Откуда: Харьков

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

Сообщение slavokhire5 »

sklw35 , в МК - маловероятно. Проверьте питалово. Может повышенное напряжение подаете, или в плате какой-то косяк. ну или дисплеи сильно китайские )
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

а прошивку вы за последние 2 недели не меняли? сделайте тестовую прошивку, которая просто выведет 16 букв в каждую строку и больше ничего.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
sklw35
Родился
Сообщения: 3
Зарегистрирован: Чт авг 07, 2014 23:51:49
Откуда: Новосибирск

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

Сообщение sklw35 »

ARV писал(а):а прошивку вы за последние 2 недели не меняли? сделайте тестовую прошивку, которая просто выведет 16 букв в каждую строку и больше ничего.


Прошивку не менял на тестовой вот что :cry:
Вложения
Фото0093.jpg
(195.76 КБ) 525 скачиваний
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Всем доброго времени суток! Пытаюсь работать с hd44780 на pic16f876A. Помогите пожалуйста с выводом символа на дисплей. Пишу прогу на асме, использую 4х битный режим вывода данных. Хочу для начала просто вывести один любой символ на дисплей. В даташите на дисплей в последовательности вывода данных есть такие пункты:

вывести значение старшей тетрады байта данных на линии шины DB4...DB7,

затем есть пункт:

вывести значение младшей тетрады байта данных на линии шины DB4...DB7.

Как правильно вывести эти тетрады? Есть ли алгоритм их вывода? В кодах, которые я встречал используются и логические "И" и "ИЛИ" для чего? почему нельзя вывести напрямую полубайт в порт????? :?

Приведу один из кусоков кода, которые я пытаюсь понять:

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

   МОДУЛЬ ЗАПИСИ КОДА КОМАНД И ДАННЫХ LCD
;==========
Lcd_A      
   bcf   PORTB,RS              ;запись в дисплей кода команды   
   goto     Lcd1       
Lcd_D   
   bsf   PORTB,RS             ;запись в дисплей кода символа
Lcd1         
   movwf    lcd
   movlw   b'11110000'
   andwf   PORTB,f        ;очистить RB0...RB3 PORTB
   swapf    lcd,w   
   andlw   b'00001111'   ; ОЧистили в акб старший полубайт
   iorwf   PORTB,f               ;старший полубайт в PORTB
   bsf   PORTB,E   
   bcf   PORTB,E

   movlw   b'11110000'
   andwf   PORTB,f       ;очистить RB0...RB3 PORTB
   movf   lcd,W   
   andlw   b'00001111'
   iorwf   PORTB,f               ;младший полубайт в PORTB
   bsf      PORTB,E    
   bcf      PORTB,E   
   clrf   PORTB   
   call     Del_2ms   
   return
Alexeyslav
Друг Кота
Сообщения: 4550
Зарегистрирован: Чт май 05, 2011 21:26:34
Откуда: Украина, Славутич
Контактная информация:

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

Сообщение Alexeyslav »

А почему нельзя, кто не дает вывести полубайт в порт?
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Дело в том, что в моей голове посеяли смуту все те коды, что я видел - там просто так значение в порт не выводится :? , а все через логические операции. В выше приведенном коде значение полубайта почем-то выводится посредством логического "ИЛИ" -

" iorwf PORTB,f ;старший полубайт в PORTB"

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

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

Сообщение Alexeyslav »

А как по вашему надо было? Предложите конструкцию как можно затронуть только 4 бита порта без логических функций? да чтобы без лишних действий, зачем же усложнять работу... можно ведь и тупо биты дёргать напрямую, только конструкция получится ой-йоооо.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

Сообщение Аlex »

Serhio писал(а):почему нельзя вывести напрямую полубайт в порт?????
Изучите систему команд своего микроконтроллера и подумайте, как можно это сделать.
Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Аlex писал(а):Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
Хранить один символ в двух байтах :))) :facepalm:
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

Аlex писал(а):
Serhio писал(а):почему нельзя вывести напрямую полубайт в порт?????
Изучите систему команд своего микроконтроллера и подумайте, как можно это сделать.
Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.



С командами мк нет проблем - они достаточно подробно описаны в литературе. У меня вызывает затруднения сам алгоритм вывода старшей и младшей тетрад. Например мне непонятно следующие:

movlw b'11110000'
andwf PORTB,f ;очистить RB0...RB3 PORTB

зачем мы надладываем эту маску на порт B? То есть понятно что чтобы сбросить RB0...RB3. А вот зачем мы их сбрасываем я не совсем понимаю?
Ну и попутно тогда вопрос - нельзя ли просто записать в порт В значения с очищеными битами RB0...RB3?
Аватара пользователя
Gudd-Head
Друг Кота
Сообщения: 20092
Зарегистрирован: Чт сен 18, 2008 12:27:21
Откуда: Столица Мира Санкт-Петербург

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

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

Дык, сбрасывается чтобы не попортить работу остальных 4-х бит порта.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
Serhio
Прорезались зубы
Сообщения: 249
Зарегистрирован: Вс авг 15, 2010 20:42:44
Откуда: Тюмень
Контактная информация:

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

Сообщение Serhio »

не совсем понял Вас :( . Можно пожалуйста поподробнее)))
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18544
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

Serhio писал(а):Ну и попутно тогда вопрос - нельзя ли просто записать в порт В значения с очищеными битами RB0...RB3?
можно, если мы знаем состояние битов RB4...RB7. а когда не знаем, мы должны гарантировать, что их состояние не изменится.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Ответить

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