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
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ß
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ß
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
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
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
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 ...
@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..
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).
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
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
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
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ß
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
Noch ne Frage... könnte es vielleicht an der Kabellänge zwische Micro und LCD liegen? Es sind ca. 10 cm.
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
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
Hier meine lib. Getestet bisher nur mit dem besagten Pollin LCD!
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
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
>Bekomme noch nicht mal die "Balken" zusehen.....
Dann hast du keine vernünftige Kontrastspannung.
Schaltplan zeigen und Anschlussbelegung posten.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.