Witam. Chce zainicjować wyświetlacz 4x20 podłączony do atmega16. Zapis do LCD jest 8 bitowy i dane są na porcie D a port C steruje wyświetlaczem. Nie wiem już gdzie szukać błędu bo dalej mam objawy, że wyświetla mi się 1 i 3 linia. Oto kod programu. Za pomoc byłbym bardzo wdzięczny.
inventco.eu - post edytowałem - znaczniki CODE, zmieniłem tytuł regulamin p.11.1
#define LCD_MODE 0x07
#define LCD_8BIT_2LINE 00111000
#define LCD_CLR_SCR 00000001
#define LCD_DISP_OFF 00001000
#define LCD_DISP_ON 00001110
void lcd_write8(char data)
{
LCD_E_PORT |=_BV(LCD_E_PIN) ; // ustaw na E stan wysoki
LCD_PORT = data; //zapis i bajtu do lcd
LCD_E_PORT &= ~_BV(LCD_E_PIN); // opadające zbocze na E -> zapis do wyświetlacza
_delay_ms(1);
}
void lcd_putc(const uint8_t chr)
{
LCD_RW_PORT &=~_BV(LCD_RW_PIN);
LCD_RS_PORT |= _BV(LCD_RS_PIN);
lcd_write8(chr);
}
void lcd_command(const uint8_t com)
{
LCD_RW_PORT &=~_BV(LCD_RW_PIN) ;
LCD_RS_PORT &= ~_BV(LCD_RS_PIN);
lcd_write8(com);
}
void lcd_init(void)
{
uint8_t i;
_delay_ms(35);
LCD_RS_PORT &= ~_BV(LCD_RS_PIN);
i=3;
do
{
lcd_write8(LCD_8BIT_2LINE);
_delay_ms(10);
}
while (--i);
lcd_write8(LCD_8BIT_2LINE);
_delay_ms(1);
lcd_command(LCD_DISP_OFF);
_delay_ms(1);
lcd_command(LCD_CLR_SCR);
_delay_ms(5);
lcd_command(LCD_MODE);
lcd_command(LCD_DISP_ON);
}inventco.eu - post edytowałem - znaczniki CODE, zmieniłem tytuł regulamin p.11.1