Работа с ЖКИ на контроллере HD44780 и его аналогах
- oleg110592
- Друг Кота
- Сообщения: 3832
- Зарегистрирован: Сб сен 10, 2011 17:46:25
Re: Библиотека LCD AVR Studio6.2
Проект делал в авр студии 4.19 + Atmel AVR 8-bit Toolchain 3.4.4
там же и протеус файл
там же и протеус файл
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Здравствуйте товарищи коты
При работе с дисплеем WH1602B (hd44780) у меня иногда возникают сбои, приводящие к выводу на дисплей каши и невозможности вывода на дисплей "нормальных" символов.
Решил лечить это переинициализацией дисплея, в случае, если в одной из точек экрана будет "левый" символ.
Заглох на моменте чтения дисплея...
Использую 4х проводной режим. Вот мой код:
на экран вывожу символы "1234567890" и пытаюсь их считать. ожидаю 0x30, 0x31, 0x32... Вижу - 58, 58, 58, 58...42...74....42,42,42,42.
Может не из той области памяти читаю?
При работе с дисплеем 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 и его аналогах
Каша возникает видимо из-за того что контроллер переключается на другой размер символов, а матрица ведь другая. Поэтому даже в случае траблов ты считаешь то же самое что и в обычном режиме. Просто вместо вывода символов 8x8 контроллер будет думать что к нему подключена матрица 16x11 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
- Вложения
-
- Фото0092.jpg
- фото
- (133.37 КБ) 293 скачивания
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Alexeyslav писал(а):Каша возникает видимо из-за того что контроллер переключается на другой размер символов, а матрица ведь другая. Поэтому даже в случае траблов ты считаешь то же самое что и в обычном режиме. Просто вместо вывода символов 8x8 контроллер будет думать что к нему подключена матрица 16x11 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.
переинициализировать в процессе работы напряжно, у меня не предусмотрено памяти на сообщение на дисплее, сообщения формируются довольно развратным способом, дисплей рефрешится редко, в основном сообщения частично перетирают старые. исторически так сложилось =) хотя можно и переделать.
а нельзя ли вычитывать из дисплея его настройки?
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
sklw35 писал(а):Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
думаю, что умер. ну или где-то непропай в самом дисплее. пожалуй, будет дешевле дисплей поменять, чем искать неисправность
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
slavokhire5 писал(а):sklw35 писал(а):Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
думаю, что умер. ну или где-то непропай в самом дисплее. пожалуй, будет дешевле дисплей поменять, чем искать неисправность
Благодарю за ответ, еще хотел бы узнать причина не может быть в МК именно в самом дисплее? у меня два LCD отображают только половину, до этого пару дней назад все ок отображалось.
- slavokhire5
- Прорезались зубы
- Сообщения: 202
- Зарегистрирован: Пн сен 26, 2011 13:48:25
- Откуда: Харьков
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
sklw35 , в МК - маловероятно. Проверьте питалово. Может повышенное напряжение подаете, или в плате какой-то косяк. ну или дисплеи сильно китайские )
Осилит дорогу идущий
--------------------------
Пишу на Си за еду
--------------------------
Пишу на Си за еду
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
а прошивку вы за последние 2 недели не меняли? сделайте тестовую прошивку, которая просто выведет 16 букв в каждую строку и больше ничего.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
ARV писал(а):а прошивку вы за последние 2 недели не меняли? сделайте тестовую прошивку, которая просто выведет 16 букв в каждую строку и больше ничего.
Прошивку не менял на тестовой вот что
- Вложения
-
- Фото0093.jpg
- (195.76 КБ) 525 скачиваний
-
Serhio
- Прорезались зубы
- Сообщения: 249
- Зарегистрирован: Вс авг 15, 2010 20:42:44
- Откуда: Тюмень
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Всем доброго времени суток! Пытаюсь работать с hd44780 на pic16f876A. Помогите пожалуйста с выводом символа на дисплей. Пишу прогу на асме, использую 4х битный режим вывода данных. Хочу для начала просто вывести один любой символ на дисплей. В даташите на дисплей в последовательности вывода данных есть такие пункты:
вывести значение старшей тетрады байта данных на линии шины DB4...DB7,
затем есть пункт:
вывести значение младшей тетрады байта данных на линии шины DB4...DB7.
Как правильно вывести эти тетрады? Есть ли алгоритм их вывода? В кодах, которые я встречал используются и логические "И" и "ИЛИ" для чего? почему нельзя вывести напрямую полубайт в порт?????
Приведу один из кусоков кода, которые я пытаюсь понять:
вывести значение старшей тетрады байта данных на линии шины 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 и его аналогах
А почему нельзя, кто не дает вывести полубайт в порт?
-
Serhio
- Прорезались зубы
- Сообщения: 249
- Зарегистрирован: Вс авг 15, 2010 20:42:44
- Откуда: Тюмень
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Дело в том, что в моей голове посеяли смуту все те коды, что я видел - там просто так значение в порт не выводится
, а все через логические операции. В выше приведенном коде значение полубайта почем-то выводится посредством логического "ИЛИ" -
" iorwf PORTB,f ;старший полубайт в PORTB"
почему именно так?
" iorwf PORTB,f ;старший полубайт в PORTB"
почему именно так?
-
Alexeyslav
- Друг Кота
- Сообщения: 4550
- Зарегистрирован: Чт май 05, 2011 21:26:34
- Откуда: Украина, Славутич
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А как по вашему надо было? Предложите конструкцию как можно затронуть только 4 бита порта без логических функций? да чтобы без лишних действий, зачем же усложнять работу... можно ведь и тупо биты дёргать напрямую, только конструкция получится ой-йоооо.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Изучите систему команд своего микроконтроллера и подумайте, как можно это сделать.Serhio писал(а):почему нельзя вывести напрямую полубайт в порт?????
Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Хранить один символ в двух байтахАlex писал(а):Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.

[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
Serhio
- Прорезались зубы
- Сообщения: 249
- Зарегистрирован: Вс авг 15, 2010 20:42:44
- Откуда: Тюмень
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
А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 и его аналогах
Дык, сбрасывается чтобы не попортить работу остальных 4-х бит порта.
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
-
Serhio
- Прорезались зубы
- Сообщения: 249
- Зарегистрирован: Вс авг 15, 2010 20:42:44
- Откуда: Тюмень
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
не совсем понял Вас
. Можно пожалуйста поподробнее)))
- ARV
- Ум, честь и совесть. И скромность.
- Сообщения: 18544
- Зарегистрирован: Чт дек 28, 2006 08:19:56
- Откуда: Новочеркасск
- Контактная информация:
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
можно, если мы знаем состояние битов RB4...RB7. а когда не знаем, мы должны гарантировать, что их состояние не изменится.Serhio писал(а):Ну и попутно тогда вопрос - нельзя ли просто записать в порт В значения с очищеными битами RB0...RB3?
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!
при взгляде на многих сверху ничего не меняется...
Мой уютный бложик... заходите!