www.blafusel.de

  Home  |   Privat  |   Impressum  |   Bücher  |   Computer  |   Mikrocontroller  |   Misc  |   OBD  |   Forum

zonak

8x8 Blinky

Inhalt

Einführung
Kein Arduino
Hardware
Software
Lauftext anlegen
Lauftext übertragen

Einführung

Prototyp 8x8 Blinky Eine kleine Spielerei als Wearable soll hier zum Nachbau vorgestellt werden. Es handelt sich um einen Anhänger, der beispielsweise an einem Schlüsselband (Lanyard) getragen werden kann. Versorgt von einer 3 V-Knopfzelle wird auf einer 8x8 LED-Matrix eine Laufschrift angezeigt. Der Text der Laufschrift kann vom Benutzer immer wider geändert werden.

Herzstück ist ein Atmel AVR Mikrocontroller vom Typ ATtiny2313A. Der Prozessor bietet 2 Kbytes Flash speicher, was für die Anwendung und den anzuzeigenden Text ausreicht. Im Auslieferungszustand sind die Fuse-Bits so gesetzt, daß kein externer Quarz als Taktgeber erforderlich ist und der Controller mit 1 MHz arbeitet. Das genügt völlig, um alle 64 LEDs im Multiplexbetrieb anzusteuern. Dabei wird immer eine Reihe (oder Spalte) der Matrix angesteuert und die entsprechenden LEDs werden zum Leuchten gebarcht. Nach einer kurzen Pause wird die nächste Reihe angesteuert. Das geschieht so schnell, daß das menschliche Auge ein stehendes Bild wahrnimmt.

Kein Arduino

Das Projekt ist so einfach, daß es von jedem nachgebaut werden kann, der schon mal ein wenig gelötet hat. Der ATtiny wurde bewußt gewählt, um nebenbei zu zeigen, wie einfach eine Schaltung mit Mikrocontroller realisiert werden kann. Viele Leute denken immer, das sei kompliziert. Ebenfalls falsch und in die Irre führend ist die Annahme, daß man für eine solche Aufgabe einen Arduino nutzen kann/sollte. Ich mag diese Teile nicht besonders. Sie sind gut, um einen Einstieg zu finden. Allerdings verhindern sie oft, daß der Anwender sich weiter entwickelt und die Materie wirklich versteht und beherrscht. Ein Arduino ist nichts weiter als ein Atmel Prozessor mit etwas Hardware drum herum. Dazu gibt es eine Entwicklungsumgebung, die den Einstieg erleichtert. Das führt aber dazu, daß viele Anwender nur noch in der Lage sind, einen Arduino zu nehmen, ein passendes "Shield" und ein "Sketch". Wenn es das gesuchte nicht gibt, herrscht Verzweifelung. Das ist enttäuschend und vor allem auch unnötig teuer und umständlich. Die Hardware besteht oft aus einfachen Teilen, die für wenig Geld zu haben sind. Der hier gezeigte einfache Aufbau wäre mit einem Arduino-System sogar sehr umständlich und teuer zu realisieren. Mit Arduino wäre das nicht möglich, denn dafür bräuchte man einen anderen Prozessor, USB-Anschluß, USB-Interpreter usw.
Die Software wird in der Sprache C erstellt, die ein wenig erweitert wurde, damit alles etwas einfacher ist. Wenn man sich gleich richtig mit der Hardware und Softwareerstellung beschäftigt, muß man kaum mehr lernen, ist aber viel flexibler und kann Produkte wie diesen 8x8 Blinky entwickeln. Ein paar Elektronik Grundkenntnisse sind natürlichauch hilfreich.

Hardware

8x8 Blinky Schaltplan Der Schaltplan ist einfach zu verstehen. Der Mikrocontroller wird von einer Batterie versorgt. An die Spalten (Kathoden) der LED-Matrix vom Typ TOP-CA-788BS (Datenblatt als PDF) sind I/O-Pins über einen notwendigen Vorwiderstand angeschlossen. Die Anschlüsse werden als Eingänge genutzt. Die Zeilen (Anoden) der Matrix sind an weitere I/O-Pins geführt, die als Ausgänge genutzt werden. Um später Daten in das EEPROM schreiben, wird der RxD-Pin des Controllers genutzt. Über diesen können per UART Daten eingelsen werden. Dazu ist zwar für eine zuverlässige Übertragung theoretisch eine Quarz-stabilisierte Taktung erforderlich, bei extrem niedrigen Baudraten geht es aber mit der internen 1 MHz-Taktung, zumal nur wenige Bytes übertragen werden müssen.

