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