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

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

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

Сообщение Albert_V »

СКАЗОЧНИК писал(а):Не могу сказать, что мне хватило 15 минут, чтобы написать свою библиотечку...

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

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

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

Albert_V писал(а):Видимо и это уже сложно

Возможно, что это банальная лень... :dont_know: Или просто страх перед неизведанным. ) Но мне нравится наступать на свои грабли и быть первооткрывателем.
А если серьезно, то я думал, почему бы не взять библиотеку от Ди-Халта и не попробовать сделать лучше? Ну, получилось что получилось, результатом я очень доволен.
И куда бы я побрел без вашей лично и всеобщей помощи?! А теперь, когда пришло осознание, как это работает, хочется по мере возможности помочь и другим сделать тоже самое.
:beer:
Станислав
Реклама
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

СКАЗОЧНИК писал(а):...мне нравится наступать на свои грабли и быть первооткрывателем....
...хочется по мере возможности помочь и другим сделать тоже самое... :beer:

И это правильно.
Лично я никогда не пользуюсь чужими библиотеками. Создал сам - знаешь как это работает.
На мой взгляд, можно/нужно помогать тем, у кого есть желание что-то изучать. :beer:
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Изображение
Народ долгое время собирал информацию по данному дисплею. На фото изображен модуль на котором разводка сделана 4 битной.
Долго мучился с его инициализацией, и когда вроде бы в протеусе все заработало, на живой железки обнаружилась проблема с повторной инициализацией. После нажатия на кнопку сброса контролера на дисплее был мусор.
В итоге хочу предложить вам код для AVR STUDIO 6.(0-2) 100% рабочий для данного дисплея. Не боящийся повторной инициализации. Соответственно в режиме 4 бита, код совместим с модулем ARDUINO UNO R3 (ATMEGA328)

Не забываем подключить стандартные библиотеки

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

#include <avr/io.h>
#define F_CPU 16000000UL
#include <util/delay.h>

Готовим имена.

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

#define RS_ENABLE PORTB |= (1 << 0)      // Пин RS
#define RS_DISABLE PORTB  &=~ (1 << 0)   //
#define E_ENABLE PORTB |= (1 << 1)       // Пин E
#define E_DISABLE PORTB &=~ (1 << 1)     //
#define LCD_PORT PORTD



Функции для работы с дисплеем.

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

void LCD_INIT()
{
   RS_DISABLE;
   LCD_WRITE_NIBBLE(0b00110000); // 0_0_1_DL_N_F_0_0 (0010 N(0-1на строка, 1-2ве строки)000) 00101000
   LCD_WRITE_NIBBLE(0b00110000);
   LCD_WRITE_NIBBLE(0b00110000);
   LCD_WRITE_NIBBLE(0b00100000);
   LCD_WRITE_DATA(0b00000001);   // очистка дисплея
   LCD_WRITE_DATA(0b00101000);
   LCD_WRITE_DATA(0b00001000);   // полное выключение дисплея
   LCD_WRITE_DATA(0b00000100);   // сдвиг курсора отключен
   LCD_WRITE_DATA(0b00001100);   // включение дисплея
   RS_ENABLE;
}
// ЗАПИСЬ ПОЛУБАЙТА
void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
   PORTD |= TEMP_NIBBLE; // запись в порт
   _delay_ms(2);
   E_ENABLE;
   _delay_ms(4);
   E_DISABLE;
   _delay_ms(2);
   PORTD &= ~(TEMP_NIBBLE);
   _delay_ms(2);
}

// ФУНКЦИЯ ОТПРАВКИ СИМВОЛА
void LCD_WRITE_CHAR(unsigned char TEMP_WRITE_CHAR) {
   RS_ENABLE;
   LCD_WRITE_DATA(TEMP_WRITE_CHAR);
}

