Forum: Mikrocontroller und Digitale Elektronik 8 LED-Matrizen - Buchstaben darstellen


von Nup (Gast)


Lesenswert?

Hey Leute - ich habe 8 LED-Matrizen 5x7 nebeneinander geschalten - über 
einen Treiber - einen 3-to-8-Decoder für die Reihen und Schieberegister 
für die Spalten.

Jetzt will ich Buchstaben darstellen...alles im Assembler...erstens wie 
schreibe ich das im Programm dass es weiß welches LED-Display 
angesteuert wird?

Ich habe den ASCII-Zeichensatz so geplant, dass ich jeweils die Reihen 
angebe.

Also .db 0b00000111, 0b010101000,...bis zum 8ten Byte dass einfach ein 
Null-Byte wird da ich ja nur 7 Reihen benötige.

Mein Programm funktioniert insofern, dass ich mittels Z-Pointer auf das 
richtige Zeichen im Zeichensatz hinspringe - nur wie mach ich das, dass 
ich jetzt ein Zeichen darstelle - auf einem Display - bei mir siehts 
nämlich so aus dass bei mir das gewollte einmal schwach leuchtend 
aufleuchtet - und eine Reihe drunter ein zweites Mal stark leuchtend und 
dann auf jeden weiteren Display um eine Reihe verschoben...ich weiß grad 
nicht mehr weiter...

Vielen Dank für Hilfe im Voraus

von Uhu U. (uhu)


Lesenswert?

> ich habe 8 LED-Matrizen 5x7 nebeneinander geschalten

Im Deutschen heißt das korrekt: Ich habe geschaltet.

> Jetzt will ich Buchstaben darstellen...alles im Assembler...erstens
> wie schreibe ich das im Programm dass es weiß welches LED-Display
> angesteuert wird?

Um die dafür einen Rat zu geben, müßte man wissen, wie deine Hardware 
aufgebaut ist.

von Nup (Gast)


Lesenswert?

Hardware sieht in etwa so aus http://attiny.com/scroll5.htm nur 3-to-8 
Decoder ist ein 74HC138 und der Treiber ist mit Pull-up-Widerstände noch 
versehen - ist momentan eine Notlösung da die Displays falsch sind...

von Uhu U. (uhu)


Lesenswert?

Offensichtlich mußt du die einzelnen Punkte zeilenweise ansteuern:

- zuerst wird über den Decoder die nicht vorhandene Zeile adressiert
- dann wird das Muster der ersten Punkt-Zeile seriell in die
  Schieberegisterkette geschoben, das letzte Zeichen zuerst
- anschließend wird für ausreichend kurze Zeit die erste Zeile
  adressiert

Der Vorgang wird für alle 7 Punktzeilen wiederholt. Die 8. Zeile wird 
adressiert, um den Füllvorgang der Schieberegister zu verbergen.

Das heißt insbesondere, daß du nicht eine bestimmte Stelle im Display 
einzeln ansprechen kannst, sondern immer nur das ganze Display.

Angenommen, du willst nur ein A auf Position 3 ausgeben, dann mußt du 
zuerst 5 Leerzeichen, dann das A und dann nochmal 2 Leerzeichen in die 
Schieberegisterkette schieben.

Das muß natürlich Punktzeilenweise passieren, wie oben beschrieben.

Ich würde die Sache folgendermaßen organisieren:

+ Die Ausgaberoutine wird in einer Timer-ISR realisiert, die ständig im 
Hintergrund läuft.

+ Die Ausgaberoutine liest endlos einen festen 8-Byte-Puffer, in dem der 
anzuzeigende Text steht, erzeugt daraus die Punktzeilenmuster und 
steuert das Display an.

+ Wenn ein neuer Text ausgegeben werden soll, dann wir der einfach nur 
in den Puffer geschrieben.

+ Wenn nichts angezeigt werden soll, wird der Puffer mit Blanks 
überschrieben und die Anzeigeroutine läuft trotzdem weiter.

von Nup (Gast)


Lesenswert?

Ok danke - dann hab ich also zum Beispiel um beim "A" zu bleiben so das 
zu realisieren?

1
.db 0b10001111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
2
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
3
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
4
.db 0b00000111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
5
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
6
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
7
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111

Und wie sieht dann so eine Ausgaberoutine in etwa aus?

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
Noch kein Account? Hier anmelden.