Probleme bei LCD-Ansteuerung Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte
| Autor |
|
Probleme bei LCD-Ansteuerung |
|
|
|
|
BID = 514880
Racingsascha Schreibmaschine
    
Beiträge: 2247 Wohnort: Gundelsheim
|
|
Ich experimentiere grade mit LCDs an meinem PIC16F628A. Ich habe mich zwar vor einigen Monaten schonmal erfolgreich damit beschäftigt, wollte aber heute mal versuchen statt jeden Buchstaben einzeln zu übertragen mit einem dt-String (erzeugt aus einem Text eine retlw-Tabelle) und einer Schleife die Zeichen zu übertragen. Zuerst habe ich das alte Programm nochmal in den PIC gebrannt und getestet, lief einwandfrei.
Dann baute ich die Schleife plus Tabelle ein (den Rest ließ ich unangetastet) und ließ das ganze im Simulator laufen. Alles lief wie nach Plan, nur "in Echt" zeigte das Display totalen Müll an. Jedes Zeichen bestand aus 4 übereinanderliegenden Linien mit jeweils einer Pixelreihe Abstand untereinander. Nach Rückbau auf Einzelbuchstaben-Übertragung wurde aber immernoch der gleiche Müll angezeigt. Einen Wackelkontakt im Steckbrett-LCD-Adapter (habe nur zwei LCDs mit zweireihigem Anschluss) kann ich ausschliessen, habe ich schon mehrmals auf vertauschte Pins oder Wackelkontakt durchgemessen. Ich hänge mal den kompletten LCD-Projektordner von MPLAB 7.5 als .zip an. Enthalten ist der Quellcode der die Buchstaben einzeln sendet, den Originalcode oder der Code mit der Schleife drin habe ich nicht mehr. Sie unterschieden sich aber nur in der Art, wie die Buchstaben zum LCD übertragen werden, die Routinen für Zeichen/Befehle senden, die Initialisierung des LCD und des PIC sind identisch.
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie. |
|
BID = 514916
Racingsascha Schreibmaschine
    
Beiträge: 2247 Wohnort: Gundelsheim
|
|
Habe doch tatsächlich die Frage vergessen.
Wer findet den Fehler? Ich bin das Ganze mehrmals durchgegangen, konnte aber beim besten Willen keinen Fehler finden
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie. |
|
BID = 514931
Jornbyte Moderator
      
Beiträge: 7345
|
Ich habe dein Programm nicht gelesen. Habe aber eine Gegenfrage:
machst du eine kleine Pause, nachdem du das Zeichen an das LCD übergibst?
_________________
mfg Jornbyte
Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.
|
BID = 514956
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Moin,
Wie sollen wir denn den Fehler finden, wenn wir den Originalkode nicht haben?
Du musst keine Verzögerung, wie von Jorn vorgeschlagen, reinbauen, wenn du das Busyflag testest. Das tust du, ob du es richtig machst, kann ich dir nicht beantworten, da ich keinen PIC-Assembler verstehe, oder nur rudimentär.
Sollte das Testen des Busyflags allerdings nicht klappen, dann ist Jornbytes Einwand allerdings berechtigt.
Tabelle? Werden denn die richtigen Zeichen im ROM korrekt addressiert? Wann ist der String zuende? Nullterminiert? Oder bekannte Länge? Wenn er nicht nullterminiert ist, dann wird fleißig jeder weitere Datensalat aus dem Flash oder RAM gelesen und als Datenbyte ins Displayram kopiert. Nullterminiert bedeutet aber auch, dass du selbst überprüfen musst, ob das gelesene Zeichen ungleich NULL (0) ist! Sind die Zeichen unter den ASCII-Zeichen 0x0-0x7, dann wird der Inhalt des Character Generator RAMs aufs Display abgebildet. Das Ganze geht so schnell, dass du vermutlich kaum die ersten paar korrekten Zeichen des Strings sehen kannst, bevor sie mit Datensalat überschrieben werden. Ist dann noch ein Fehler in der LCD-Routine, was ich wie gesagt nicht herausfinden kann, dann ist es klar, dass das nicht geht.
Hast du denn das Display überhaupt korrekt initialisiert? Sieht ganz und garnicht so aus! Eine fehlerhafte Initialisierung ist schlecht.
Hast du irgendwo eine Endlosschleife eingebaut? Ja, bei warten2. Wird zwar, soweit ich sehe, nie ausgeführt, ist aber blödsinnig.
Andere Probleme sind vllt. vorhanden, kann ich aber schlecht sagen, da Assemblerdialekt fremd.
---
Mi den Strings ist das so eine Sache, die man ohne Quellkode nicht beantworten kann, zumal der sicherlich nicht so lang sein wird, dass man ihn nicht hier reinstellen könnte.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 12 Apr 2008 2:58 ]
|
BID = 514974
Racingsascha Schreibmaschine
    
