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

Дисплеи, датчики и прочие функциональные узлы, управляемые МК.
Аватара пользователя
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 &= 0b00001111;
}
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

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

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

Сообщение servmv »


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

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

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

Изображение
Вложения
2015-04-22 23-39-00 Скриншот экрана.png
(33.63 КБ) 645 скачиваний
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

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


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

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

Сообщение Albert_V »

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

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

Сообщение servmv »

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

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

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

servmv писал(а):Они только там и есть) я вас не понимаю
Аlex писал(а):

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

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 »

ссылка на страницу ютуба

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

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

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

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

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

Сообщение servmv »

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

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

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

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

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

Сообщение servmv »

Ну вот как то так:

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

void LCD_INIT()
{
   _delay_ms(16);
   RS_DISABLE;
   LCD_WRITE_NIBBLE(0b00110000); // 0_0_1_DL_N_F_0_0 (0010 N(0-1на строка, 1-2ве строки)000) 00101000
   _delay_ms(5);
   LCD_WRITE_NIBBLE(0b00110000);
   _delay_us(110);
   LCD_WRITE_NIBBLE(0b00110000);
   _delay_us(40);
   LCD_WRITE_NIBBLE(0b00100000);
   _delay_us(40);
   LCD_WRITE_DATA(0b00000001);   // очистка дисплея / 2мс
   _delay_ms(2);
   LCD_WRITE_DATA(0b00101000);
   _delay_us(40);
   LCD_WRITE_DATA(0b00001000);   // полное выключение дисплея
   _delay_us(40);
   LCD_WRITE_DATA(0b00000100);   // сдвиг курсора отключен
   _delay_us(40);
   LCD_WRITE_DATA(0b00001100);   // включение дисплея
   RS_ENABLE;
}


вот здесь экспериментально получил

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

// ЗАПИСЬ ПОЛУБАЙТА
void LCD_WRITE_NIBBLE(unsigned char TEMP_NIBBLE) {
   PORTD |= TEMP_NIBBLE; // запись в порт
   _delay_us(300);
   E_ENABLE;
   _delay_us(500);
   E_DISABLE;
   _delay_us(300);
   PORTD &= 0b00001111;
}
чет быстрее уже с мусором. Но отклик стал быстрее.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

Ну вот, хотябы как то так. Ужа не 10 ms :)
Кстати, между E=1 и E=0 (строб записи) должно быть достаточно 1 us.
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Если я Вас верно понял:

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

E_ENABLE;
_delay_us(1);
E_DISABLE;

прошел экспериментально 1,10,100,200,300,400, на 500 мусор пропал. )
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

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

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

Сообщение servmv »

В общем финал будет такой:
Изображение
Не забываем подключить стандартные библиотеки

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

#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)     //
//P.S. На данном модуле есть управление подсветкой что для меня было сюрпризом) т.к. на схеме этого не было, установлен транзистор на катоде подсветки. можно управлять так:
#define BACKLIGHT_ENABLE PORTB |= (1 << 2)       // Пин подсветки
#define BACKLIGHT_DISABLE PORTB &=~ (1 << 2)     //ну там вам решать вкл\выкл или замутить шим для регулировки яркости.
#define LCD_PORT PORTD



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

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

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

// ФУНКЦИЯ ОТПРАВКИ СИМВОЛА
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);
}
Аватара пользователя
servmv
Встал на лапы
Сообщения: 136
Зарегистрирован: Чт янв 02, 2014 21:28:22
Контактная информация:

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

Сообщение servmv »

Аlex писал(а):Странно...
А можно марку дисплея ? Или лучше ссылочку на ДШ.

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

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

Сообщение servmv »

Аватара пользователя
abc
Друг Кота
Сообщения: 3678
Зарегистрирован: Чт мар 20, 2008 01:06:40
Откуда: Севастополь

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

Сообщение abc »

Вы не обижайтесь, но первое, что я увидел, пройдя по вашей ссылке, было вот это :

Изображение

Охренеть, подумал было, это где же это самое "брал тут" ?
Потом уже нашел сам лот.

Это обычный индикатор. Строб у него вполне может быть именно 1мкс.
Учитывая это, ваш код работает, но рекомендовать его никому нельзя.
>(*.*)<
Котище огромно, ушасто, пушисто, глазасто, зубасто, колючелапо и мявай. (c)
Ответить

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