Hallo,
ich hab jetzt das enable in eine extra Routine verpackt und das Busy wegelassen, dafür mehr delays.
Code:
void init_lcd(void)
{
 _delay_ms(20);
 
 LCD_RS_PORT &= ~(1<<LCD_RS_PIN);  /* Steuerregister wird angesprochen */
 write_data(0x3);                  /* 1.0x3 */
 lcd_enable;
 
 _delay_ms(8);
 write_data(0x3);                    /* 2.0x3 */
 lcd_enable;
 
 _delay_ms(1);
 write_data(0x3);                      /* 3.0x3 */
 lcd_enable;
 _delay_ms(5);
                                     /*System-Set 4bit...*/
 write_data(0x2);    
 lcd_enable;
 _delay_ms(5);
 write_data(0x8);                  /* <-- Hier */
 lcd_enable;
 _delay_ms(5);
 
 write_data(0x0);     /*Display on/off, Display on, Unterstrich Cursor on, blinkender Cursor on*/
 lcd_enable;
 _delay_ms(5);
 write_data(0xF);
 lcd_enable;
 _delay_ms(5);
 
 write_data(0x0);   /* Cursor Home */
 lcd_enable;
 _delay_ms(5);
 write_data(0x2);
 lcd_enable;
 _delay_ms(5);
  
}
Eigentlich müsste laut dem geposteten DB der Cursor blinken, und zwar an der Home-Position.
Mache ich vielleicht mit der Übertragung von oberem und unterem Nibble was falsch?

An der Stelle wo im Code "Hier" steht übertrage ich z.B., nachdem 4-Bit eingestellt wird, das untere Nibble von SystemSet.
Wenn man einmal vergisst, zB. ein unteres Nibble zu übertragen, ist dann ab dem Zeitpunkt alles so verschoben, dass das nächste obere Nibble als das vergessene untere Nibble gezählt wird?

Gruß
Martin