Страница 92 из 123
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 11:30:56
WiseLord
В общем, инициализация должна быть приблизительно такой:
Спойлер
Код: Выделить всё
void strob(void)
{
E1;
_delay_us (2);
E0;
_delay_us(2);
}
void Initialization (void) // Определяем функцию инициализации //
{
DDRLC = poryd; // подключенные к жки устанавливаем в 1- выходы, два не использующихся оставляем как входы
PORTLC = 0x00; // устанавливаем на выходах 0, где по условию RS and RW также должны быть = 0.
_delay_ms (20); // Wait time > 15 ms
RS0; // command mode
PORTLC = (0x30 & 0xF0);
strob();
_delay_ms (5); // Wait time > 4.1 ms
PORTLC = (0x30 & 0xF0);
strob();
_delay_us (120); // Wait time > 100 us
PORTLC = (0x30 & 0xF0);
strob();
PORTLC = (0x20 & 0xF0); // set 4-bit mode
strob();
command_lcd (0x20); // 0010 0000 rw=0, rs=0
command_lcd (0xc0); // 1100 0000 rw=0, rs=0
command_lcd (0x10); // 0001 0000 rw=0, rs=0 Display clear
command_lcd (0x60); // 0110 0000 rw=0, rs=0 Entry mode set
}
void command_lcd (unsigned char cmd)
{
_delay_us(50);
RS0; // command mode
PORTLC = (cmd & 0xF0); // Передаем старший полубайт *1111 0000
strob();
PORTLC = ((cmd & 0x0F) << 4); // Передаем младший полубайт * 0000 1111
strob();
}
void data_lcd (unsigned char data)
{
_delay_us(50);
RS1; // data mode
PORTLC = (data & 0xF0); // Передаем старший полубайт *1111 0000
strob();
PORTLC = ((data & 0x0F) << 4); // Передаем младший полубайт * 0000 1111
strob();
}
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 12:13:02
ТОХЫЧ
Код: Выделить всё
void command_lcd1(unsigned char cmd)// Передача только старший полубайт
{
PORTLC = (cmd & 0xF0); // Передаем старший полубайт *1111 0000
RS0; // Для передачи комманды
E1; // Подтверждение передачи данных
_delay_us (2); // Небольшая задержки для обработки команды контроллером ЖКИ
E0; // Окончание импульса строба
}
void Initialization (void) // Определяем функцию инициализации //
{
DDRLC = poryd; // подключенные к жки устанавливаем в 1- выходы, два не использующихся оставляем как входы
PORTLC = 0x00; // устанавливаем на выходах 0, где по условию RS and RW также должны быть = 0.
_delay_ms (20); // Wait time > 15 ms
command_lcd1 (0x30); // 0011 rw=0, rs=0
_delay_ms (5); // Wait time > 4.1 ms
command_lcd1 (0x30); // 0011 rw=0, rs=0
_delay_us (120); // Wait time > 100 us
command_lcd1 (0x30); // 0011 rw=0, rs=0
_delay_us (2);
command_lcd1 (0x20); // 0010 rw=0, rs=0 4бит интерфейс
command_lcd (0x2C); // 0010 1100 rw=0, rs=0 Function set
command_lcd (0x0С); // 0000 1000 rw=0, rs=0 Displey on
command_lcd (0x01); // 0000 0001 rw=0, rs=0 Display clear
command_lcd (0x06); // 0000 0110 rw=0, rs=0 Entry mode set
}
Вот поправил с учетом замечаний.
Добавил фунуцию command_lcd1 для передачи только старшего полубайта
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 12:21:56
СКАЗОЧНИК
Первые 4 команды даются одним стробом, а остальные уже по два.
последняя команда - включить дисплей (там с параметрами).
Ну и чтобы что-то появилось на дисплее, надо туда это отправить после инициализации...
Команда же очистки дисплея очень медленная, т.к. по факту просто поочередно очищает каждое знакоместо дисплея... Поэтому после нее задержка должна быть большая 1.5 мс.
Для строба можно сделать задержку в 500 нс.
И вообще задержки после каждой команды, т.к. вы не читаете флаг занятости.
Код: Выделить всё
rcall DELAY_13107 ; Первая задержка в районе
rcall DELAY_13107 ; более 20 мс (после включения питания)
;-----------------------------------------------------
ldi R18, 0b00110000 ; Команда установки 8 линий для инициализации (передаем ее три раза, поэтому и цикл)
ldi R19, 3 ; Задаем количество циклов (три команды)
rcall DB_LINE ; Вызываем подпрограмму, которая отправит команду (тетраду)
NEXT: rcall STROBE ; А это стробирующий импульс по Е шине (используется везеде)
rcall DELAY_13107 ; Вторая задержка
dec R19
brne NEXT
;-----------------------------------------------------
ldi R18, 0b00100000 ; Команда установки 4 линии для инициализации (четвертый раз уже для 4 битного режима)!!
rcall DB_LINE ; Вызываем подпрограмму, которая отправит команду (тетраду)
rcall STROBE
rcall DELAY_13107 ; задержка больше 5 мс
;---------------------------------------------------------------------------------------------
ldi R18, 0b00101000 ; Команда установки 4 линии и две строки (наконец-то прошла и вторая тетрада)
rcall CMD_WR ; Вызываем подпрограмму отправки команды
ldi R18, 0b00000001 ; Очистка дисплея
rcall CMD_WR ; Вызываем подпрограмму отправки команды
.if R_W == 0 ; Если мы не ВЫБРАЛИ при инициализации использование порта RW, то компилируем эту задержку
rcall DELAY_13107 ; Медленная команда, для нее длинная задержка
.endif
ldi R18, 0b00000110 ; Установка режима вывода данных (сдвиг курсора вправо)
rcall CMD_WR ; Вызываем подпрограмму отправки команды
ldi R18, 0b00001100 ; Включаем дисплей (курсор погашен)
rcall CMD_WR ; Вызываем подпрограмму отправки команды
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 13:26:40
WiseLord
ТОХЫЧ писал(а):Вот поправил с учетом замечаний
Заработало хотя бы?
Плюс всё равно не вижу задержки в начале command_lcd, плюс зачем-то присутствует команда на выключение дисплея (0x08), а не на включение (0x0C).
P.S. Исправил опечатку 0x80 -> 0x08, 0xC0 -> 0x0C
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 13:48:19
ТОХЫЧ
Заработало хотя бы?
Пока на работе возможности проверить нет.
Код: Выделить всё
Плюс зачем-то присутствует команда на выключение дисплея (0x80), а не на включение (0xC0).
Команда на выключение это 00001000 по калькулятору это (0x08) почему Вы пишете 10000000 (0x80)
На включение это 00001100 (0x0C) a у Вас 1100000 (0xC0)
Можете пояснить сей факт? Что то не понимаю.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 16:01:05
WiseLord
Да, верно. Включать дисплей надо командой 0x0C (я опечатался и написал 0xC0), чего Вы при инициализации не делали (посылали 0x08, сейчас вроде исправлено).
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 16:32:01
ARV
Имхо, любовь изобретать лисапет наносит травмы... почему бы не взять готовую библиотечку для работы с ЖКИ?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн мар 30, 2015 21:46:22
ТОХЫЧ
Не работает

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт мар 31, 2015 16:54:23
СКАЗОЧНИК
Действительно, возьмите готовую библиотеку. ))) АРВ правильно говорит.
Проверьте на готовой исправность своего дисплея, а потом можно и свою мудрить.

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт мар 31, 2015 18:35:20
ТОХЫЧ
а потом можно и свою мудрить.
Так поэтому и мудрю что уже кучу готовых перепробовал.
возьмите готовую библиотеку.
Так я ж только за.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт мар 31, 2015 19:13:15
СКАЗОЧНИК
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт мар 31, 2015 19:32:37
WiseLord
А может, человеку не нужна библиотека на ассемблере, а нужна на C?
Можете мою
отсюда глянуть. Поддерживаются 4-бит и 8-бит режимы (нужные файлы
ks0066.h и
ks0066.c), а также работа через
I²C-переходник на базе PCF8574 (нужны файлы
i2c.h и
i2c.c)
Библиотека написана под avr-gcc. Нужный режим выбирается одним из макросов
KS0066_WIRE_8BIT,
KS0066_WIRE_4BIT или
KS0066_WIRE_PCF8574 в
ks0066.h. Пины дисплея можно подключать к абсолютно любым ножкам МК, конфигурация ножек понятным образом описывается в файле
pins.h.
Если используется не ардуино, а простой МК, то описывать конфигурацию просто в виде
Код: Выделить всё
#define KS0066_D7 B
#define KS0066_D7_LINE (1<<7)
#define KS0066_D7 C
#define KS0066_D7_LINE (1<<0)
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн апр 20, 2015 12:56:17
rufooth
Не хотел создавать новую тему, решил написать сюда. Может быть кому то поможет.
Довольно долго бился над проблемой помех в дисплее:
"ЖКИ символьный WH1602D-YYK-CTK (Winstar)".
Когда дисплей ловил помеху на экране вместо нормальной информации отображалось множества случайных символов.
Много гуглил. Допаивание конденсаторов, резисторов, экранирование дало некий эффект, но полностью проблему не решило.
В результате решил данную проблему переинициализацией, но! Если делать при каждом цикле инициализацию (как обычно при включении) будет моргать вторая строка.
После ряда тестов получилось сделать функцию частичной переинициализации которая убирает сбой, но не вызывает моргания дисплея при нормальной работе.
Код переинициализации:
Код: Выделить всё
void reInitLCD(void) // функция переинциализации дисплея
{
SendLCDc(0b00101000); // Настройка функций
SendLCDc(0b00001100); // Включить дисплей
__delay_ms(2);
SendLCDc(0b00000110); // Установка режима
__delay_ms(2);
SendLCDc(0b10000000); // DDRAM addresss 0000
SendLCDc(0b00000010); // return home
__delay_ms(2);
}//
В принципе можно еще убрать часть, у себя я пока так оставил.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн апр 20, 2015 13:38:29
СКАЗОЧНИК
Это из цикла "поделюсь опытом" или вопрос будет?

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Пн апр 20, 2015 14:30:16
Gudd-Head
Странно. Не припомню чтобы кто-нибудь жаловался что дисплей ловил помеху на экране вместо нормальной информации отображалось множества случайных символов.

Может, у вас провода километровые?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт апр 21, 2015 08:35:25
amd9800
Кто нибудь попробовал управлять LCD дисплеем через регистры 595 ?
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Вт апр 21, 2015 08:40:32
Gudd-Head
А что в этом такого?

Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Ср апр 22, 2015 18:04:59
amd9800
Ничего особенного. Просто может есть уже наработки, библиотеки.
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Ср апр 22, 2015 18:13:01
Albert_V
А самому написать программу сложно? За 15-ть минут с тремя перекурами можно написать программу.
Если что то не получается - спрашивайте. Не забудьте выложить схему, исходник и объяснить в чём проблема.
Если вам нужно только "готовое" - тогда обращайтесь в ветку "Предлагаю работу".
Re: Работа с ЖКИ на контроллере HD44780 и его аналогах
Добавлено: Ср апр 22, 2015 18:59:13
СКАЗОЧНИК
Не могу сказать, что мне хватило 15 минут, чтобы написать свою библиотечку...

И вроде, не считаю себя сильно тупым. ))) Но, однако, как это увлекательно! Оно того стоит.