// ФУНКЦИЯ ОТПРАВКИ КОМАНДЫ
void LCD_WRITE_CMD(unsigned char TEMP_WRITE_CMD) {
   RS_DISABLE;
   LCD_WRITE_DATA(TEMP_WRITE_CMD);
   RS_ENABLE;
}
// ЗАПИСЬ В ПОРТ КОММАНДЫ ИЛИ ДАННЫХ (ОПРЕДЕЛЯЕТСЯ RS), используется в LCD_WRITE_CHAR и LCD_WRITE_CMD
void LCD_WRITE_DATA(unsigned char TEMP_WRITE_DATA) {
   LCD_WRITE_NIBBLE(TEMP_WRITE_DATA & 0xF0);    // старшый полубайт
   LCD_WRITE_NIBBLE(TEMP_WRITE_DATA << 4);    //младший полубайт
}

void LCD_OFF() {
   LCD_WRITE_CMD(0b00001000);
}
void LCD_ON() {
   LCD_WRITE_CMD(0b00001100);
}
// Установка курсора, КУРСОР НЕ СДВИГАЕТСЯ!!! так настроено при инициализации.  LINE = 0 - первая строка, 1 - вторая строка. 
void LCD_SET_CURSOR(unsigned char LINE, unsigned char POS) {
   POS |= 0b10000000;
   if (LINE == 0x01)
   {
      POS |= 0x40;
   }
   LCD_WRITE_CMD(POS);
}


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

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

#define BACKLIGHT_ENABLE PORTB |= (1 << 2)       // Пин подсветки
#define BACKLIGHT_DISABLE PORTB &=~ (1 << 2)     //

ну там вам решать вкл\выкл или замутить шим для регулировки яркости.
Последний раз редактировалось servmv Ср апр 22, 2015 21:23:46, всего редактировалось 2 раза.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
Albert_V
Друг Кота
Сообщения: 4119
Зарегистрирован: Чт сен 12, 2013 00:54:12
Откуда: ЗаМКАДье. Там, где ЦУП

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

Сообщение Albert_V »

servmv писал(а):Народ долгое время собирал информацию по данному дисплею.
Долго мучился с его инициализацией, и когда вроде бы в протеусе все заработало, на живой железки обнаружилась проблема с повторной инициализацией. После нажатия на кнопку сброса контролера на дисплее был мусор.
В итоге хочу предложить вам код для AVR STUDIO 6.(0-2) 100% рабочий для данного дисплея. Не боящийся повторной инициализации.

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

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

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

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

void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
   PORTD |= TEMP_NIBBLE; // запись в порт
   _delay_ms(2);
   E_ENABLE;
   _delay_ms(4);
   E_DISABLE;
   _delay_ms(2);
   PORTD &= ~(TEMP_NIBBLE);
   _delay_ms(2);
}
Не многоваты ли задержки между такими операциями ? :)
Это раз.
Во вторых, какой смысл от сеих строк :

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

   _delay_ms(2);
   PORTD &= ~(TEMP_NIBBLE);
   _delay_ms(2);
в конце функции ? :roll:
Далее :

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

void LCD_INIT()
{
   RS_DISABLE;
   LCD_WRITE_NIBBLE(0b00110000); // 0_0_1_DL_N_F_0_0 (0010 N(0-1на строка, 1-2ве строки)000) 00101000
   LCD_WRITE_NIBBLE(0b00110000);
   LCD_WRITE_NIBBLE(0b00110000);
   LCD_WRITE_NIBBLE(0b00100000);
   LCD_WRITE_DATA(0b00000001);   // очистка дисплея
   LCD_WRITE_DATA(0b00101000);
   LCD_WRITE_DATA(0b00001000);   // полное выключение дисплея
   LCD_WRITE_DATA(0b00000100);   // сдвиг курсора отключен
   LCD_WRITE_DATA(0b00001100);   // включение дисплея
   RS_ENABLE;
}
Некоторые операции, во время инициализации, требуют ожидания выполнения. Делается это либо задержками, либо чтением состояния из дисплея.
Но у Вас, по всей видимости, "всё работает" только из-за бешеных задержек в функции LCD_WRITE_NIBBLE.
Реклама
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Albert_V писал(а):Где там мучиться? Прочитать документацию на HD44780 и работать с ним "по-честному" было сложно?
У моих заказчиков несколько тысяч изделий с индикаторами на HD44780 работают в круглосуточном режиме более 5-ти лет без рекламаций.

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

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

