C
Christoph Dittmann
Guest
Hallo,
ich habe mir vor ein paar Tagen ein LCD gekauft, das "WINTEK
WD-C2704M-1HNN" von Pollin (4*27 Zeichen, 2 HD44780-kompatible Controller).
Das würde ich gerne mit einem ATMega 8L ansteuern.
Mit einer auf dem Steckboard aufgebauten Schaltung konnte ich das LCD
einwandfrei im 4-Bit-Modus ansteuern, auch das Busy-Flag des LCDs wurde
korrekt abgefragt.
Dann habe ich mir eine Lochraster-Platine gelötet, mit dem ATMega8 in
der Mitte, und dessen PORTD mit allen 8 Pins an einen Stecker gelegt.
PORTD liegt darüber über eine kleine Adapterplatine am LCD.
Der Adapter macht nichts anderes als D0-D3 des LCDs auf GND zu legen
(4-Bit-Modus) und eine Kontrastspannung zu erzeugen.
Naja, und da fingen die Probleme an. Meine LCD-Routinen, die auf dem
Steckboard tadellos funktionierten, hängten sich beim Warten auf das
Busy-Flag auf (BF wollte manchmal nicht auf Low gehen).
Ich habe den Busy-Flag-Test dann wieder durch eine genügend lange
Warteschleife (>10ms) ersetzt. Dann funktionierte es gelegentlich, das
LCD zu initialisieren und Zeichen anzuzeigen. Allerdings wurden
teilweise Zeichen verschluckt, ausgetauscht oder die Cursor-Position
verschob sich unerwartet. Häufig aber wurde der zweite Controller (der
für die unteren beiden Zeilen) gar nicht zu Ende initialisiert. Wenn ich
die Initialisierungsreihenfolge im Code umdrehe, sodass ich zuerst den
unteren Controller aktiviere, wird der obere manchmal nicht vollständig
initialisiert.
Ich habe jede Daten- und Steuer-Leitung mehrmals durchgemessen (vom Pin
des uC bis zum Lötpad am LCD), alle Leitungen sind korrekt verbunden,
keine einzige Querverbindung, kein Wackelkontakt. D0-3 des LCDs liegen
auch auf GND, das LCD bekommt dieselben 5V vom 7805 wie der ATMega.
Die Steuerleitungen sind RS, R/W, E1 und E2 (E vom ersten bzw. zweiten
Controller). Die Datenleitungen (D4-D7) liegen auf PORTD4-7.
Die Software ist genau dieselbe wie auf dem Steckboard (mit AVR-Studio
in Assembler geschrieben, inzwischen habe ich sie aber auch schon nach C
portiert).
Ich vermute fast, dass es am Kabel liegt, weil ich es mir anders nicht
erklären kann. Könnte die Länge entscheidend sein?
===========================***** (8-polig, 20cm) ATMega8 (PORTD)
LCD ===========================*****====================**********
(15-polig Flachbandkabel, Adapter (Lochraster,
1m) D0-3 -> GND,
VCC, GND, Kontrast)
Oder woran könnte es sonst noch liegen, dass das LCD nur noch sporadisch
funktioniert, seit ich den AVR auf Lochraster habe?
mfg,
Christoph
ich habe mir vor ein paar Tagen ein LCD gekauft, das "WINTEK
WD-C2704M-1HNN" von Pollin (4*27 Zeichen, 2 HD44780-kompatible Controller).
Das würde ich gerne mit einem ATMega 8L ansteuern.
Mit einer auf dem Steckboard aufgebauten Schaltung konnte ich das LCD
einwandfrei im 4-Bit-Modus ansteuern, auch das Busy-Flag des LCDs wurde
korrekt abgefragt.
Dann habe ich mir eine Lochraster-Platine gelötet, mit dem ATMega8 in
der Mitte, und dessen PORTD mit allen 8 Pins an einen Stecker gelegt.
PORTD liegt darüber über eine kleine Adapterplatine am LCD.
Der Adapter macht nichts anderes als D0-D3 des LCDs auf GND zu legen
(4-Bit-Modus) und eine Kontrastspannung zu erzeugen.
Naja, und da fingen die Probleme an. Meine LCD-Routinen, die auf dem
Steckboard tadellos funktionierten, hängten sich beim Warten auf das
Busy-Flag auf (BF wollte manchmal nicht auf Low gehen).
Ich habe den Busy-Flag-Test dann wieder durch eine genügend lange
Warteschleife (>10ms) ersetzt. Dann funktionierte es gelegentlich, das
LCD zu initialisieren und Zeichen anzuzeigen. Allerdings wurden
teilweise Zeichen verschluckt, ausgetauscht oder die Cursor-Position
verschob sich unerwartet. Häufig aber wurde der zweite Controller (der
für die unteren beiden Zeilen) gar nicht zu Ende initialisiert. Wenn ich
die Initialisierungsreihenfolge im Code umdrehe, sodass ich zuerst den
unteren Controller aktiviere, wird der obere manchmal nicht vollständig
initialisiert.
Ich habe jede Daten- und Steuer-Leitung mehrmals durchgemessen (vom Pin
des uC bis zum Lötpad am LCD), alle Leitungen sind korrekt verbunden,
keine einzige Querverbindung, kein Wackelkontakt. D0-3 des LCDs liegen
auch auf GND, das LCD bekommt dieselben 5V vom 7805 wie der ATMega.
Die Steuerleitungen sind RS, R/W, E1 und E2 (E vom ersten bzw. zweiten
Controller). Die Datenleitungen (D4-D7) liegen auf PORTD4-7.
Die Software ist genau dieselbe wie auf dem Steckboard (mit AVR-Studio
in Assembler geschrieben, inzwischen habe ich sie aber auch schon nach C
portiert).
Ich vermute fast, dass es am Kabel liegt, weil ich es mir anders nicht
erklären kann. Könnte die Länge entscheidend sein?
===========================***** (8-polig, 20cm) ATMega8 (PORTD)
LCD ===========================*****====================**********
(15-polig Flachbandkabel, Adapter (Lochraster,
1m) D0-3 -> GND,
VCC, GND, Kontrast)
Oder woran könnte es sonst noch liegen, dass das LCD nur noch sporadisch
funktioniert, seit ich den AVR auf Lochraster habe?
mfg,
Christoph