LCD C0802-04, HD47780 ansteuern..

#1691526
Lesenswert?

Hallo Forum,

ich versuche grade das C0802-04 Display von pollin anzusteuern. Es soll 
einen HD47780 kompatiblen Controller haben, aber es gibt leider kein 
richtiges Datenblatt zum Display.
Ich habe es einfach mal mit der lcd-lib von Peter Fleury versucht und 
dort die Ports und den Takt angepasst. Ich kann senden was ich will, 
leider bekomme ich immer nur 8 schwarze Felder in der ersten Zeile 
angezeigt..Quasi genau das gleiche als wenn ich es nur VCC und GND 
angeschlossen hätte..

Ich weiß das die lcd-lib für den HD4478 controller ist, aber müssten da 
nicht zumindest irgendwelche Reaktionen auf dem Display erscheinen?!?

Wie kann man das Teil ansteuern?! :S

Lieben Gruß
Lutz
#1691740
Lesenswert?

Hallo Lutz,

Ich denke, du wirst nicht drumherumkommen auf irgendeine Weise die 
Pinbelegung deines LC-Displays herauszufinden.
Es nützt halt nix, die richtigen Befehle mit dem korrekten Timing an die 
falschen Pins zu schicken ...
Aber das sich auf dem Display beim Anlegen der Spannung was tut kann man 
ja erstmal als gutes Zeichen betrachten.

Gruss Uwe
#1691768
Lesenswert?

Danke für die Tipps.
Grade war mal kurz der blinkende Curser da aber das war wohl nur 
Zufall..
müsste es den rein theoretisch auch mit der lcd-lib für den HD4478 
klappen, obwohl das display einen HD47780 controller hat?

Habe auch ein bisschen am kontrast gedreht, ich kann ihn damit zwar 
einstellen aber es gibt trotzdem nur die blöcke zu sehen...

@Uwe: die Pinbelegung habe ich da, es ist ein 10pin anschluss vobei 7-10 
die Datenbits sind. In der Pinbelegungsduku des Displays steht jedoch 
nur D4-D7. D0-D3 gibt es dort nicht...Aber das ist doch normal für den 4 
Bit modus oder?

1 GND
2 VDD (+5V)
3 Vo (Kontrastspannung)
4 RS
5 R/W
6 E
7 D4 (Datenleitung)
8 D5 (Datenleitung)
9 D6 (Datenleitung)
10 D7 (Datenleitung)

Gruß,
Lutz
Gast #1691781
Lesenswert?

Das LCD C0802-04 lässt sich bei mir problemlos HD47780-kompatibel
im 4-bit Modus ansteuern. Mit der gleichen Software/Initialisierung
(ASM) wie bei den anderen kompatiblen Displays ...

Schaltung kontrollieren! Alle Anschlüsse richtig? Kurzschlüsse?
Testen! Photo? Wie ist R/W angeschlossen? Welcher Mikrocontroller?

Beitrag "C0802-Display ansteuern - auch nach Init nur schwarzer Balkan."

Ralf2008
Angehängte Dateien:
#1691800
Lesenswert?

Lutz M. schrieb:
> Grade war mal kurz der blinkende Curser da aber das war wohl nur
> Zufall..

Ich vermute, aus Sicht des Displays kommt nur Datenmüll an, sprich, an 
deiner Verkablung scheint was nicht zu stimmen.

> ... 10pin anschluss vobei 7-8 die Datenbits sind.

Du meinst Pin 7-10 ?

> In der Pinbelegungsduku des Displays steht jedoch nur D4-D7.
> Aber das ist doch normal für den 4 Bit modus oder?

Ja.

Wird das "Busy" Bit von deinem Programm abgefragt oder wird es ignoriert 
und einfach nach jedem Befehl eine bestimmte Zeit gewartet ? Kann man 
zwar machen, ist aber nicht gut ...
#1691811
Lesenswert?

@Ralf,

genau das Display ist es. Ich habe die Anschlüsse schon öfters geprüft, 
und nach dieser Doku angeschlossen. Der RW ist an PD5 angeschlossen, da 
ich die lib von Peter Fleury benutze. Hoffe also das die Lib den dann 
auch richtig benutzt. Es ist an PortC auf einem sdk500 mit einem Mega8 
bei 2MHz aufgebaut.
Sieht wild aus, aber müsste alles richtig sein..

@uwe,

ja,ich meinte auch 7-10, hatte mich verschrieben (schon im post 
korrigiert).
Die Lib benutzt das Busy-Bit soweit ich es verstanden habe. Nur beim 
initialisieren, wird ein einmal ein delay benutzt...

Ich kenn mich mit displaycontrollern nicht aus, aber kann die Fleury-LIB 
die ja für den HD4478 heschrieben ist überhaupt ein HD47780 ansteuern?

Werde die Kabel aber gleich nochmal nachprüfen..
#1691949
Lesenswert?