Beiträge: 2247 Wohnort: Gundelsheim
|
Zitat :
| machst du eine kleine Pause, nachdem du das Zeichen an das LCD übergibst?
|
Ich frage das Busy-Bit ab. Ich habe die Routinen aus dem alten Programm nicht geändert, und da hat es einwandfrei geklappt.
Zitat :
| | Tabelle? Werden denn die richtigen Zeichen im ROM korrekt addressiert? Wann ist der String zuende? Nullterminiert? |
Ich habe das so gemacht: Ich lege einen dt-String ab, an dessen Ende ein 0xFF steht. die Sendeschleife hat geprüft, ob das eingelesene Byte 0xFF ist und hat dann aufgehört.
Im hochgeladenen Code wird jeder Buchstabe einzeln übertragen, und dann in eine Endlosschleife gesprungen.
Zitat :
| | Hast du denn das Display überhaupt korrekt initialisiert? Sieht ganz und garnicht so aus! |
Ich habe ja die einzelnen Schritte kommentiert, was fehlt denn deiner Meinung nach?
Ich habe jetzt mal das Programm so umgebaut, dass man für jeden Buchstaben einen Taster drücken muss. Ergebnis bleibt aber das gleiche.
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 514999
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Würde dein Code exakt sein, würde aber dieser Fehler nicht auftreten! Es muss ein Wurm drin sein, und der Teil, der das Busyflag pollt ist recht merkwürdig.
Normalerweise sehe das so aus:
- Port auf Eingang stellen
- Instruction Register anwählen
- Edit: Read-Write auf Read stellen!
- E setzen, solange E high ist, steht Busyflag zur Verfügung
- Warten, bis Busyflag low wird
- E löschen
- Port auf Ausgang stellen
---
Bei dir sieht das irgendwie komisch aus.
Solche Fehler treten i.d.R. dann auf, wenns dem Kontroller zu schnell geht, siehe Jornbytes Einwand.
Mach doch mal eine Verzögerung nach jedem Zeichen von ca. 1ms rein - ist viel zu viel, aber besser reproduzierbar. Schreibe Debugkode, der es ermöglicht, das Busyflag mit dem Oszi zu betrachten. Vielleicht wird das Busyflag einfach übersprungen - dann ist dieser Fehler im wahrsten Sinne des Worten vorprogrammiert
(Wie gesagt, ich kann diesen Dialekt nicht 100%, nur in Etwa nachvollziehen, was passiert)
Die Initialisierung sieht normalerweise noch etwas anders aus:
Laut Pollins Beschreibung zu meinem ersten Display (Wintek irgendwas) soll man nach Erreichen der Betriebsspannung von etwa 4,5V noch etwa 15ms warten.
Man schreibe nun 0x30 ins Instruction Register,
warte 4,1ms oder mehr,
schreibe erneut 0x30,
warte 100µs oder mehr
und schreibe erneut 0x30.
Nun erst ist das Busyflag nutzbar.
Es folgen die Befehle zum Initialisieren, wobei Systemset der erste ist.
Aus rechtlichen Gründen verweise ich hier nur auf das PDF, du findest es hier:
Bestell-Nr.: 120 232
-> Download
-> Text LCDs.pdf (oder so)
Dort steht das drin. Daran halte ich mich seit Ewigkeiten, und alle Displays laufen.
Zu den Strings:
Keine Ahnung, wie das bei Pics mit den Adressen ist, ob die Word- oder Byteweise adressiert werden, aber kann es nicht sein, dass du an der falschen Stelle ließt?
Dennoch deutet der Fehler auf ein fehlerhaft initialisiertes Display hin. Oder du schreibst die Daten ins falsche Register.
_________________
[ Diese Nachricht wurde geändert von: DonComi am 12 Apr 2008 12:57 ]
[ Diese Nachricht wurde geändert von: DonComi am 12 Apr 2008 13:02 ]
[ Diese Nachricht wurde geändert von: DonComi am 12 Apr 2008 13:04 ]
|
BID = 515011
Racingsascha Schreibmaschine
    
