Liste der Anhänge anzeigen (Anzahl: 1)
Nach meinem HD47780 Datasheet ist das die richtige Sequenz für den 8 Bit mode ...
Anhang 29048
Ich hab dein LCD_initialisieren mal angesehen. Ist sicher RS und RW auf 0 bevor du Enable togglest? Schreib hier mal sicherheitshalber 0 raus auf LCD_STRG_PORT...
Passen auch die DDRs für die beiden Ports?
Ansonsten ist mir nichts aufgefallen ...
- - - Aktualisiert - - -
Ahh .. du wartest nur 4.01ms und nicht 4.1 ms ... zwar wenig unterschied ... aber ... naja ... könnte sein. Mach mal 5 oder 10 draus.
Liste der Anhänge anzeigen (Anzahl: 1)
Hast du mal zwischen den Schritten richtig lange Zeiten rein gemacht? So ne Sekunde? Häng mal an die Ports noch ne Batterie von 11 LEDs dran. Insbesonders an die 3 Ctrl Pins (E/RS/RW) . Ich habs auch an den Datenpins gehabt. Mit den langen Zeiten konnte ich dann sehen ob das so auf der Hardware so passiert wie ich mir das vorstelle. Evtl ist dein Strobe auch zu kurz mit nur 3 Taktzyklen für diesen Kontroller.
Ich hab dann noch einen Pin genommen (mit Treiber Transistor) um das Display an und aus zu schalten. So stelle ich sicher dass das Display immer im Start Zustand ist, wenn ich meine Sequenz starte.
Edit: So hab ich meins ageschlossen.
Anhang 29049
- - - Aktualisiert - - -
Ach ja: Ich warte dann nach "Power On" für das Display noch 1s bis sicher die Spannung aufgebaut ist. Nicht nur ein paar ms wie im Datasheet beschrieben.
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo White_Fox
zwei Sachen sind mir in deinem letzten Code aufgefallen:
1. Es wird Entry Mode 0b00000111 verwendet, also Display Shift Left, damit wird das Display nach dem Schreiben nach links verschoben -> und die Zeichen verschwinden wenn du links geschrieben hast. Hast du andere Entry Mode ausprobiert, versuch's mal mit diesem abgespeckten Code mit Entry Mode 0b00000110.
2. sehe ich das richtig, dass du jetzt beim Initialisieren den Function Set 0b00100100 sendest? 3x 0b00110000 wäre glaub ich richtig. Mit der Sekunde Wartezeit hast du vielleicht übertrieben? Ist zwar gut, um die Abfolge zu kontrollieren, aber in der Reality reichen 5ms. Hier ein Bild zu der 8-Bit Initialisierung eines anderen 1602 LCD.
Anhang 29052
Gruß
witkatz
Liste der Anhänge anzeigen (Anzahl: 1)
@White_Fox: Ich fand noch eine Beschreibung deines TC1602E-1 im Netz: TC1602E-01.pdf vielleicht nützt es was. Auch hier findet man den gleichen Init-Flowchart wieder, den ich schon mal gepostet hab. Ich bin der Meinung (ohne jegliche AVR-Erfahrung), dass dein Code an der markierten Stelle immer noch nicht exakt umgesetzt ist:
Anhang 29057
Hier steht es bei dir:
Zitat:
Zitat von
White_Fox
...
;Display on/off Controll
ldi R16, 0b00001111
out PORTC, R16
out PORTB, R16
sbi PORTA, 7
rcall Warte_1s
cbi PORTA, 7
rcall Warte_1s
...[/Code]
Du hast doch schon den Aufwand getrieben, die Ausgänge auf Debug-LEDs zu legen. Da müsste es doch möglich sein, eine relativ gut dokumentierte Initiaisierungs-Sequenz richtig durchzutakten, oder?
Liste der Anhänge anzeigen (Anzahl: 1)
@HeST: Na das war schon eine schwere Geburt. Muss man schon sagen. Du kannst aber immer davon ausgehen, wenn du dich ans Datenblatt hältst, kommst du ans Ziel.
Apropos: Ich mach auch gerade meine Heizungssteuerung mit einem Atmega168 (falls der Flash nicht reicht, eben 328 ) ;) und einem Display mit KS0073 über einen PCF8574 und I2C. War jetzt nicht so schwer wie es sich hier in dem Thread darstellt ... ;)
Anhang 29059
Wie man sieht bin ich noch in der Testphase ;)