Hallo,
vorweg: C ist überhaupt nicht mein Ding, Assembler ja...
Trotzdem schau ich oft in solche C-Fragen rein, kann ja sein, ich nutze
doch mal C... ;)
void toggle_E()
{
PORTB=(1<<5);lcd_delay(500); // E=1
PORTB=(0<<5);lcd_delay(500); // E=0
}
Wenn ich C wenigstens richtig lesen kann, setzt die erste Zeile
PORTB auf 0b00100000
Die zweite Zeile schiebt sinnlos eine 0 durch die Gegend (schon oft
genug diskutiert), setzt also letztlich
PORTB auf 0b00000000
void lcd_init()
{
DDRB=0xFF; Port B alles auf Ausgang
lcd_delay(1000); und warten (worauf eigentlich?)
PORTB=(0<<4); PORTB auf 0b00000000 (????)
lcd_delay(500); warten (worauf?)
PORTB=0b00000011;toggle_E(); PORTB auf 0b00000011, dann PORTB auf
0b00100000, nur nutzen jetzt obiges setzen auf 0b00000011 nichts mehr...
PORTB=0b00000000;toggle_E();
toggle_E();
toggle_E();
PORTB=0b00000010;toggle_E();
PORTB=0b00000000;toggle_E();
lcd_cls();
}
Da Du ja auch nicht verraten hast, was am Port B wo dranhängt...
So zumindest wird das meiner Meinung nach nichts.
Versuche zu verstehen, was der ASM-Code mit dem Display eigentlich
macht, Datenblatt des HD44780 liegt im Netz.
Gruß aus Berlin
Michael