Hab alles nochmal nachgemessen (Durchgang LCD<->PIN uC), ist alles 
richtig. Habe sogar nochmal die Version aus dem Tutorial, 1:1 nachgebaut 
und compiliert:
[http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial/LCD-Ansteuerung]
Immer noch nix zu sehen außer schwarze Balken in der ersten Zeile.
Habe es auch mit einem 2ten Display getestet, kommt wieder nichts..
Ich weis nicht weiter..

Kann mir einer vielleicht mal die Unterschiede zwischen den beiden 
controllerntypen erklären? Unterscheiden die sich vielleicht in 
Speicheradressen und Timing, oder sind die wirklich gleich zu benutzen?

Danke für eure Hilfe, wäre sonst warscheinlich schon völlig 
verzweifelt..

Gruß
Lutz
Gast #2287123
Lesenswert?

So ich habe mich auch mal an diesem Display versucht. Erst keinen Erfolg 
bis zu dem beschriebenen Quelltext.
Dort ist eine merkwürdige Initalisierungsequenz, die ich so im 44780 
Datenblatt nicht nachvollziehen konnte. Darin wird wohl der Unterschied 
bestehen. Hier mal der Quelltext aus der angehängten ZIP weiter oben:

lcd_nibble( 0x30 );
lcd_nibble( 0x30 );
lcd_nibble( 0x30 );      // 8 bit mode
lcd_nibble( 0x20 );      // 4 bit mode

lcd_command( 0x28 );      // 2 lines 5*7
lcd_command( 0x08 );      // display off
lcd_command( 0x01 );      // display clear
lcd_command( 0x06 );                  // cursor increment
lcd_command( 0x0C );      // on, no cursor, no blink

damit gehts.
Wobei hier 0x30, eigentlich für 0x3 gelesen werden muss, da lcd_nibble 
die höheren 4 Bit auf den Bus legt.

Laut Datenblatt sollte ein 0x3 Kommando das LCD in den 4 Bit Modus 
versetzen (DL),
ein weiteres 0xC sollte Zeilen und Zeichenhöhe (N und F) festlegen.
Danach wäre das LCD im 4 Bit Modus und könnte mittels Display on/off 
Befehl eingeschaltet werden. Passiert im obigen Code aber alles viel 
Später. Woher die vielen 0x30 und 0x20 Befehle kommen ist mir 
schleierhaft. Aber so funktioniert es aufjedenfall.

gruß cyblord
Gast #2287320
Lesenswert?

Habe noch ein wenig weiter Experimentiert, und herausgefunden wie die 
Initialisierung wahrscheinlich ablaufen muss.
Mein Initalisierung sieht aktuell wie folgt aus:
1
sendNibble(0x2); // 4 Bit Modus
2
_delay_ms(10);
3
sendCommand(0x2C); // 4-Bit Modus, 2 Zeilen, Font 10x8
4
sendCommand(0xC); //Display on, no cursor, no blink
5
sendCommand(0x1); //Clear Display and Cursor home

Der Grund warum das C0802-04 soviele Probleme macht, sehe ich in 
folgender Tatsache:

Sobald das erste Nibble übertragen wird, welches das DL Bit auf 0, also 
das LCD in den 4-Bit Modus versetzt, ist dieser Befehl abgeschlossen.
Alles weitere muss nun in 2x4 Bit übertragen werden. Überträgt man aber 
diesen ersten Befehl direkt als 2x4 Bit, so wird das 2. Nibble vom LCD 
als 1. Nibble des nächsten Befehls angesehen. Und alles kommt aus dem 
tritt.
Ich denke bei anderen Controllern sieht das anders aus. Dort kann man 
diesen ersten Befehl (Umschalten auf 4-Bit), bereits in 2 nibbles 
verpackt senden.

gruß cyblord
Gast #2856945
Lesenswert?

cyblord ---- schrieb:
> Hier meine lib. Getestet bisher nur mit dem besagten Pollin LCD!

habe mit deiner lib und einem Atmega88PA probiert, bekomme es einfach 
nicht zum laufen. hardware hab ich gemessen.

alles durchgang keine brücken und spannung am display hab ich auch.

Bekomme noch nicht mal die "Balken" zusehen.....

hat wer ne idee?

achso habs auch schon mit nem ersatzdispay probiert....nix
Gast #4036637
Lesenswert?

Hab mit dem Code gestern auch eines der Displays zum Laufen gebracht...

Musste bissl fummeln, weil ich paar kleine Fehler gemacht hab. 
Insbesondere hatte ich die Pinnummern der Datenleitungen (D4-D7) in der 
umgekehrten im Quellcode angegeben...

Ganz wichtig scheint wirklich der Teil hier zu sein:

  sendNibble(0x2); //4-Bit Mode (DL=0)
  _delay_ms(100);

ohne den funktioniert das Display manchmal (z.B. bei einem Reset über 
Reset-Taste oder direkt beim Hochladen der Firmware auf ein 
Arduino-Board), aber es kommt hin und wieder zu merkwürdigen Fehlern... 
Evtl. kann das Delay kürzer gestellt werden.

Naja, am Ende hats funktioniert!

@Cyblord: Danke für gute Deine Arbeit!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren