Tiny LED-Scroller


Erstellt: 2009-06-25Letzte Änderung: 2010-06-05 [vor 13 Jahren, 10 Monaten, 16 Tagen]

Tiny LED-Scroller 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.

Information 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

Tiny LED-Scroller: 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 (:-P).

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.
Der Zeichensatz und die Nachrichtentexte sind dabei übrigens im Programmspeicher untergebracht, damit sie keinen RAM beanspruchen, der mit 128 Bytes beim AT90S2313 verdammt klein ist.

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.

Tiny LED-Scroller: Scrolling-Mechanismus
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

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]
[1510 Downloads]

ATtiny2313

Nicht vergessen, die Fuses zu setzen. (Entweder per make fuses, oder manuell mit den im Makefile zu findenden Werten für LFUSE und HFUSE.)

Download: tinyledscroller-1.0-tn2313.zip [6.50 kiB]
[1234 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