mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PIC, Byte seriell asugeben


Autor: byte seriell ausgeben (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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!

Autor: John Bauer (johnbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: John Bauer (johnbauer)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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)

Autor: byte seriell ausgeben (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: John Bauer (johnbauer)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: byte seriell ausgeben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.