www.mikrocontroller.net

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


Autor: Nup (Gast)
Datum:

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

Autor: Uhu Uhuhu (uhu)
Datum:

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

Autor: Nup (Gast)
Datum:

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

Autor: Uhu Uhuhu (uhu)
Datum:

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

Autor: Nup (Gast)
Datum:

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

.db 0b10001111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
.db 0b00000111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111
.db 0b01110111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111,0b11111111

Und wie sieht dann so eine Ausgaberoutine in etwa aus?

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.