Forum: Mikrocontroller und Digitale Elektronik LCD C0802-04, HD47780 ansteuern..


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Der L. (luttenhamburg)


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

von Michael L. (hasimaus)


Lesenswert?

Hallo,

versuch mal am Kontrast zu drehen, also eine Spannung an Vo (Pin3) zu 
legen.
Zwischen 0V und 5V ist üblich, meist erhält man mit ~1V schon eine 
Anzeige.

In dem Thread ist auch ein Schaltplan
Beitrag "Zeitauslöser für Casio EX F1 mit attiny2313"

Gruß

von Michael L. (hasimaus)


Lesenswert?

Und noch ein kleiner Hinweis

Pollin LCD Display mit 2 Zeilen mit je 8 Zeichen.
Wird wie ein 16*2 angesteuert (nur die ersten 8
Zeichen werden dargestellt).

So, jetzt wollen wir aber eine Erfolgsmeldung hören ;-)

Gruß

von Uwe N. (ex-aetzer)


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

von Der L. (luttenhamburg)


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

von Ralf2008 (Gast)


Angehängte Dateien:

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

von Uwe N. (ex-aetzer)


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 ...

von Der L. (luttenhamburg)


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..

von Uwe N. (ex-aetzer)


Lesenswert?

Lutz M. schrieb:
> Nur beim initialisieren, wird ein einmal ein delay benutzt...

Das geht, AFAIK, in Ordnung.
Ich denke das beste ist (wenn du einen Verdrahtungsfehler ausschliessen 
kannst), du postest mal deinen Code, vielleicht hast du beim Einbinden 
der Lib einen Fehler gemacht (z.B. falsche Zuweisung eines oder mehrerer 
Pins).

von ddddddddd (Gast)


Lesenswert?

Messe mal deine Pins manuell durch und schaue ob auch das gemacht wird, 
was dein Programm soll. Zur Not schreib überall Delays mit mehreren 
Sekunden rein, damit du mit dem Messen hinterherkommst

von Der L. (luttenhamburg)


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

von Der L. (luttenhamburg)


Angehängte Dateien:

Lesenswert?

Juuhu, es funktioniert endlich :D
Habe eine andere Lib in einem Forenbeitrag gefunden, die mit dem 
controller funktioniert. Die Datei ist im Anhang. Für alle die kunftig 
vielleicht auch dran verzweifeln!

Hier der Post:
[Beitrag "LCD lib für C"]

Danke für Eure Hilfe!

Gruß
Lutz

von Michael L. (hasimaus)


Lesenswert?

Hallo Lutz,

das ist ja mal 'ne gute Nachricht. Kannst Du vielleicht nochmal genauer 
auf den Hintergrund eingehen. Es scheint als ob die kleinen, aber feinen 
Unterschiede zwischen HD44780 und KS0066 bei Dir eine Rolle gespielt 
haben.

So gesehen ist die Pollin Aussage "HD44780 kompatible" nicht korrekt !
Gruß

von Rainer H. (Gast)


Lesenswert?

Hallo,

ich habe das gleiche Display und hab so meine Probleme damit.
Kann es sein, dass die Dinger relativ langsam sind?
Wenn ich unter einer Sekunde das zweite mal eine Zeile
rausschreibe, dann spielt es verrückt (hängt sich auf oder verschiebt 
die Zeile...)

Gruß
Rainer

von Rainer H. (Gast)


Lesenswert?

Noch ne Frage... könnte es vielleicht an der Kabellänge
zwische Micro und LCD liegen? Es sind ca. 10 cm.

von cyblord (Gast)


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

von cyblord (Gast)


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

von Cyblord -. (cyblord)


Angehängte Dateien:

Lesenswert?

Hier meine lib. Getestet bisher nur mit dem besagten Pollin LCD!

von Thomas (kosmos)


Lesenswert?

hat der ATMega8 auch JTAG am PortC wie die ATMega16? Wenn ja müsstest du 
das ausschalten.

von spess53 (Gast)


Lesenswert?

Hi

>hat der ATMega8 auch JTAG am PortC wie die ATMega16?

Nein.

MfG Spess

von Cyblord -. (cyblord)


Lesenswert?

Thomas O. schrieb:
> hat der ATMega8 auch JTAG am PortC wie die ATMega16? Wenn ja müsstest du
> das ausschalten.

Sorry versteh ich jetzt. War das eine Antwort auf welches Post? Das 
Problem an sich war ja schon vor ne Weile gelöst. Ich habe nur noch 
ergänzendes Infos zum Init und Code eingestellt.

gruß cyblord

von yast (Gast)


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

von holger (Gast)


Lesenswert?

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

Dann hast du keine vernünftige Kontrastspannung.

Schaltplan zeigen und Anschlussbelegung posten.

von yast (Gast)


Lesenswert?

holger schrieb:
>>Bekomme noch nicht mal die "Balken" zusehen.....
>
> Dann hast du keine vernünftige Kontrastspannung.
>
> Schaltplan zeigen und Anschlussbelegung posten.


Ok es war einfach ein zu harter tag gestern.

Die Lib funktioniert einwand frei. man sollte nur alles auf den 
Richtigen port stellen. hatte es einmal übersehen.

alles gut.

von Stefan K. (Gast)


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!

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.