Beiträge: 2247 Wohnort: Gundelsheim
|
Zitat :
| Man schreibe nun 0x30 ins Instruction Register,
warte 4,1ms oder mehr,
schreibe erneut 0x30,
warte 100µs oder mehr
und schreibe erneut 0x30.
|
Sprut schreibt auch dreimal 0x30 ins Instruction Register, habe mich immer gewundert warum
Zitat :
| Normalerweise sehe das so aus:
- Port auf Eingang stellen
- Instruction Register anwählen
- Edit: Read-Write auf Read stellen!
- E setzen, solange E high ist, steht Busyflag zur Verfügung
- Warten, bis Busyflag low wird
- E löschen
- Port auf Ausgang stellen
|
Ich mache es ähnlich, ich lese das Busybit in das Register "Daten" und prüfe es dort. Wenn es high ist, geht er in die kurze Warteschleife und versucht es nochmal. Werde die Routine aber heute Abend umschreiben, heute Mittag bin ich bei meiner Mutter.
_________________
Fnord ist die Quelle aller Nullbits in deinem Computer.
Fnord ist die Angst, die Erleichterung, und ist die Angst.
Fnord schläft nie.
|
BID = 515013
DonComi Inventar
     
Beiträge: 8604 Wohnort: Amerika
|
Moin,
I.d.R. liegt der Fehler im Detail. Wie gesagt, sowas kann passieren, wenn man "gekonnt" das Busyflag überließt.
Viel Spaß bei deiner Mutter,
und das Display wird noch  .
Grüße
Edit:
Ich beziehe mich hierauf:
;Busy-Bit abfragen
BLCD
call warten
BusyLCD
bsf STATUS,RP0 ;Bank 1
comf TRISB,1 ;alles input
bcf STATUS,RP0 ;wieder bank 0
BCF RS ;Statusregister
BSF RW ;lesen
BSF Enable ;Interface ein
nop
nop
MOVFW PORTB
MOVWF Daten ;Nach Daten lesen
BCF Enable ;Interface aus
nop
bsf STATUS,RP0 ;Bank1
clrf TRISB ;alles output
bcf STATUS,RP0 ;bank0
btfsc Daten,7 ;Busy gesetzt?
goto BLCD ;ja, nochmal prüfen
call warten
return
Das find ich zumindest merkwürdig.
Ich würde erst alles auf Eingang setzen und solange auf Eingang lassen, bis das Busyflag soweit ist.
Und jetzt, wo ich mit klaren Kopf das PÜrogramm lese, fällt mir auf, dass warten2 Absicht ist  ...
_________________
[ Diese Nachricht wurde geändert von: DonComi am 12 Apr 2008 13:57 ]
|
|
Zum Ersatzteileshop
Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum
Datenschutz
Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland
gerechnet auf die letzten 30 Tage haben wir 17 Beiträge im Durchschnitt pro Tag heute wurden bisher 10 Beiträge verfasst © x sparkkelsputz Besucher : 187968813 Heute : 27278 Gestern : 18748 Online : 228 26.12.2025 21:36 3 Besucher in den letzten 60 Sekunden alle 20.00 Sekunden ein neuer Besucher ---- logout ----viewtopic ---- logout ----
|
xcvb
ycvb
0.0463120937347
|