Hallo Forum, ich habe mir ein 2004 LCD 20X4 Zeichen HD44780 zugelegt. Da ich noch ein altes MyAVR Board (aus Schulzeiten) mit einem Atmega8 habe, dachte ich mir diesen einfach mittels Atmel Studio 6 anzubinden. Doch da fangen die Probleme schon an, da meine Programmierkenntnisse solala sind. Ich hatte mir schon ein paar libs und Anleitungen dazu angeschaut, aber irgendwie bekomme ich das LCD nicht eingebunden. (ehrlich gesagt bin ich mir auch nicht sicher was ich da alles einbinden muss, da wir damals kaum mit dem Board gearbeitet hatten bzw ein LCD noch nie benutzt hatten). Das LCD wollte ich im 4Bit-Modi betreiben mit den Datenleitungen DB4-DB7 betreiben. Hat jemand eine Idee wie ich es vernünftig einbinde (gibt es da schon etwas)??? Hatte auch erst mal vor, nur was kleines Textmäßiges und was kleines mit Timern auszugeben. vllt ein kleines Beispiel Programm damit ich mich da auch mal rein arbeiten kann. Um Hilfe für den kleinen Anfänger wäre ich sehr verbunden. Vielen Dank schon mal im voraus
Fang doch mal mit einem Schaltbild an, wie du dir das vorstellst. Beispielprogramme für LCD gibt es hier im Forum dann zu Hauf, angefangen mit der Fleury Lib, die sehr flexibel ist, bis hin zu sehr speziellen Varianten. Aber eins nach dem anderen.
Das Tutorial durchzuarbeiten, wäre zu einfach? https://www.mikrocontroller.net/articles/AVR-Tutorial:_LCD
Tobi G. schrieb: > Ich hatte mir schon ein paar libs und Anleitungen dazu angeschaut, aber > irgendwie bekomme ich das LCD nicht eingebunden. Dann nimm dir erstmal das Datenblatt und guck dir die Pinbelegung an. Sonst ist Chaos und evtl. Defekt vorprogrammiert, bevor die erste Programmzeile abgearbeitet ist. Beitrag "Punkt-Matrix-Anzeigen an Atmega32 will nicht leuchten"
Im Anhang ist das was ich mir jetzt zusammen gestellt habe. Vllt kann da ja jemand mal rein schauen und sagen was mir da fehlt oder was zu viel ist. habs versucht zu überspielen, das ging auch, jedoch zeigt das LCD immer noch die zwei weißen Balken an, so viel wie ich hier gehört habe müsste das ja heißen das es noch nicht initialisiert wurde. Pin Belegung habe ich wie folgt: RS an PortB 4 RW an GND E an PortB 5 D0-D3 ist nicht belegt D4-D7 an PortB 0-3
Tobi G. schrieb: > habs versucht zu überspielen, das ging auch, jedoch zeigt das LCD > immer noch die zwei weißen Balken an, so viel wie ich hier gehört habe > müsste das ja heißen das es noch nicht initialisiert wurde. Es kann auch sein, dass das an deiner Beschaltung liegt. In deiner Pin-Belegungsliste fehlen die Versorgungsspannung und VEE.
die habe ich extra raus gelassen weil sie für mich klar waren. VSS an GND VDD an 5V V0 liegt liegt hinterm Poti (Kontrastspannung) Anode an 5V (Vorwiderstand ist verbaut) Kathode GND
für das myAVR gibt es doch Beispielsoftware, die auf Anhieb funktioniert. Für LCDs bietet sich i2c-module an: http://www.ebay.de/itm/IIC-I2C-TWI-SPI-5V-Serial-Interface-Board-Module-for-Arduino-1602LCD-Display-/201004359626?hash=item2ecccb1fca:g:O2AAAOSwMmBVgi3F Das erleichtert den richtigen Anschluss und spart i/o-pins.
@Tobi Greis Servus, Füge bitte nur den Header + .c Datei an, dann gucke ich auch mal drüber. mfg
@aSma anbei die .c datei was begrenzt denn den Header von welcher Datei meinst du ? Entschuldigung nochmal für mein Unverständnis bin nicht so in der Materie drin
jetzt fehlt noch die main.c in der das lcd initialisiert wird und ein Foto vom Anschluss des LCD.
grundschüler schrieb: > Für LCDs bietet sich i2c-module an: > Ebay-Artikel Nr. 201004359626 > Das erleichtert den richtigen Anschluss und spart i/o-pins. Warum willst du Fahrrad fahren. Es gibt doch Boote, die können sogar schwimmen. Das spart die Luft in den Reifen. Hääh ...
Anbei die main und 2 fotos, wo man vllt aber nicht alles so gut sieht, aja falls fragen sind....ich sitzt ja immer noch hiervor :D
Es scheint, als hättest Du die Reihenfolge der vier Datenbits vertauscht.
der code scheint ok zu sein. Kontrast stimmt? kleines Testprogramm für die i/o schreiben und mit einem Multimeter die Verdrahtung prüfen und mit lcd.h abgleichen: lcd_init(); for(i=0;i<6;i++){ PORTB|=i<<1; _delay_ms(2000); PORTB&=~(i<<1); }
Also das mit dem Kontrast müsste stimmen, damit hebe ich ja auch nur die Zeilen hervor Habe auch schon mehrfach versucht in der main was zu schreiben und paar Befehle einzusetzen, aber über die Balken auf dem Display komme ich nicht hinaus, aber ich denke es wird einfach nicht initialisert. Hat denn keiner ein anderes fertiges Programm mit .c und .h datei für ein 4x20 Zeilen Display, dann könnte ich vllt mal vergleichen was das nicht stimmt So langsam verzweifel ich mit dem dingen hier :D es wird wahrscheinlich ein kleiner Fehler sein aber ich bin halt zu doof um den zu finden, weil ich mich auch nicht so gut auskenne MfG
Nicht so ungeduldig. Wenn Du auf die Rückseite des Displays schaust, solltest Du zwei Controller erkennen können. Typischerweise werden 20x4 nämlich nicht nur mit einem Controller angesteuert. Aber ich kenne das Display nicht, daher ist das nur eine Vermutung. Wenn Du in das Datenblatt des LCD schaust, wirst Du die Initialisierung dort finden, eventuell sind die Timings falsch. Überprüfe mal das hier aus der lcd.h gegen das Datenblatt: #define LCD_BOOTUP_MS 15 #define LCD_ENABLE_US 20 #define LCD_WRITEDATA_US 46 #define LCD_COMMAND_US 42 #define LCD_SOFT_RESET_MS1 5 #define LCD_SOFT_RESET_MS2 1 #define LCD_SOFT_RESET_MS3 1 #define LCD_SET_4BITMODE_MS 5 #define LCD_CLEAR_DISPLAY_MS 2 #define LCD_CURSOR_HOME_MS 2 Gibt es Compiler-Warnungen?
:
Bearbeitet durch User
Hallo Tobi, mMn ist deine Pinbelegung mit RS an PortB 4 RW an GND E an PortB 5 D0-D3 ist nicht belegt D4-D7 an PortB 0-3 nicht korrekt. Lies die #defines in lcd-routines.h am Anfang durch. Versuch mal mit: RS an PortB2 E an PortB3 D4-D7 an PortB4-B7. MfG Udo
Pete K. schrieb: > Typischerweise werden 20x4 > nämlich nicht nur mit einem Controller angesteuert. Das Display hat, wie auf dem Bild zu sehen, nur einen E Anschluss. Also auch nur einen Controller. Gruß Jobst
@ Pete habe dieses Display gekauft. Leider aber kein Datenblatt dabei. 2004 LCD blue Display Anzeigen 20X4 Zeichen 5V mit HD44780 CP02009 von ebay Bei Datenblättern aus dem inet fand ich aber keine wirklichen Timings bzw nur das mit dem display is clear hab ich da gesehen. Warnungen habe ich beim überspielen nicht erhalten @Udo wie grundschüler schon sagt Hat der Atmega8 nicht so viele. PortB0-5
Macht das überhaupt ein Unterschied Udo? habs an PortD muss aber Bei PortD 2-5 die Datenleitungen anschließen.(0-1 sind glaube ich schon vom Board selber belegt) 6 an RS und 7 an E jetzt habe ich auf dem Display alle 4 Zeilen dargestellt bzw mit einem weißen Balken belegt
>jetzt habe ich auf dem Display alle 4 Zeilen dargestellt bzw mit einem >weißen Balken belegt Dann dreh mal am Kontrast.
Servus, ändere mal bitte
1 | #define LCD_ENABLE_US 20
|
2 | #define LCD_WRITEDATA_US 46
|
zu
1 | #define LCD_ENABLE_US LCD_WRITEDATA_US
|
2 | #define LCD_WRITEDATA_US 46
|
mfg
@HOLGER am Kontrast drehen bewirkt keine Änderung, außer das die weißen Balken weg oder da sind @aSma habs getauscht und überspielt dann hat es kurz geflackert aber auch hier keine Änderung
@TO Hast du den richtigen CPU Takt eingestellt? Lasse mal eine LED in 1s Takt blinken. Werden die Ports richtig angesteuert? --> Debugmodus und die Initialisierungsroutine mal durchgehen. Ich bin kein Freund von Arduino. Aber irgendwo tief im Schrank liegt bei mir einer. Manchmal können Kleinigkeiten Tage in Anspruch nehmen.
Hi Tobi, hast du auch noch "myAVR Quickprog" oder womit programmierst du? Könnte dir dann mal ein hex-file schicken zum Ausprobieren. MfG Udo
Hi Udo ehm habe nur Atmel Studio 6.2 mit dem ich programmiere. @aSma CPU von 3686400 stimmt Led hab ich noch nicht probiert weil ich ja sonst nix sehe mit dem debuggen muss ich mal schauen. ich häts vllt besser mit Arduino gemacht :P ;D da findet man viel ;D
Hab gerade mit meinem alten "myAVRBoard mit LCD-Display" am LPT-Port herumgespielt und bemerkt, dass das Prog. erst nach dem Brennen läuft und auf dem LCD eine Anzeige erscheint, wenn das LPT-Kabel abgezogen ist. Ich häng mal einfach was an: LCD1.asm und die Hex dazu. Ist zwar in Assembler, sollte auch in deinem Studio laufen. Sonst einfach mal die Hex brennen. Good luck! MfG Udo
Wenn du an den Routinen nichts verändert hast, ist es unwahrscheinlich dass der Fehler daran liegt. Ob du Port B, c oder D verwendest, ist völlig egal. Mit der oben dargestellten Test-Routine kannst du zum einen das Pinout überprüfen, zum anderen merkst du, ob der CPU-Takt stimmt.
Hallo Liebe Leutsss, Nochmals Vielen Dank für ALLE die mich bei meinem Problem unterstützt haben. Den genauen Fehler werde ich wohl nicht erfahren. Habe eure Vorschläge getestet und nachgeschaut. Nach dem gefühlten 1000 Test Tag hatte ich den Mikrocontroller angeschlossen und auf einmal gab er meinen Text aus^^. Im Programm wurde nichts geändert, komisch das er dann auf einmal ging(ob das an irgendwelchen Zeiten lag kaaa). Das war mir dann auch egal die Freude hat gesiegt.... Jetzt hab ich schon ein bisschen rum gespielt, paar Texte ausgegeben und verschoben. Jetzt hätte ich trotzdem noch ne Frage. Wie sieht denn der Befehl aus wenn ich eine Zahl in meiner main ausgeben möchte, das hatte ich auch schon probiert jedoch bekomme ich immer ne Fehlermeldung....too few arguments... irgendwas scheint zu fehlen :P. Ich hatte mir vorgestellt, etwas auf dem Display zu zählen. Mit ner LED hab ich das schon getestet. Einfallende Signale möchte ich zählen(counts = counts + 1;) und das dann auf dem Display hochzählen lassen.. Kann ich den Befehl einfach in das lcd_number(); übernehmen oder kann ich dem nur zahlen vorgeben??? Das versteh ich nicht so ganz Mit freundlichen Grüßen topps
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.