16+
Четверг
22 ноября
Вход |Карта сайта | |Upload |codebook | PARTS

 О смысле всего сущего 0xFF

 Средства и методы разработки

 Мобильная и беспроводная связь

 Блошиный рынок Объявления

caxapa

Микроконтроллеры ARM 

AVR PIC MSP PLD,FPGA,DSP 

Кибернетика Технологии 

Схемы, платы, компоненты 

Микроконтроллеры AVR

 
   Новая тема Правила Регистрация Поиск »» Архив
Вернуться в конференциюТопик полностью
mazur  (18.04.2013 00:12 - 18.04.2013 00:17, просмотров: 7285)
По символьным ЖКИ. Не могу пока придти к какому-нибудь выводу. История такая. Наткнулся на одну ссылку, там девайс с использованием ЖКИ. Выхватил одну идейку из этого проекта, достал пылившиеся символьные 20х4 символьные дисплеи ЖКИ и VFD. Про VFD 
я точно знал из предыдущих опытов, что этому дисплею вообще никакие задержки не нужны. Можно написать библиотечку специально для него, без задержек, можно скормить ему и код для ЖКИ. И с той и с другой времянками будет работать. В ходе опытов увидел, что при переходе с 16 мгц кварца на 4 мгц (STK-500) VFD перестал работать. Обратно на 16 мгц дисплей работает. Ну, думаю, доигрался с программой (делал в проекте код с дефайнами-ключами-переключалками VFD\LCD). Ладно, ставлю LCD. Быстренько правлю код, прошиваю, включаю. Та же байда. В ходе разбирательств выяснилось, что причина в задержке ногодрыгания МК. Если большие задержки, дисплеи перестают работать. Опыты с VFD показали, что ему вообще никакие задержки не нужны при частоте 16 мгц. вывел на шину данные, стробанул, и все без единого nop-а даже. Опыты с LCD показали, что ему нужны задержки при ногодрыгании аж в 20 мкс. Что ни хрена не соответствует даташитам. Пытаюсь понять, я что-то не так делаю или и правда расхождение времянок с даташитами?
Delay: // Задержка для стабилизации уровня сигналов на выводах МК. Примерно 20 мкс.
	push	r16
	ldi	r16, 100
Delay_Cycle:
	dec	r16
	brne	Delay_Cycle
	pop	r16
	ret

//========================================================================
Send_Com: // Отправка команды.
	cbi	RS_PORT, RS
	rjmp	Send_Byte

Send_Data: // Отправка данных.
	sbi	RS_PORT, RS
	rjmp	Send_Byte

Send_Com_Init: // Попрограмма отправки команды в секции инициализации.
	cbi	RS_PORT, RS

Send_Nibble:
	in	r16, Data_DDR
	ori	r16, 0xF0
	out	Data_DDR, r16

	in	r16, DATA_PORT
	andi	r16, 0x0F
	rjmp	Send_Nibble_1

Send_Byte:
	in	r16, Data_DDR
	ori	r16, 0xF0
	out	Data_DDR, r16

	in	r16, DATA_PORT
	andi	r16, 0x0F
	eor	r16, LCD_DATA
	andi	LCD_DATA, 0x0F
	eor	r16, LCD_DATA
	out	DATA_PORT, r16

#if (TYPE_DISPLAY==LCD)
	rcall	Delay
#else
	rcall	Empty_Action
#endif

	sbi	EN_PORT, EN

#if (TYPE_DISPLAY==LCD)
	rcall	Delay
#else
	rcall	Empty_Action
#endif

	cbi	EN_PORT, EN

	andi	r16, 0x0F
	swap	LCD_DATA
Send_Nibble_1:
	andi	LCD_DATA, 0xF0
	or	r16, LCD_DATA
	out	DATA_PORT, r16

#if (TYPE_DISPLAY==LCD)
	rcall	Delay
#else
	rcall	Empty_Action
#endif

	sbi	EN_PORT, EN

#if (TYPE_DISPLAY==LCD)
	rcall	Delay
#else
	rcall	Empty_Action
#endif

	cbi	EN_PORT, EN

Data_Port_In:
	in	r16, Data_DDR
	andi	r16, 0x0F
	out	Data_DDR, r16

	in	r16, Data_Port
	andi	r16, 0x0F
	out	Data_Port, r16
	ret
//========================================================================
Главная | Карта сайта | О проекте | Проекты | Файлообменник | Регистрация | Вебмастер | RSS
Лето 7527 от сотворения мира. При использовании материалов сайта ссылка на caxapу обязательна.
MMI © MMXVIII