Forum: Mikrocontroller und Digitale Elektronik Seltsames Verhalten eines KS0070B LCD


von Henrik R. (searinox)


Angehängte Dateien:

Lesenswert?

Hallo!
Ich habe einen Atmega8 und an diesen ein Displaytech 162 Display (16x2
Zeilen) angeschlossen (laut Datenblatt besitzt dieses einen
KS0070B-kompatiblen Controller).
Das ganze hängt an einem 9V-Netzgerät und kann mittels der parallelen
Schnittstelle programmiert werden.
Ich habe mich beim Programmieren an das Datenblatt von Samsung für den
Controller gehalten, jedoch verhält sich das Display seltsam.

Ich kann die zweite Zeile nur dann ansteuern, wenn der Schaltkreis
einerseits am Netzgerät hängt, ich den parallelen Stecker einstecke und
diesen dann wieder herausziehe.
Sonst wird nur die erste Zeile verwendet.

Den Code (für avr-gcc) habe ich angehängt.
Ich bin sonst ratlos.

Danke für Hilfe!

von Benedikt (Gast)


Lesenswert?

paralleler Stecker ?
Welcher denn ?

von Henrik R. (searinox)


Lesenswert?

SUB-D 25
Es handelt sich um das MyAVR-Board, der Schaltplan befindet sich hier:
http://www.myavr.net/download/bauanleitung_myavr-board_14.pdf

von Alex (Gast)


Lesenswert?

Hallo Benedikt,

es kann durchaus sein das das normal ist, manche display können nach
dem powerON zyklus nur einmal initialisiert werden umd es dann neu zu
initialisieren muss die spannung vom display und das ganze einen neuen
reset bekommen... das könnte ne ursache sein... zum anderen könnte es
sein das die initialisierungssequenz des displays zu unzuverlässig...
wenn du mit warteschleifen arbeitest fürs timing dann verlängere mal
die wartezeit nach PowerON des displays

gruß alex

von Henrik R. (searinox)


Lesenswert?

Hallo, Alex
Ich habe die Wartezeit auf 100ms erhöht (Datenblatt fordert 30ms),
jedoch hat das nichts geholfen.

von sebastian arnd (Gast)


Lesenswert?

hallo,
schiebe doch mal dein proramm mit lcd_init IN die schleife bei mir hat
es so geklappt.

von Alex (Gast)


Lesenswert?

habe gerade im forum von myavr beispielcode gesehen... hast du den mal
verglichen?

von Andi K. (Gast)


Lesenswert?

Du sendest für den 4 Bit-Mode nur 1 mal das Bit 5 (1 da Nibble).
Versuche mal das in einem Byte mit 0x22 (0b00100010) 2 mal auszugeben.
Z. B. mit
 #define LCD_4BIT  (0x22)

MfG
Andi

von Henrik R. (searinox)


Lesenswert?

Hallo,
Mit dem Beispielcode habe ichs schon verglichen. Wenn ich mich nicht
vollkommen täusche, macht es mein Code genauso. (Vergleichscode aus dem
Forum: http://www.thomas-postler.de/Download/AVR/lcd.inc)

Das 4-Bit-Modus-Bit zweimal zu senden hat leider auch nicht
gefruchtet.

Danke trotzdem für die Hilfe,
Henrik

von Andi K. (Gast)


Lesenswert?

Seltsam ;-)
Hatte Anfangs die Init-Routine hier aus dem TUT verwendet.
Da diese mir zu unverständlich war, bin ich nach dem Datenblatt des
KS0066U gegangen was nicht auf Anhieb funktioniert hatte (ähnlich wie
bei Dir, ging nicht nach dem Flashen, erst nach aus-/einschalten).
Bin am Ende darauf gekommen, den 4 Bit Mode über lcd_command in 2
Nibbles 2 mal zu senden.
Hier ein Auszug der funktionierenden Init:
 ldi a,0b100010    ;4-Bit Mode (2 mal)
 rcall lcd_command
 ldi a,0b101000    ;4-Bit Mode, 2-line mode und Font 5x8
 rcall lcd_command_W50uS

MfG
Andi

von Henrik R. (searinox)


Lesenswert?

Hallo, Andi!
Dein Tipp hat mich auf die richtige Spur gebracht!
Den Code zwei mal zu senden hat zwar nicht geklappt,
aber mit
1
lcd_command(0x22);
2
lcd_command(0x22);
3
4
lcd_command(LCD_FUNSET | LCD_FUNSET_2LINES);

klappts nun endlich :D

von Andi K. (Gast)


Lesenswert?

In meinem Beispiel wird der 4 Bit Mode eigentlich 3 mal gesendet, 2 mal
im ersten lcd_command und das dritte mal zusammengefasst mit dem 2 Line
Mode und Font 5x8.

Geht es bei Dir auch so?:
 lcd_command(0x22);
 lcd_command(LCD_FUNSET | 0x20 | LCD_FUNSET_2LINES);

Das 0x20 ist quasi der dritte 2 Line Mode.

MfG
Andi

von Henrik R. (searinox)


Lesenswert?

Nein, damit gehts nicht.
Nur mittels dem viermaligen Senden über
1
lcd_command(0x22);
2
lcd_command(0x22);

gehts.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.