Tiny LED-Scroller
Erstellt: 2009-06-25 • Letzte Änderung: 2010-06-05 [vor 14 Jahren, 4 Monaten, 12 Tagen]
Diese kleine Box entstand als ein Geburtstagsgeschenk. |
Zurück zur Hauptseite "LED-Displays"
Beschreibung
Ein 7x5 Pixel kleines LED-Display scrollt fröhlich einen Lauftext von rechts nach links. Allerdings nur im Dunkeln; ein LDR auf der Rückseite des Gerätes versetzt den AVR tagsüber in den Schlafzustand. Das spart nicht nur Batterie; am helligten Tage kann man auf dem Display sowieso nicht viel erkennen.Nach oben
Funktionsweise
Hardware
Die Schaltung konnte ich schnell relativ günstig herstellen. Statt einem neuen ATtiny2313 habe ich einen alten AT90S2313 verwendet. Das Display lag seit Jahren in einer Schublade herum und einen LDR hat man sowieso immer irgendwo rumfliegen.Letzterer ist zusammen mit einem 22kΩ-Widerstand als Spannungsteiler mit dem negativen Eingang des Analogkomparators am AVR verbunden. Über einen weiteren Spannungsteiler aus zwei 47kΩ-Widerständen liegt am positiven Eingang des AC die halbe Versorgungsspannung an.
Sinkt die Spannung des negativen Eingangs unter die halbe Versorgungsspannung, so meldet sich der Analogkomparator zu Wort und das Display wird angeschaltet.
Je nach verwendetem LDR muss der 22kΩ-Widerstand evtl. noch angepasst werden. Ein niedrigerer Widerstandswert macht die Schaltung empfindlicher. (Alternativ kann man natürlich auch mit dem Spannungsteiler experimentieren und dadurch den Einsatzpunkt des Analogkomparators verschieben.)
Das Display ist direkt mit den Pins des AVR verbunden. Da die Software statt ganzen Zeilen bzw. Spalten nur einzelne Pixel multiplext, muss der Strom eines einzelnen AVR-Pins nur für eine LED reichen; so entfallen jegliche LED-Treiber.
Die LEDs besitzen keine Vorwiderstände; den Lötaufwand wollte ich mir wirklich nicht antun. In Verbindung mit dem Multiplexing kann man das ganze in Software mit einer Prise PWM so hinbiegen, dass die LEDs nicht durchbrennen und mit der gewünschten Leuchtstärke strahlen. Ob das die tollste Praxis ist, wage ich zu bezweifeln. Es funktioniert jedoch und der Lötaufwand verringert sich erheblich. |
Zeichensatz
|
Der Zeichensatz befindet sich in der Datei charset.h und
enthält die Buchstaben A-Z, Leerzeichen, Minus, Punkt, Komma, Ausrufezeichen
zwei Smileys und ein Herzchen ().Zu jedem Zeichen gibt es ein Array, welches die Breite des Zeichens in Pixeln und fünf Bitmasken beinhaltet. Die Bitmasken enthalten die Pixeldaten für je eine Zeile. Ein gesetztes Bit bedeutet dabei "Pixel", ein Nullbit dann logischerweise "kein Pixel". Im Bild rechts sind die gesetzten Bits rot eingefärbt und man kann die Zeichen erkennen. Die Funktion charset_translate wandelt ein ASCII-Zeichen in einen Pointer auf
das entsprechende Array um und gibt diesen Pointer an die Funktion print_char ,
welche die Bitmasken zerpflückt und das Zeichen an die gewünschte Position aufs Display zeichnet.Dabei dürfen Zeichen auch über den Bildschrimrand herausragen, was sich der folgende Scrolling-Mechanismus zu Nutze macht. |
Scrolling
Hier eine kleine Beschreibung, wie ich die Laufschrift realisiert habe. Es folgt außerdem eine kleine Grafik zum besseren Verständnis.Es wird stets versucht, vier aufeinanderfolgende Zeichen gleichzeitig aufs Display zu zeichnen. Vier, da alle Zeichen eine Mindestbreite von 2 Pixel haben müssen und somit maximal vier Zeichen gleichzeitig auf dem sieben Pixel breiten Display angezeigt werden könnten.
Daher soll in diesem Beispiel der Text "PIISTDREI" ("Pi ist drei") ausgegeben werden, denn er enthält zwei mal den Buchstaben I, welcher jeweils nur zwei Pixel breit ist. Somit passen tatsächlich vier Buchstaben gleichzeitig aufs Display und man sollte das Beispiel besser verstehen können.
Das erste Zeichen, in der Grafik blau eingefärbt, steht dabei an der Position
position
.Ganz am Anfang, also bei
position = 0
, wäre das der Buchstabe "P".
Darauf folgen die drei weiteren Buchstaben "I", "I" und "S".
Das "S" passt dabei nicht mehr auf das Display, was aber nichts macht.Nun kommt eine neue Variable ins Spiel:
offset
. Sie gibt die Verschiebung
des Textes nach links an.Bei
offset = 0
wird das "P" ganz normal in die linke Displayecke gezeichnet.Bei
offset = 1
fällt bereits eine Spalte des "P" aus dem Display heraus.Bei
offset = 2
lässt sich bereits eine Spalte des "S" erkennen.Bei
offset = 3
sieht man das "P" zwar nicht mehr, aber dennoch ist es
für die Software noch auf dem Bildschirm, denn jeder Buchstabe enthält rechts eine leere Spalte
(als Abstandshalter für den folgenden Buchstaben).Bei
offset = 4
wäre der Buchstabe "P" dann aber wirklich vollständig vom Display verschwunden.
Nun wird offset = 0
gesetzt und position
um eins erhöht;
Das Spiel beginnt von vorn.Nach oben
Fotos
Das Innenleben: Der Quarz ist relativ hässlich direkt von oben auf die Clock-Pins des AVRs gelötet. Zu erkennen ist auch der ISP-Stecker.Die beiden AAA-Batterien klemmen zwischen zwei Metallspiralen (aus meinem alten MP3-Player) und einer Metallstrebe aus einem Metallbaukasten.
Das Gehäuse: Oben das 7x5 Pixel kleine LED-Display und unten der LDR.
Ein kleines YouTube-Video von dem Display in Action. Wie man sieht, reicht die winzige Dimension der 7x5 Pixel tatsächlich für eine kleine, lesbare Laufschrift aus.
Nach oben
Schaltplan
Nach oben
Download
Den C-Sourcecode, mein Linux-Makefile und die brennfertige Hexfile gibt es hier zum Download.Auch meine kompilierte, brennfertige hex-Datei ist dabei, aber vermutlich möchtest du den Code mit deinen eigenen Sprüchen neu kompilieren.
In
main.c
kannst du in Zeile 46 deinen eigenen Text eingeben.AT90S2313
Download: tinyledscroller-1.0.zip [6.24 kiB] | |
[1551 Downloads] |
ATtiny2313
Nicht vergessen, die Fuses zu setzen. (Entweder permake fuses
, oder manuell mit den im Makefile zu findenden Werten
für LFUSE und HFUSE.)Download: tinyledscroller-1.0-tn2313.zip [6.50 kiB] | |
[1275 Downloads] |
Nach oben
Weitere Gedanken
Beim Stöbern bin ich auf folgende, interessante Informationen gestoßen. Dort wird beschrieben, wie man eine LED auch als Fotodiode betreiben kann.Jeff Han | Multi-Touch Sensing through LED Matrix Displays |
MERL | Very Low-Cost Sensing and Communication Using Bidirectional LEDs |
Dieses Projekt könnte man entsprechend um obige Technik erweitern, um den LDR überflüssig zu machen.
Nach oben
Besuchereinsendungen
Nachbauten des Tiny LED-Scrollers von Besuchern dieser Website lassen sich hier bewundern.Zu den Besuchereinsendungen
Nach oben