Страница 78 из 123
Re: Библиотека LCD AVR Studio6.2
Добавлено: Вс июл 27, 2014 12:48:01
oleg110592
Проект делал в авр студии 4.19 + Atmel AVR 8-bit Toolchain 3.4.4
там же и протеус файл
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт авг 07, 2014 17:54:39
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.
Может не из той области памяти читаю?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Чт авг 07, 2014 20:53:03
Alexeyslav
Каша возникает видимо из-за того что контроллер переключается на другой размер символов, а матрица ведь другая. Поэтому даже в случае траблов ты считаешь то же самое что и в обычном режиме. Просто вместо вывода символов 8x8 контроллер будет думать что к нему подключена матрица 16x11 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 05:36:25
sklw35
Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 09:05:33
slavokhire5
Alexeyslav писал(а):Каша возникает видимо из-за того что контроллер переключается на другой размер символов, а матрица ведь другая. Поэтому даже в случае траблов ты считаешь то же самое что и в обычном режиме. Просто вместо вывода символов 8x8 контроллер будет думать что к нему подключена матрица 16x11 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.
переинициализировать в процессе работы напряжно, у меня не предусмотрено памяти на сообщение на дисплее, сообщения формируются довольно развратным способом, дисплей рефрешится редко, в основном сообщения частично перетирают старые. исторически так сложилось =) хотя можно и переделать.
а нельзя ли вычитывать из дисплея его настройки?

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 09:07:15
slavokhire5
sklw35 писал(а):Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
думаю, что умер. ну или где-то непропай в самом дисплее. пожалуй, будет дешевле дисплей поменять, чем искать неисправность
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 09:46:36
sklw35
slavokhire5 писал(а):sklw35 писал(а):Здравствуйте подскажите пожалуйста что с дисплеем?
отображает только по 8 символов в каждой строке дальше непонятные потемнения
неужели дисплей умер? заранее спасибо
думаю, что умер. ну или где-то непропай в самом дисплее. пожалуй, будет дешевле дисплей поменять, чем искать неисправность
Благодарю за ответ, еще хотел бы узнать причина не может быть в МК именно в самом дисплее? у меня два LCD отображают только половину, до этого пару дней назад все ок отображалось.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 10:20:28
slavokhire5
sklw35 , в МК - маловероятно. Проверьте питалово. Может повышенное напряжение подаете, или в плате какой-то косяк. ну или дисплеи сильно китайские )
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 10:24:25
ARV
а прошивку вы за последние 2 недели не меняли? сделайте тестовую прошивку, которая просто выведет 16 букв в каждую строку и больше ничего.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пт авг 08, 2014 12:11:01
sklw35
ARV писал(а):а прошивку вы за последние 2 недели не меняли? сделайте тестовую прошивку, которая просто выведет 16 букв в каждую строку и больше ничего.
Прошивку не менял на тестовой вот что

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн авг 11, 2014 23:12:38
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
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн авг 11, 2014 23:19:09
Alexeyslav
А почему нельзя, кто не дает вывести полубайт в порт?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн авг 11, 2014 23:28:34
Serhio
Дело в том, что в моей голове посеяли смуту все те коды, что я видел - там просто так значение в порт не выводится

, а все через логические операции. В выше приведенном коде значение полубайта почем-то выводится посредством логического "ИЛИ" -
" iorwf PORTB,f ;старший полубайт в PORTB"
почему именно так?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 00:07:01
Alexeyslav
А как по вашему надо было? Предложите конструкцию как можно затронуть только 4 бита порта без логических функций? да чтобы без лишних действий, зачем же усложнять работу... можно ведь и тупо биты дёргать напрямую, только конструкция получится ой-йоооо.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 10:09:11
Аlex
Serhio писал(а):почему нельзя вывести напрямую полубайт в порт?????
Изучите систему команд своего микроконтроллера и подумайте, как можно это сделать.
Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 11:04:03
Gudd-Head
Аlex писал(а):Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
Хранить один символ в двух байтах

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 12:21:21
Serhio
Аlex писал(а):Serhio писал(а):почему нельзя вывести напрямую полубайт в порт?????
Изучите систему команд своего микроконтроллера и подумайте, как можно это сделать.
Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
С командами мк нет проблем - они достаточно подробно описаны в литературе. У меня вызывает затруднения сам алгоритм вывода старшей и младшей тетрад. Например мне непонятно следующие:
movlw b'11110000'
andwf PORTB,f ;очистить RB0...RB3 PORTB
зачем мы надладываем эту маску на порт B? То есть понятно что чтобы сбросить RB0...RB3. А вот зачем мы их сбрасываем я не совсем понимаю?
Ну и попутно тогда вопрос - нельзя ли просто записать в порт В значения с очищеными битами RB0...RB3?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 12:24:08
Gudd-Head
Дык, сбрасывается чтобы не попортить работу остальных 4-х бит порта.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 12:30:38
Serhio
не совсем понял Вас

. Можно пожалуйста поподробнее)))
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт авг 12, 2014 13:13:11
ARV
Serhio писал(а):Ну и попутно тогда вопрос - нельзя ли просто записать в порт В значения с очищеными битами RB0...RB3?
можно, если мы знаем состояние битов RB4...RB7. а когда не знаем, мы должны гарантировать, что их состояние не изменится.