Also, da das Problem mit dem Reset etc. an meiner Schaltung ja nun geklärt ist, habe ich nun das Problem, das mein Display nicht ganz so will wie ich. Der mega8 läuft auf jeden Fall "richtig", ein "Rechteck" an einem Portpin lässt eines der Relais schön schalten, es sollte also soweit erstmal alles laufen, das Display habe ich ähnlich dem Tutorial angeschlossen, und zwar wie folgt: PB5 => RS PB4 => E (nable) PB3 => DB4 PB2 => DB5 PD1 => DB6 PB0 => DB7 Vcc und GND nach Datenblatt, DB0 bis DB3 auf GND, RW auf GND, Vee über 47k Poti (funzt auch zur Kontrasteinstellung) Das Display zeigt auch etwas an, allerdings nicht das, was es anzeigen soll, es kommen nur "Hyroglyphen" zum vorschein, Aktionen wie "Display löschen (Cls in Bascom) funktionieren wohl, den es "wackelt" kurz, bis er die Hyroglyphen neu anzeigt. Es sind auch jeweils die gleichen Hyroglyphen (also das Wort "Test" gibt immer die gleiche sinnlose Zeichenfolge) etc. Woran könnte es liegen? Das Display bekommt ja wohl nur die Daten irgendwie falsch rüber, oder? Ist übrigens ein 2*16 Display mit HDD44780-Controller, lief auch vorher am mega8, also keine Kompatibiltätsprobleme. Wer hat eine Idee??
Kannst du ausschließen: - vertauschte Leitungen? - D0 bis D3 nicht sauber auf GND? - andere Pins benutzt als in BASCOM konfiguriert? - anderes Timing als in BASCOM konfiguriert? Mehr fällt mir jetzt nicht ein, da ich den Baukasten BASCOM nicht benutze und daher kaum kenne. Ich schreibe mein Zeugs in ASM, das ist irgendwie übersichtlicher, da sieht man, was man macht. ...
Gleiche Problem habe ich derzeit. Es hängt eigentlich nur am Timing. Das Programm läuft einwandfrei, nur das Display spinnt. Wenn ich ein paar mal schnell hintereinander auf Reset drücke, dann kommt auch das richtige Bild auf dem LCD (auch 2x16 mit HD44xxx). Offensichtlich muss man sehr genau auf das Timing beim initialisieren achten :-/ probier mal ein paar waitms(100) - bzw. je nach Sprache entsprechende verzögerungsschleifen am Programmstart einzubauen. Das wirkt Wunder :)
Keine Ahnung wie BASCOM das haben will. Aber das kommt mir Spanisch vor PB3 => DB4 PB2 => DB5 PD1 => DB6 PB0 => DB7 Bit 0 am µC entspricht Bit 4 (oder Bit 7) am Display? Das kann ich fast nicht glauben, da mann dann jedes Byte in sich spiegeln muesste, bevor man es ausgibt.
@Hannes: D0 bis D3 auf GND? Wie du siehst, verwende ich D1 um es an DB6 am Display anzuschließen. Sollten die anderen (D0, D2, D3) auf GND gelegt sein? @Chris: werde das mit den Warteschleifen nochmal versuchen, wobei ich zuletzt z.B. ein paar Warteschleifen zwischen die einzelnen Ausgaben gesetzt habe (allerdings auch nicht vor die erste Ausgabe), das werde ich nachher nochmal prüfen. @Karl-Heinz: ich stelle bei Bascom die Portpins ein, an welchem Datenbit des LCD diese sind, Bascom kompiliert das dann passend. Wie es genau abläuft kann ich dir leider auch nicht sagen. Ist es denn allgemein "verkehrt", das Display an verschiedene Ports anzuschließen, also z.B. ein paar der Leitungen an PortB, ein paar andere an Pins von PortD? Danke aber soweit erstmal, weitere Tips sind herzlich willkommen!!
Mit D0 bis D3 (DB0-DB3)sind die restlichen Pins am Display gemeint, die du im 4-Bit Modus nicht brauchst!
Ach so, sorry, ja, die sind alle auf GND, werde das heute alles nochmal nachprüfen, aber die anderen Leitungen habe ich gestern doppelt gegengeprüft, da ist alles so wie es sein sollte!!
richtigen quarz angegeben und eingestellt im compiler? fuses intern extern? jtag-fuse disabled? ist n timing problem. schnellen timer nebenher laufen mit langer ISR?
> Ist es denn allgemein "verkehrt", das Display an verschiedene Ports > anzuschließen, also z.B. ein paar ... Das kommt auf den "LCD-Treiber" an. Da das in BASCOM ein "Baustein" dieses Baukastens ist, könnte dir nur der Programmierer dieses Bausteins Auskunft geben. Vielleicht hat es das ja schon getan, indem er entsprechende Hinweise in die BASCOM-Hilfe geschrieben hat. > Aber das kommt mir Spanisch vor > PB3 => DB4 > PB2 => DB5 > PD1 => DB6 > PB0 => DB7 Ich halte es auch für unwahrscheinlich, dass der LCD-Treiber das so unterstützt. Ich denke eher, dass PB0 an DB4 muss usw. Zum Timing von HD44780-kompatiblen LCDs: - Das LCD benötigt einen schnellen Anstieg der Betriebsspannung beim Einschalten. Ein dicker Elko hinter dem Spannungsregler könnte das beeinträchtigen. - Das LCD benötigt eine längere Pause zwischen Einschalten der Betriebsspannung und dem ersten Befehl der Initialisierung. - Das LCD benötigt nach Clear eine größere Pause, manche LCDs auch nach Cursor-Home. - Nach den restlichen Befehlen darf die Pause kleiner sein. - Die genauen Werte der einzuhaltenden Pausen sind von Typ zu Typ etwas unterschiedlich. > jtag-fuse disabled? Der Mega8 hat kein JTAG. Auch bei den großen Megas, die JTAG haben, braucht man diese Fuse nicht zu verändern, es genügt, wenn man zweimal direkt hintereinander JTD in MCUCSR setzt. ...
Nebenher läuft sonst nichts, Fuses sind alle richtig gesetzt, werde nachher mal ein wenig die Ausgänge "durchwechseln", also PB0 an DB4 und der Rest dann "analog". Werde auch mal diverse Warteschleifen einbauen, um Fehler dieser Art auszuschließen. Quarz ist übrigens richtig angegeben, nebenher läuft nix anderes! (Wie gesagt, habe nen Test-Programm draufgespielt, um solche Dinge auszuschließen. Ein Kondensator ist auch dran (220µF) am Spannungsregler, im "Einschaltmoment" ist auch sonst erstmal kein Bauteil aktiv, was große Ströme verlangen könnte.
bau die Zeilen für das LCD ziemlich am Ende deiner Programminitialisierung ein: Beispiel: Config Lcdpin = Pin , Db4 = Portc.5 , Db5 = Portc.4 , Db6 = Portc.3 , Db7 = Portc.2 , E = Portb.5 , Rs = Portc.1 Config Lcd = 16 * 2 Waitms 100 Upperline Lcd "TIS ISSE TEST" Lowerline Lcd "GUHDEN DACH!" dann kann das Display in Ruhe hochfahren, initialisiert dann über den BASCOM-Treiber und gibt nach 100ms die ersten Buchstaben aus. Bei mir klappt das einwandfrei bei ATmega8 und ATtiny2313 mit 4-8MHZ.
Stimmt, daran habe ich noch gar nicht gedacht, die Initialisierung "so" vorzunehmen, also nicht den Compiler das machen lassen, sonder "selber" zu machen, versuch ich direkt mal... ;-)
Also, habe das mal mit einem Code ähnlich dem oben probiert, jetzt sagt das Display gar nix mehr!! Habe auch folgendes gemessen: Durchgang der Leitungen vom Display zu den Ports => alles i.O. GND an Pin 5, 7, 8, 9, 10, 16, +5V an Pin 2, GND an Pin1 vom Display, alles vorhanden bzw. Durchgang da... Aber was mich wundert: alle Pins am Display (bis auf Pin 4 (RS)) haben, wenn ich das Display hier so liegen habe, Durchgang gegen Masse?!?! Ist das normal so? Und warum tut sich jetzt auf einmal gar nix mehr am Display?
Hatte jetzt den 220µF am Ausgang des Spannungsreglers mal entlötet: keine Änderung!! Einstellung des Kontrastet funktioniert, als die "Balken" sind alle sichtbar!! Wer hat noch eine Idee woran es liegen könnte?? Habe jetzt vor und hinter jeden Befehl ein waitms 100, also das sollte ja wohl reich, oder?!?!
Ich habe jetzt nur dieses lauffähige Programm (siehe Anhang) als BASCOM-Code hier rumliegen. Das funktioniert hundertpro. Bitte schließe das Display GENAUso an: ================================== 01 - GND 02 - +5V 03 - Schleifer eines 10k-Potis welches zwischen GND und +5V hängt (Kontrasteinstellung) 04 - LCD RS (PinC1) 05 - GND 06 - LCD Enabled (PinB5) 07 - Frei (nicht auf GND) 08 - Frei (nicht auf GND) 09 - Frei (nicht auf GND) 10 - Frei (nicht auf GND) 11 - LCD DB4 (PinC5) 12 - LCD DB5 (PinC4) 13 - LCD DB6 (PinC3) 14 - LCD DB7 (PinC2) 15 - Helligkeit (PinB1) 16 - GND ==================================== ich habe die nichtverwendeten Pins des Displays einfach in der Luft hängen und habe damit keine Probleme, auch wenn es "schlechter" Stil ist. Zum Testen reicht es allemal. Die Firmware ist derzeit für 7,3728 MHz, aber das kannst du ja schnell angleichen (einer der ersten Einträge im Sourcecode) viel Glück!
Was ich bislang noch vermisse ist die Bezeichnung von dem Ding. evtl. ist ja nur hd44780 "kompatibler" kontroller drauf ... hat ich mal, der war dann doch nicht so ganz kompatibel, vor allem beim init
Hatte das gleiche Display vorher auch am laufen, also es ist auf jeden Fall kompatibel, ich vermute ich hab mir das Display "geschossen" (schon das zweite!), der eine schwarze Knubbel hintendrauf ist einmal sehr heiß gewesen, als ich das Display direkt am myAVR-Board hatte, und ich blöderweise den Stecker falschherum drin hatte (+5V direkt an einem der Dateneingänge etc.), so das ich denke das es jetzt defekt ist!! Die schwarzen Balken werden aber dennoch angezeigt, Kontrasteinstellung über Poti funktioniert, aber werde nachher erstmal das von Chris vorgeschlagene "Prozedere" versuchen. Wobei ich denke das es so nich geht, PortC ist doch der ADC bei meinem mega8!!! @Marko: was für ein "initlcd"? In der Bascom-Hilfe ist davon keine Rede, auch im Code-Beispiel ist kein derartiger Ausdruck.
ich hab mal mit dem befehl n lcd zum laufen bekommen, warum auch immer. vorher ging nämlich nix such mal in der Hilfe danach
Du kannst jeden Pin mit spezilafunktionalität (eben auch ADC pins) als normale I/Os verwenden.
Das ich PortC als normale Pins verwenden kann wusste ich nicht, aber hab im Datenblatt mir das ganze mal angesehen, jetzt ist auch klar wie/warum es geht... ;-) Werde das alles mal testen, wobei ich mir schon sicher bin das ich das nächste der Displays geschossen hab... Naja, erstmal gucken...
@MArko: "initlcd" wird von den neuen BASCOM-Versionen automatisch bei Nutzung des "LCD blabla" Befehls erledigt. @GMB: +5VDC an den Dateneingängen dürfte nix schrotten, da der Atmel selbst auf den "Datenpins" mit TTL-Pegel (sprich +5VDC) arbeitet. Kann nur sein, dass du es mit ner statischen Entladung beim Anfassen geschrottet hast ;) Sonst hätte ich keine Ideen mehr. LCDs mit BASCOM sind eigentlich überhaupt kein Problem, egal welchen Pin der Atmels du für die Ansteuerung nimmst (auch quer Feld ein über PortA - B - C und sogar D :)) tschautschau!
@ Chris: ja, das habe ich auch gedacht, es lief ja auch vorher alles auf meiner alten Platine, frag mich nicht warum es jetzt nicht läuft, wie gesagt, gestern einmal falschherum eingesteckt, keine Ahnung was da kaputt gegangen sein kann, es sagt nix mehr! Ich wollte aber eh noch ein neues Display bestellen, dann bestelle ich mal direkt eins mehr mit (auch wenn's "weh" tut... :-/) Hab aber auch mal mit Initlcd versucht, extra nochmal vor dem ersten "Cls", aber hat nix gebracht, es tut sich nix am Display!!
naja, die LCD sind nicht generell unkompliziert mit Bascom. Ich hab mit dem DIP-204 ziemlich klimmzüge machen müssen um das zum Laufen zu bringen (war auch mein Einstieg in die µC-Geschichte). Das hab ich nur mit nem Lib hier ausm Forum in Gang gebracht, Bascom hats nicht unterstützt (speziell die Initalisierung)
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.