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
> 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.
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...
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.