Hallo, ich habe vor mir eine LED-MATRIX-LAUFSCHRIFT zu bauen. Nachdem die ersten Buchstaben auch erfolgreich angezeigt werden (habe für jeden Buchstaben ein eigenes Programm geschrieben), möchte ich die Daten für die Buchstaben nun aus eine Tabelle auslesen. Doch leider funktioniert es nicht. Ich versuche es nach dem Prinzip, dass das Byte (bzw. nur 6 Bits) komplett ins W-REgister geladen werden und dann rotieren. Dabei wird jedesmal das C-Flag abgefrat und bei "1" bzw. "0" die entsprechende Flanke ans Schieberegister 4094 ausgegeben. Doch leider funktioniert es nicht. Weiß vielleicht jemand warum? Oder mache ich vielleicht einen Grundlegenden Fehler? Wenn jemand eine effektivere Idee hat, die Daten ans Schiebe-register zu senden, nur her damit... Gruß Moritz P.S.: Assemberlcode hängt an!
Hallo Moritz, Du lädst 1 in das Arbeitsregister und führst dann folgende Befehle aus: DATEN_ZEILE1 addwf PCL, 1 <- Programmzähler +1 retlw b'11111' <- dieser Befehl wird übersprungen DATEN_ZEILE2 addwf PCL, 1 <- Programmzähler +1 retlw b'10001' <- dieser Befehl wird übersprungen u.s.w. dein Programm läuft hier schon ins leere. Rotate funktioniert nicht mit dem Arbeitsregister. rfl W, 0 Verwende eine Variable: rfl Variable, 1 Die Zählervariable speicher2 wird nur einmal am Anfang des Programms gesetzt. Sie muss aber für jede Zeile gesetzt werden. Weiter hab ich es mir nicht angesehen. Gruß John
Tippfehler: der Rotate-Befehl ist 'rlf' und nicht 'rfl'. Mach die Tabelle so: DATEN_ZEILE addwf PCL, 1 ;Sprung zu den Zeilen bei: retlw b'11111' ;W=0 retlw b'10001' ;W=1 retlw b'10001' ;W=2 retlw b'11111' ;W=3 retlw b'10001' ;W=4 retlw b'10001' ;W=5 retlw b'10001' ;W=6 (Seitengrenze beachten)
Hallo John, vielen Dank schonmal. Habe deine "Beanstandungen" geändert, doch leider funktioniert es noch immer nicht. Ich vermute ja, dass der Fehler in der "seriell-Umwandlung" liegt, denn wenn ich die Spalten-PINs der Matrix (welche vom Schieberegister kommen) "analog" mit Masse verbinde, funktioniert es. Und an den Schieberegistern liegt es wohl auch nicht, denn auch diese funtionieren. Es scheint also ein Softwarefehler zu sein. Gruß Moritz
Hallo Moritz, im Programmkopf steht, dass Port A 0:Daten und 1:Clock sind. Daten und Clock werden aber auf Port B (0 und 1) ausgegeben. Da nur die linken sechs Bit ausgegeben werden (Rotate Left), musst Du die Daten linksbündig spreichern: rechts bis 8 bit mit Nullen füllen. retlw b'11111000' Nur nach Aufruf von DATEN_ZEILE7 wird das Datenbyte in speicher1 gespeichert. Nach den anderen Aufrufen nicht. Gruß John
Hey John, viele Dank :-) Es funktioniert. Ist natürlich höchst ärgerlich einen solchen Fehler zu machen (Port A benutzt und Port B programmiert), aber manchmal sieht man eben den Wald vor lauter Bäumen nicht... Gruß Moritz
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.