Страница 78 из 123

Re: Библиотека LCD AVR Studio6.2

Добавлено: Вс июл 27, 2014 12:48:01
oleg110592
Проект делал в авр студии 4.19 + Atmel AVR 8-bit Toolchain 3.4.4
LCD_mega16.zip
(100.02 КБ) 198 скачиваний
там же и протеус файл

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 но физически она ведь разведена совсем по-другому, поэтому и вываливается мусор. Лучеш просто инициализируй дисплей при переключении режимов работы устройства, раз в минуту и т.п.
переинициализировать в процессе работы напряжно, у меня не предусмотрено памяти на сообщение на дисплее, сообщения формируются довольно развратным способом, дисплей рефрешится редко, в основном сообщения частично перетирают старые. исторически так сложилось =) хотя можно и переделать.
а нельзя ли вычитывать из дисплея его настройки? :idea:

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 букв в каждую строку и больше ничего.
Прошивку не менял на тестовой вот что :cry:

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 писал(а):Если считаете, что можно будет обойтись без всяких лог. операций - можете предложить тут свой вариант.
Хранить один символ в двух байтах :))) :facepalm:

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. а когда не знаем, мы должны гарантировать, что их состояние не изменится.