Achso, ich dachte, µC und LCD werden gleichzeitig eingeschaltet... Dann sollte man den µC erst etwas warten lassen vor dem lcd_init().
ich hab mal in meine Sende-Routine geschaut. Ein Byte bzw. Nibble seinden:
E=0
DDR_DATA=OUT
RW=0
RS=rs
PORT_DATA=data
E=1
WAIT
E=0
DDR_DATA=OUT
Das DDR umschalten brauchst du wohl nicht (bei mir gehen noch andere Sachen auf dem Bus ab). Das WAIT ist ein _delay_loop_1(100).
Die Ansteuerung ist für ein VFD, sollte aber für ein LCD genauso gehen.
Fast in jeder Anwendung wird man eine Zeitbasis brauchen, die Ticks in einem bestimmten Zeitraster macht. Damit ist ein wait() dann recht einfach zu realisieren. Oder man nimmt einen freien Timer und zieht den auf und wartet, bis er abgelaufen ist. Das leidige Taktezählen fänd ich viel zu nervig und ungenau ist's nebenbei auch, insbesonders bei hoher IRQ-Last, denn die IRQ-Zyklen werden ja nicht mitgezählt in den Zählschleifen.
Ja da fehlte ne )
Lesezeichen