LED-Matrix Variablen

Gast #3312347
Lesenswert?
• ▲
▼
Hallo,

ich habe mehrere LED-Matrizen bekommen und habe sie mit Schieberegistern 
(Zeilen und Spalten) angesteuert. Zur Ansteuerung benutze ich erstmal 
die erweiterung M32 vom RP6. Dort benutze ich SPI  und schreibe erst die 
Spalten-Bits und dann die Zeilen und ausgeben. Funktioniert super.

Jetzt meine Fragen, ich habe mir natürlich vorgenommen eine Laufschrift 
zu programmieren. Ja, ich weis das gibt es schon mehrfach.
Ich dacht mir ich erstelle Variablen für jede Zeile zwei Stück. Eine als 
Init-Variable (Inhalt z.B. 0b00000000...) und eine als Ausgangsvariable 
die dann auf die entsprechende Zeile geschrieben wird.
Die Buchstaben/Zahlen würde ich auch ein Variablen speichern. Nun dachte 
ich mir ich nehme die Init-Var. und "ver-oder" die Bits mit den der 
Buchstaben und schreibe das Ergebnis in die Ausgangs-Var.
z.B. Zeile1aus = Zeile1int | Zeile1buchstabe;
Aber wie mache ich das, wenn Zeile1int und Zeile1aus z.B. 32Bit lang 
sind, der Buchstabe 8Bit und ich den Buchstaben an eine ganz bestimmte 
Stelle schreiben will? (z.B. nur Bits 10-17 mit den 8Bits des Buchstaben 
überschreiben)
Und ist meine Überlegung für die Programmierung eines Lauflichts 
richtig? Ich habe nur bedenken wenn ich die großen Matrixen (16x96) 
ansprechen will. Denn ich denke das ein ATmega32 nicht mit eine Variable 
die 96Bitstellen hat umgehen kann.

Ich hoffe auf eure Hilfe, denn mit diesem "Projekt" will ich mich in µC 
und die C einarbeiten, da ich bis jetzt "nur" alle Scriptsprachen durch 
habe. Mit Spriptsprachen habe ich schon mal eine Punkt-Matrix auf dem 
Bildschirm gezaubert und hatte dort auch die von mir beschriebenen 
Variablen genutzt.

Gruß m1cha
Lesenswert?
• ▲
▼
m1cha schrieb:
> Denn ich denke das ein ATmega32 nicht mit eine Variable
> die 96Bitstellen hat umgehen kann.

So macht man das auch nicht.

Du legst dir einen Bildspeicher über das Display an, also bei 16x96:
1
  uint8_t display[96][2];

Der Timerinterrupt gibt nur díeses Array aus.
Eine andere Routine wandelt den Text in den entsprechenden Zeichensatz 
um und legt in im Array ab.

Für das Schieben würde ich einfach den Text immer neu wandeln und an die 
entsprechende Pixelposition ablegen. Um ein Schieben um Pixelbreite zu 
erreichen, würde ich negative Startpixel zulassen, d.h. vom ersten 
Zeichen wird dann nur ein Teil angezeigt.
Gast
Lesenswert?
• ▲
▼
>Für das Schieben würde ich einfach den Text immer neu wandeln und an die
>entsprechende Pixelposition ablegen.


Oder eine Offsetvariable, welche nur in der Displayroutine 
(Timerinterrupt) weiterzählt und die SPaltenansteuerung geeignet 
weiterschaltet.

Somit brauchst Du den Text nicht zyklisch neu/umkopieren

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.