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