Страница 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
ТОХЫЧ
Не работает :cry:

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
СКАЗОЧНИК
Это из цикла "поделюсь опытом" или вопрос будет? :dont_know:

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

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

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

Добавлено: Вт апр 21, 2015 08:35:25
amd9800
Кто нибудь попробовал управлять LCD дисплеем через регистры 595 ?

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

Добавлено: Вт апр 21, 2015 08:40:32
Gudd-Head
А что в этом такого? :dont_know:

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 минут, чтобы написать свою библиотечку... :dont_know: И вроде, не считаю себя сильно тупым. ))) Но, однако, как это увлекательно! Оно того стоит. 8)