Mazur (23.09.2013 10:05 - 10:46, просмотров: 2733)
Продолжение истории. -> Как только я изменил логику управления по рекомендации rezident-а, у меня перестало нормально работать на LCD. VFD хавает. У меня все руки не доходили нормально разобраться. Начну, брошу. Сегодня ночью решил снова http://caxapa.ru/402926.html
поковырять проблемку, почему перестало нормально запускаться. Уже не помню как додумался, была глубокая ночь. Было (работало нестабильно, показывало через раз):
void Init_LCD (void)
{
_delay_ms(100);
lcd_send_com_nibble(0x30); // Установка 8-разрядного интерфейса.
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x20); // Установка 4-разрядного интерфейса.
_delay_ms(5);
lcd_send_com_nibble(0x28); // 4-разрядный интерфейс. Двухстрочный режим.
_delay_us(100);
lcd_send_com(0x01); // Команда очистки дисплея.
_delay_ms(5);
lcd_send_com(0x06); // Инкремент счетчика адреса.
_delay_us(100);
lcd_send_com(0x0C); // Включение дисплея.
_delay_us(100);
}
Стало (работает четко, на 4 и 16 мгц):
_delay_ms(100);
lcd_send_com_nibble(0x30); // Установка 8-разрядного интерфейса.
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x30);
_delay_ms(5);
lcd_send_com_nibble(0x28); // 4-разрядный интерфейс. Двухстрочный режим.
_delay_us(100);
lcd_send_com(0x01); // Команда очистки дисплея.
_delay_ms(5);
lcd_send_com(0x06); // Инкремент счетчика адреса.
_delay_us(100);
lcd_send_com(0x0C); // Включение дисплея.
_delay_us(100);
}
Почему? В примерах вроде 0x20 включение 4-битного режима. Получается, что 0x20 нужно один раз вместе с какой-то еще командой запускать?