Hallo alle zusammen, ich bräuchte mal bitte Hilfe. Ich möchte testweise auf einem 2x16 LCD (HD 44780 Contr.) den Buchstaben „H“ anzeigen lassen. Das funktioniert aber leider nicht. Ich bin nun mein Programm im Debug- Modus Schritt für Schritt durch gegangen, und konnte feststellen, dass alles wunschgemäß abläuft. Bei der Initialisierung habe ich mich an die Tabelle von sprut gehalten. http://www.sprut.de/electronic/lcd/index.htm#init Die hardwaremäßigen Verbindungen habe ich überprüft. Es gibt keine Unterbrechungen, und das Display ist korrekt angeschlossen. Auch das Verwenden eines anderen Displays brachte keinen Erfolg. Bei überhöhtem Kontrast, ist die obere und untere Zeile durchgängig mit Kästchen gefüllt. Sehe ich das richtig, dass man daraus entnehmen kann, dass zumindest die Einstellung auf 5x8 Matrix, 2 zeilig und somit auch die Umstellung von 8 auf 4 Bit- Interface erfolgreich ist? Wo kann der Fehler liegen? Den Programmcode habe ich angehängt. Vielen Dank schon mal. L.G. Micha Edit: Das untere asm-File ist das richtige! @ Moderator: Wenn möglich bitte das obere asm-File löschen. Danke.
Hat wirklich niemand einen Tipp für mich? L.G. Micha
Hallo Michael, überprüfe bitte mal die Initialisierung von PORTD. Ich würde das so machen: init_pic: ;---PORTD banksel PORTD ;select bank with PORTD (bank0) clrf PORTD ;clear output latches banksel TRISD ;select bank 1 with datadirection register TRISD clrw TRISD ;set RD7:0 = 0 pins are now outputs bcf OPTION_REG,7 ;weak pullups on banksel 0 ;back to bank 0 banksel PORTD ist eigentlich nicht nötig, weil der PIC mit bank 0 nach Reset startet, hilft aber die Übersicht zu behalten. Probleme mit dem Speicherplatz hast Du ja nicht. Für die Variablendefinitionen empfehle ich dieses Vorgehen: CBLOCK 0x7E .... ;allen Variablen zwischen CBLOCK und ENDC loop1 :wird die Adresse ab 7E aufsteigend zugewiesen. loop2 ;damit erspart man sich loop2 EQU 71 .... ..usw ENDC Evtl. schaue ich mir sobald ich Zeit habe, auch mal den restlichen Code an... mfG Ottmar
Hallo Ottmar, erst einmal vielen lieben Dank für deine Bemühungen. Ottmar K. schrieb im Beitrag #3593347: > Wenn Du jetzt aber obige Definitionen anschaust, siehst Du dass Deine > Steuerleiungen E, bl_cont ebenfalls im oberen Nibble (d7,d6) liegen und > Dein Datenport ins untere Nibble überlappt. Deshalb die zweimalige Rotation nach rechts. > bcf OPTION_REG,7 ;weak pullups on Habe ich eingefügt -> keine Veränderung L.G. Micha
PS: Ich werde morgen mal ein Display anschließen (falls ich Zeit finde) von dem ich sicher weiß, dass es 100%-tig funktioniert. L.G. Micha
Der 877 unterstützt ja In-Circuit-Debugger. Wenn du bei den Pics bleiben willst, der Tip: Kauf dir einen Pickit3. Bei solchen Problemen einfach durchsteppen und mit dem Multimeter direkt am LCD überprüfen, ob die richtigen Signale ankommen. Geht schneller, als im Forum fragen. (Hatte mal ein Display spiegelbildlich angeschlossen - so einen Fehler findet man nicht im Programmcode).
Hallo Unbekannter, :-) Kein Name schrieb: > Tip: Kauf dir einen Pickit3 Habe ich bereits. > Bei solchen Problemen einfach > durchsteppen Wie oben geschrieben, habe ich das schon gemacht, und mir dabei die Werte in den Registern angeschaut (watches im MPLABX). Es geschieht alles so wie ich es beabsichtigt habe. Nur scheinen in meinen Absichten ein oder mehrere Fehler zu liegen. :-/ Danke trotzdem für deine Tipps. L.G. Micha
"#define RW PORTD, 1" Es wird wohl ein RW Pin definiert und nehme an das er angeschlossen ist - nur WO im Programm wird dieser auch bedient? Ist der beim Schreiben sicher IMMER auf LOW? (auch wenn durch die Maskiererei und Verschieberei mit anschliessenden Schreiben auf PORTD zufällig RW auf Low wäre - sauber ist das nicht.)
Hallo Chris, Chris B. schrieb: > Ist der beim Schreiben sicher IMMER auf LOW? ja, das RW Pin am LCD hebe ich auf Masse gelegt. L.G. Micha
Hallo alle zusammen, so, ich habe jetzt mal ein Display angeschlossen von dem ich weiß, dass es auf jeden Fall funktioniert. Und siehe da, es läuft! Also sind BEIDE vorherigen LCDs (beides verschiedene) unglücklicher Weise defekt. :-( Ich danke allen, die sich Gedanken über mein Problem gemacht haben, und im besonderen Ottmar. Eine schöne Woche noch. L.G. Micha
Es könnte noch an den Controllern der Displays liegen. Der KS0070 z.B. braucht Wartetakte, die der HD44780 nicht brauchte.
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.