Bestückungsdruck Die Bestückung ist ebenfalls einfach. Die Bauteile gibt es als Komplettbausatz, wenn man sie nicht einzeln kaufen will und den Controller selber programmiert. Zuerst bestückt man die Widerstände und achtet dabei auf R1 (10 kΩ, braun-schwarz-orange), der sich von den anderen unterscheidet. Anschließend den Kondensator C1, dessen Ausrichtung egal ist und die Stiftleiste. Beim Einlöten des ICs und der LED-Matrix ist darauf zu achten, die Bauteile nicht zu stark zu erhitzen und ggf. Pausen einzulegen. IC1 muß mit der Kerbe nach oben ausgerichtet sein. Die LED-Matrix hat keine direkte Markierung für die Ausrichtung. Auf einer der Seitenflächen ist die Typenbezeichnung aufgedruckt. Diese wird nach unten (zur Batterie hin) ausgerichtet. Bei beiden Bauteilen darauf achten, daß Sie bündig, flach auf der Platine aufsitzen. Zum Schluß den Batteriehalter einlöten.
Es empfiehlt sich, die Lötpunkte zum Schluß vorsichtig etwas abzuschleifen, damit keine scharfen Kanten von den abgeschnittenen Drahtenden später die Kleidung beschädigen.

Die Batterie vom Typ CR2032 kann eingesetzt werden (Pluspol nach oben). Wenn die Batterie schwächelt oder generell mehr Helligkeit gewünscht ist, dann können auch zwei gleiche Knopfzellen übereinander gestapelt in den Batteriehalter gesteckt werden, wodurch sich die Spannung verdoppelt (Reihenschaltung). Auf der LED-Matrix leuchtet rechts unten die LED für drei Sekunden auf. Anschließend startet die Laufschrift. Wird ein Stück Papier oder Plastik zwischen den Batterieclip und die Batterie gschoben, dann ist der Anhänger ausgeschaltet.

Software

Der Sourcecode wurde in C mit WinAVR erstellt. Download als 7Zip-File. Wie man AVRs programmiert, habe ich in meinem Buch AVR: Hardware und Programmierung in C beschrieben.

Lauftext anlegen

EEPROM Der anzuzeigende Text wird im EEPROM des ATtiny gespeichert. Die Größe beträgt beim ATtiny2313(A) 128 Byte. Damit kein Speicher für einen Schriftsatz benötigt wird, sind im EEPROM die Bytes genau so gespeichert, wie die LEDs spaltenweise leuchten sollen. Als Endemarkierung dient ein Byte mit dem Inhalt 0xFF. Es ist also nicht möglich, eine ganze LED-Spalte leuchten zu lassen. Alle Bytes vom Anfang des Speicherbereichs bis zur Endmarkierung (exklusiv) werden nacheinander ausgegeben. Es können also 127 Spalten definiert werden. Davon ausgehend, daß ein Zeichen 5x7 Punkte umfaßt und eine Leerspalte zwischen zwei Buchstaben benötigt wird, können 21 Buchstaben gespeichert werden.

Das Beispiel zeigt, wie ein Buchstabe ("r") und ein Smiley im EEPROM gespeichert sind. Der gelb unterlegte Bereich soll die LEDs kennzeichnen, die derzeit auf dem Display leuchten, also zu sehen sind. Die Endmarkierung 0xFF wird durch den grauen Bereich markiert. Unterhalb der Spalten sind die Bytewerte angegeben, die pro Spalte berechnet wurden. Dazu wird die Wertigkeit jeder Zeile addiert, die in einer Spalte leuchten soll. Die Wertigkeit steht links in grün. Für die erste Spalte ergibt sich:4+8+16+32+64=124 (7CHex). Bytewerte werden hexadezimal gespeichert. Mit dem Windows Taschenrechner kann in der Ansicht/Programmierer zwischen den Zahlensystemen umgerechnet werden. Online gibt es zahlreiche Fontgeneratoren, die beim erstellen neuer Pixel-Zeichen helfen.

Die Darstellung auf der LED-Matrix erfolgt sehr einfach: Es werden immer die nächsten acht Bytes auf dem Display dargestellt. Angefangen wird in der ersten Spalte und es werden die Bytes 1...8 aus dem EEPROM ausgelesen und angezeigt. Nach einer kleinen Pause wird der Bereich (gelber Bereich) um eins nach rechts verschoben und es werden die Bytes 2...9 angezeigt. Die Abbildung zeigt somit den fünften Schritt in dem die Bytes 5-12 angezeigt werden. Dadurch entsteht der Eindruck, die Schrift läuft von rechts nach links über das Display. Soll die Schrift am Anfang "hineinlaufen", müssen sieben Leerspalten (Bytewert 00) vorangestellt werden. Nach dem die letzten acht Bytes zur Anzeige gebracht wurden, wird wieder der "Rahmen" wieder am Anfang beim ersten Byte platziert. Soll der Text also nach links hinauslaufen, sind wieder acht Leerbytes am Ende erforderlich.