Сообщение Albert_V »

servmv, вы все сообщения в этой теме читали?
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Аlex писал(а):
Не многоваты ли задержки между такими операциями ? :)
Во вторых, какой смысл от сеих строк
Некоторые операции, во время инициализации, требуют ожидания выполнения. Делается это либо задержками, либо чтением состояния из дисплея.
Но у Вас, по всей видимости, "всё работает" только из-за бешеных задержек в функции.

На первый и третий вопрос, ответ один, визуально задержек не видно, одновременно перезаписывается 3*4 = 12 символов на дисплее(4 быстро изменяемые числа по 3 символа) остальное статично.
На второй вопрос, обнуление порта, было написано в процессе отладки, возможно и лишнее. Ща проверю.
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Albert_V писал(а):servmv, вы все сообщения в этой теме читали?

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

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

Сообщение Albert_V »

servmv писал(а):Какой ты быстрый) Не дай бог тебе такое от женщин слышать.

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

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

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

визуально задержек не видно
Но это же не значит, что их можно везде и подряд вставлять :)
10 ms на пол-команды, 20 на команду. Вывести буфер из 16-ти символов - 320 миллисекунд. Круто, чё :))
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Так работает:

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

// ЗАПИСЬ ПОЛУБАЙТА
void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
   PORTD |= TEMP_NIBBLE; // запись в порт
   _delay_ms(1);
   E_ENABLE;
   _delay_ms(2);
   E_DISABLE;
   _delay_ms(1);
   PORTD &= ~(TEMP_NIBBLE);
   _delay_ms(1);
}

Так нет)

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

// ЗАПИСЬ ПОЛУБАЙТА
void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
   PORTD |= TEMP_NIBBLE; // запись в порт
   _delay_ms(1);
   E_ENABLE;
   _delay_ms(2);
   E_DISABLE;
   _delay_ms(1);
   //PORTD &= ~(TEMP_NIBBLE);
   //_delay_ms(1);
}

Так тоже нет)

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

// ЗАПИСЬ ПОЛУБАЙТА
void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
   PORTD |= TEMP_NIBBLE; // запись в порт
   _delay_ms(10);
   E_ENABLE;
   _delay_ms(20);
   E_DISABLE;
   _delay_ms(10);
   //PORTD &= ~(TEMP_NIBBLE);
   //_delay_ms(1);
}
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Аlex писал(а):
визуально задержек не видно
Но это же не значит, что их можно везде и подряд вставлять :)
10 ms на пол-команды, 20 на команду. Вывести буфер из 16-ти символов - 320 миллисекунд. Круто, чё :))

0.3 сек на вывод? че не так то? Ну ускорил ровно в 2 раза ) 160мс))
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

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

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

Сообщение Albert_V »

Диплом/курсовик "горит"? :)))
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

servmv писал(а):0.3 сек на вывод? че не так то?
Надеюсь, Вы шутите :)
А если серьёзно - убирайте их оттуда, "от греха подальше" :) Они там не нужны.

Диплом/курсовик "горит"? :)))
Не думаю. Просто, видимо, человеку захотелось поделиться наработками. И это есть хорошо.
Но и критику, в таком случае, нужно принимать какой она есть. И не игнорировать её, а обсуждать коструктивно, без всяких "а что такого ?" и т.д...
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Аlex писал(а):
servmv писал(а):0.3 сек на вывод? че не так то?
Надеюсь, Вы шутите :)
А если серьёзно - убирайте их оттуда, "от греха подальше" :) Они там не нужны.

Не работает без задержки.
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Albert_V писал(а):Диплом/курсовик "горит"? :)))


Мне уже поздно посещать учебные заведения) :tea:
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

servmv писал(а):Не работает без задержки.
Аlex писал(а):Но у Вас, по всей видимости, "всё работает" только из-за бешеных задержек в функции LCD_WRITE_NIBBLE.
:)
Ответить

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