Hallo liebe Mikrocontrollergemeinde, ich bin seit ca 20 Stunden am Stück verzweifelt am probieren dieses LCD Dipslay zum Laufen zu kriegen. http://www.pollin.de/shop/dt/NzczOTc4OTk-/Bauelemente_Bauteile/Aktive_Bauelemente/Displays/LCD_Modul_C0802_04.html Contorller: HD47780 Ich verwende einen Atmega 8. Ich habe viele fertige Display Treiber (auch von dieser Seite) heruntergeladenb und leider nicht zum laufen gebracht. Danach habe ich mir ALLE!!!!! Tutorialbeiträge hier durchgelesen und einen wirklicj 0815 Treiber selbst programmiert keinesfalls schön aufgebaut ist, es soll lediglich die im Tutorial angegebenen initialisierungen durchführen und ein kleines "a" auf das Display schreiben. >Die Initialisierung funktioniert auch noch einwandfrei, denn die schwarzen Balken in der ersten Reihe verschwinden nach 11 sec. (Zeiten sind bewusst mal so hoch gewählt) als Zeichen übertrag eich den AsCII Code des "a" aber das Displaxy bleibt einfach leer. Bin sehr verzweifelt weil ich nach ca 20 Stunden auch nichtmehr weis wo ich noch ansetzen soll. Vielleicht findet ja jemand einen Fehler im Code, mir ist bewusst dass er nicht elegant ausgeführt ist, abe rich wollte zuerts einmal eine einfache Funktion realisieren. Code: #include <avr/io.h> #ifndef F_CPU #define F_CPU 1000000 #endif #include <util/delay.h> int main() { DDRD = 0xFF; _delay_ms(5000); PORTD = 0b00000011; //Datenleitungen richtig setzen _delay_ms(1000); PORTD |= (1<<PD5); //ein_1 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_1 _delay_ms(1000); PORTD |= (1<<PD5); //ein_2 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_2 _delay_ms(1000); PORTD |= (1<<PD5); //ein_3 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_3 //4 bit Mode setzen _delay_ms(1000); PORTD = 0b00000010; _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(100); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000010; //Display aus _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(100); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00001000; //Display aus _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000000; //Display löschen _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(100); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00001000; //Display löschen _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(100); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000000; //Kurosr rechts _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(100); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000001; //Kursor rechts _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000000; _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000110; _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00000000; _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00001100; //Display ein _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); //ab hier zeichen rein ins display PORTD = 0b00010100; _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(100); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); PORTD = 0b00010001; _delay_ms(1000); PORTD |= (1<<PD5); //ein_4 _delay_ms(1000); PORTD &= ~(1<<PD5); //aus_4 _delay_ms(1000); while(1) { } }
@ Melaine (Gast) >Hallo liebe Mikrocontrollergemeinde, ich bin seit ca 20 Stunden am Stück >verzweifelt am probieren dieses LCD Dipslay zum Laufen zu kriegen. Dann geh mal ins Bett und schlaf dich ordentlich aus, in DEM Zustand wird das ganz sicher nichts. >Contorller: HD47780 >Ich verwende einen Atmega 8. Wie Millionen Leute vor dir. >Danach habe ich mir ALLE!!!!! Tutorialbeiträge hier durchgelesen und >einen wirklicj 0815 Treiber selbst programmiert Völliger Käse. >in der ersten Reihe verschwinden nach 11 sec. (Zeiten sind bewusst mal so >hoch >gewählt) Man kann alles übertreiben. >als Zeichen übertrag eich den AsCII Code des "a" aber das Displaxy >bleibt einfach leer. Tja, verissen. A und B Note. >Bin sehr verzweifelt weil ich nach ca 20 Stunden auch nichtmehr weis wo >ich noch ansetzen soll. Siehe oben. Kein Witz. >Code, mir ist bewusst dass er nicht elegant ausgeführt ist, abe rich >wollte zuerts einmal eine einfache Funktion realisieren. Nimm den fertigen Code aus dem Tutorial, OHNE jegliche Änderungen und er wird funktionieren. MFG Falk
>Hallo, ich hab eden aus dem Tutorial ja versucht, die Ports genau so vershaltet
und alles nachgeprüft aber es hat nicht funktioniert...selbes
Bild...initialisierung geht aber kein Text auf dem Display...kannst du nicht mal
kurz über meinen Code lesen und mir sagen ob da was falsch ist, ansonsten müsste
ich ein anderes Display bestellen,,,evtl ist das hier ja dann defekt..
Na 20std is man nicht mehr in der Lage Fehler zielorientiert zu finden. Geh ins Bett. Morgen findest du den Fehler, is bestimmt nur n Dussel Fehler. Wenn nicht, melde dich nochmal. Gute Nacht Knut
Hi Melanie, es geht doch nichts über wirklich hilfreiche Beiträge. (Vielen Dank, Falk!) Timing ist (fast) alles. IMHO passt Deine Initialisierung nicht. Sieh Dir noch einmal das Tutorial und vielleicht noch das Datenblatt zum HD47780 an. Bernd
Hallo...ich bin leider zu ehrgeizig...möchte das gerne huete noch mit einem kleinen erfolgserlebniss abschliesen...habe soviel heute gelesen und mir soviel mühe gegeben...hat nicht einer einen kostruktiven vorschlag...
<Hallo Bernd...danke...das Datenblatt habe ich mir heute ganz genau angeschaut, auch die erklärungen unter http://www.sprut.de/electronic/lcd/index.htm daraus ist auch mein quellcode entstanden...an den zeiten steht immer "mindestens" daher erst mal die hohe zeit um zu sehen wann die init fertig ist etc....was kann an der init falsch sein...ich hab wirklich alles 5 mal geprüft, verdrahtung, dann der einfache code...hab ich was übersehen
@holger, hi,vielen Dank für den hexcode...hab eihn gerade reingebrannt, leide rohne erfolg...arbeitests du da auch im 4 bit mode,,,da past bestimmt die makefile garnicht und die pinbelegung...kann das sein?
hi, schaltbild ist genau so realisiert wie beim tutorial hier...verdrahtung schon 2 mal geprüft...ich verende das pollin board un dhabe die pins über den 40 pol stecker nach außen geführt...die verdrahtung müsste passen, habe schon viele andere sachen hiermit gemacht und nie probleme gehabt
>@holger, > >hi,vielen Dank für den hexcode...hab eihn gerade reingebrannt, leide >rohne erfolg...arbeitests du da auch im 4 bit mode,,,da past bestimmt >die makefile garnicht und die pinbelegung...kann das sein? Ja, im 4 Bit Mode. Verschwinden die schwarzen Balken?
Spaghetticode ist ganz großer Quatsch, ein Schreibfehler und nichts geht mehr. Man schreibt zuerst ne Nibble-Funktion und darauf baut man alles andere auf: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=102296 Peter
hi, holger die schwarzen balken verschwinden nach 10 sec allerding werden auch keine zeichen dargestellt
>hi, holger >die schwarzen balken verschwinden nach 10 sec allerding werden auch >keine zeichen dargestellt Dann hast du dein Programm reingebrannt und nicht meins.
hat mich auch gewundert sorry...sicher dass du das richtige verwendet hast, mom ich versuchs nochmal
also hab mein programm gerade mal mit kürzeren zeiten versehen un ddann gehen die balken nach 2 sec weg... brenne ich dein rein udn mache einen cold restart, dann dauerts 11 sec...sorry
Ein guter Rat: Geh ins Bett, Erfolgserlebnis hin oder her. Du kannst ja morgen in aller Ruhe nochmal ran. Da scheint mehr im Unreinen zu sein, als nur der Code... Viele Grüße
>brenne ich dein rein udn mache einen cold restart, dann dauerts 11 >sec...sorry Ok, war für 16MHz kompiliert. Jetzt noch mal für 1MHz.
hi...vielen dank...habs grad nochmal reingebrannt...die balken gehen jethzt nach 5 sec weg aber leider imme rnoch kein text? vielleicht ist dad ding einfach im arsch
es erscheinen alle balken noch einmal aber viel viel heller wie vor der initialisierung
>hi...vielen dank...habs grad nochmal reingebrannt...die balken gehen >jethzt nach 5 sec weg aber leider imme rnoch kein text? Kontrolliere mal die oberen Datenleitungen DB6,DB7 vom Display. Das müsste ja PORTD2 und PORTD3 sein. Kommt da auch was an?
Melaine schrieb: > hi, schaltbild ist genau so realisiert wie beim tutorial > hier...verdrahtung schon 2 mal geprüft...ich verende das pollin board un > dhabe die pins über den 40 pol stecker nach außen geführt Im Tutorial gibt es ein Schaltbild mit dem Pollin Board? Vielleicht gibt es ja doch einen Konflikt mit "On-Board Hardware" wie z.B. Schalter oder gesetztem Jumper. Ich setze dasselbe Display ein. Hat bei mir sofort funktioniert, die Ansteuerung ist also Standard-Konform im 4-Bit-Modus. Viel Glück
hi holger...vielen lieben dank bisher... sorry für die dumme frage...wie soll ich das kontrollieren...messen? wie lamge sollte das signal denn anstehen...hab mein oszi leider verliehen :-(
Hallo El CE DE ich habe die verbindungen so gesetzt wie im pollin board, bzw tutorial besfhirben und gerade nochmal alle leitungen kontrolliert...im pollin board pdf gibt es ein eklemmenbelegung des 40poligen steckers...dementsprechend hab eich alles so verlötet dass die richtigen ports vom atmega (Portd d 0-3 und 4,5) auch am dispülay ankommen...müsste doch eigentlich so gehen...die jumper sind alle runter... wundert mich, dass die initialisierung gheht, sprich die balken weg gehen...hab schon einige sachen mit dem atmega gemacht, leider noch kein lcd...und nie solche probleme gehabt...
Nimm mal deinen, seinen, meinen oder irgendeinen Driver... Offenbar sind sich hier in diesem Forum alle zu schade, ihre Nase in eine der vorhandenen Dokumentationen zu stecken. Nun gut, da setze ich halt noch einen draufund poste hier eine Initialisierung, die tatsächlich funktioniert. Das Umsetzen von PIC zu Atmel überlasse ich dabei Melaine: ; Ausgabe auf LCD mit Warten auf Ready vom LCD SayIt: BSF toRS_LCD ; toRS-LCD muß für Zeichenausgabe gesetzt sein OutLCD: MOVWF RChar INCF Lxpos,F CALL Dir_IN _ow: BSF RW_LCD BCF RS_LCD BSF CE_LCD NOP NOP MOVF PortB,W BCF CE_LCD ANDLW 10000000b SKIP Z GOTO _ow CALL Dir_OUT GOTO _out ; direkte Ausgabe auf LCD ohne Warten. Out_imm: MOVWF RChar _out: CALL Dir_OUT ; RS einstellen SKIP toRS_LCD BCF RS_LCD SKIP NOT toRS_LCD BSF RS_LCD MOVF PortB,W ANDLW B'00001111' MOVWF RPort ; zuerst hi MOVF RChar,W ANDLW B'11110000' IORWF RPort,W MOVWF PortB BCF RW_LCD BSF CE_LCD NOP NOP BCF CE_LCD ; dann lo SWAPF RChar,W ANDLW B'11110000' IORWF RPort,W MOVWF PortB BCF RW_LCD BSF CE_LCD NOP NOP BCF CE_LCD SKIP toRS_LCD RETURN MOVLW 5 GOTO Wait ; Schreibposition im LCD setzen. GoZeile2: MOVLW 64 GOTO SetPosi GoZeile1: CLRW SetPosi: MOVWF Lxpos IORLW B'10000000' BCF toRS_LCD CALL OutLCD BSF toRS_LCD MOVLW 15 ANDWF Lxpos,F RETURN ClrEol: MOVF Lxpos,W ANDLW 16 SKIP Z RETURN MOVLW ' ' CALL SayIt GOTO ClrEol ; LCD initialisieren InitLCD: BCF CE_LCD ; CE lo BCF RS_LCD ; RS lo BCF RW_LCD ; R/W auf write BCF toRS_LCD ; auch in den Flags MOVLW 30 ; 30 ms CALL Wait BCF toRS_LCD MOVLW B'00101000' ; 4 Bit Modus CALL Out_imm MOVLW 10 ; 10 ms CALL Wait MOVLW 00010100b ; CursorMove+rechts CALL Out_imm CALL Wait_1 MOVLW 00001100b ; On+noCursor+noBlink CALL Out_imm CALL Wait_1 MOVLW 00000110b ; Increment+noShift CALL Out_imm CALL Wait_1 MOVLW 00000001b ; Clear CALL Out_imm CALL Wait_1 MOVLW 00000011b ; Clear CALL Out_imm CALL Wait_1 BSF toRS_LCD ; 1 = Zeichenausgabe RETURN Viel Spaß damit W.S.
das ist doch das Display, was auch im "Pollin Spiel" verwendet wurde http://www.pollin.de/shop/dt/MTU4OTgxOTk-/Bausaetze_Module/Bausaetze/Bausatz_Pollin_Spiel_I.html vielleicht kannst du ja da was im Code nachsehen
ES GEEEEHHHHT!!!! @holger...line1 / line2...super ;-) eine defekte folienleiterbahn war der grund...leider nur mit lupe zu erkennen....vielen lieben dank an alle die geholfen haben...nach lötbrücke geht jetzt der hex von holger und auch meiner...super nochmal vielen lieben dank an alle die geholfen haben...anderer code hat zumindest daztu geführt die hardware nochmal genau zu beäugen....ihr seit klasse vielen dank
Wegstaben Verbuchsler schrieb: > nun aber husch-husch ins Bettchen ! Absolut. Und, liebe Melanie - neben meinen Glückwünschen zu dem verspäteten Erfolgserlebnis - gewöhne Dich bitte schon einmal daran, dass manche Dinge nicht sofort klappen. Da braucht man Geduld und Ruhe. Um so mehr man sich den "kleinen schnellen Erfolg" herbeisehnt, um so eher begeht man bei dem Zwang, diesen "eben noch schnell" herbeizuführen, aus einem kleinen Fehler im Aufbau einen grossen - oder schlimmer: mehrere - zu machen. Daher: Wenn's wieder einmal gar nicht klappen will, erst einmal die Ruhe bewahren, systematisch herangehen (Leitungen durchmessen, Checkliste) - und das am Besten erst am folgenden Tag. ----- Dazu eine kleine Anekdote von mir selbst: Eines meiner allerersten Aufbauten beinhaltete u.a. eine ISP Schnittstelle direkt auf der Zielschaltung, da ich wusste, dass ich einige Änderungen [an der Firmware] durchspielen wollen würde - da hatte ich von vornherein keine Lust, dann jedes Mal den µC zum flashen ausbauen zu müssen. Als ich die Schaltung jedoch aufgebaut hatte, bekam ich um's Verrecken keine Verbindung zu dem µC. Alles geprüft, Spannung ok, Leitungen und Verdrahtungen ok, Widerstände, Kondensatoren, alles bestens in Ordnung. Sub-D Buchse durchgeprüft, alle Pins passten zu den Anschlüssen, nichts zu machen. Irgendwann, als es schon [sehr] spät wurde, habe ich es erst einmal aufgegeben und bin [zugegeben leicht gefrustet] in's Bett. Am nächsten Morgen jedoch unter der Dusche fiel mir spontan [wie so oft] ein, dass da doch was mit dem Reset Pin beim ISP war ... Ich hatte stumpf in der ansonsten korrekten Schaltung vergessen, auch den Reset Pin auf die Sub-D Leiste zu bringen - also befand sich der µC trotz bestem Zuredens nie in der benötigten Initialisierungsphase nach dem Reset, in der das Flashen überhaupt erst möglich gewesen wäre ... Im Nachhinein bin ich froh, dass ich erst einmal die Nacht über das Problem geschlafen habe. Am Abend zuvor war ich auch auf der Suche nach dem "einen schnellen Erfolg noch vor dem Feierabend" - wer weiss, was ich da noch probiert [lies: ein- und ausgelötet] hätte ... In diesem Sinne, Martin (der Nachbauer)
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.