HxD Die notwendigen Bytes können frei ausgedacht werden, um beliebige Grafiken oder Zeichen zu generieren. Es gibt bereits Zeichensätze, in denen die üblichen Zeichen bereits ausgerechnet wurden. Ein solcher Zeichensatz befindet sich im Download mit dem Sourcecode (s. o.) als Textdatei. Um einen Text für das EEPROM vorzubereiten, müssen die Bytes entsprechend den zu leuchtenden LEDs in einer Datei abgespeichert werden. Dazu ist ein Editor notwendig, der Hexwerte editieren und speichern kann. Beispielsweise HxD. In der Abbildung ist ein Smiley und der Text "Hello World" gespeichert. Diese Datei befindet sich ebenfalls im Download und ist standardmäßig installiert, wenn Sie einen vorprogrammierten ATtiny zusammen mit dem Bausatz erwerben. Am Anfang und am Ende sind Leerspalten eingefügt, damit der Text hinein und hinaus läuft.

Lauftext übertragen

Haben Sie eine Datei für den Lauftext erzeugt, muß diese auf den 8x8 Blinky übertragen werden. Dazu benötigen Sie einen Computer, eine 3 V TTL serielle Schnittstelle und ein Terminalprogramm, welches Hexwerte senden kann. Als Terminalprogramm eignet sich HTerm. Für die serielle Schnittstelle wird ein USB-Seriell-Adapter benötigt. Am besten eignet sich einer mit FTDI-Chip, da dann die Treiber meistens schon installiert sind. Den Adapter verbinden Sie mit dem PC (und installieren ggf. die Treiber). Dort wird eine virtuelle serielle Schnittstelle ("COM") eingerichtet. Im geräte-Manager der Systemsteuerung können Sie nachsehen, welcher COM-Port benutzt wird. Vom USB-Adapter muß der Anschluß TxD (Daten senden) mit dem Pin RxD (Daten empfangen) an der Stiftleiste des Blinky verbunden werden. Ebenso GND mit GND. Der Blinky wartet nach einem Reset oder dem Anlegen der Batteriespannung drei Sekunden auf eingehende Daten. Dies wird durch aufleuchten der einen LED unten rechts signalisiert. In dieser Zeit muß die Übertragung beginnen. Sobald alle Daten übertragen wurden (Datenendmarkierung) beginnt der Blinky mit der Ausgabe auf der Anzeige. Am einfachsten wird ein Reset ausgelöst, wenn der Anschluß Reset an der Stiftleiste kurz mit GND verbunden wird. Auf den ersten Exemplaren der Platine fehlt dieser dritte Pin noch. Dann kann ersatzweise kurz der Pin 1 (erster Pin an der Kerbe, der zur LED-Matrix weist) mit Pin 10 (gleiche Reihe, letzter Pin neben der Batterie) am IC verbunden werden, was ebenfalls ein Reset auslöst. P'tit USBTTL - FTDI USB zu TTL UART Adapter
  1. Schließen Sie den USB-Adapter an den PC
  2. Verbinden Sie den USB-Adapter mit dem Blinky
  3. Öffnen das Terminalprogramm
  4. Stellen Sie die Übertragunsparameter ein und wählen Sie den COM-Port. Es wird mit 8N1 (8 Bity, keine Parität, ein Stop-Bit) bei 2.400 Baud übertragen
  5. Markieren Sie im Hexeditor die Hexwerte (nicht die ASCII-Zeichen)
  6. Kopieren Sie den markierten Bereich in die Zwischenablage (Ctrl+c)
  7. Wenn Sie HTerm benutzen, stellen Sie im unteren Bereich im Auswahlfeld bei Type den Wert HEX ein.
  8. Fügen Sie dahinter in das EIngabefeld den Inhalt der Zwischenablage ein (Ctrl+v)
  9. Klicken Sie auf Connect (oben links). Die Schaltfläche verwandelt sich in Disconnect, was anzeigt, daß eine Verbindung zum USB-Adapter besteht.
  10. Klicken Sie mit der Maus in die Eingabezeile, in die Sie die Hex-Werte eingefügt haben
  11. Führen Sie am Blinky ein Reset durch
  12. Die eine LED leuchtet
  13. Sie haben jetzt drei Sekunden Zeit, um am PC die Eingabe-Taste (Return) zu drücken.
  14. Die Daten werden gesendet. In der Zeit leuchtet/blinkt die LED links unten.
  15. Anschließend startet die Anzeige der neuen Daten automatisch
  16. Sie können die Verbindungen trennen und die Programme beenden.

8x8 Editor Neu: Ich habe ein Programm geschrieben, das die Erzeugung des Lauftextes stark vereinfacht. Im Editor wird ein Zeichensatz geladen. Durch anklicken der Zeichen kann man den Text zusammenstellen. Anschließend kann der Text auch über die (virtuelle) serielle Schnittstelle übertragen werden. Laden und Speichern ist ebenfalls möglich. Der Font in der Datei charset.bin kann auch individuell angepaßt werden. Es müssen dort immer 5 Bytes für ein Zeichen binär angegeben werden. Download.