praxis mikrocontroller Umlaufende Laufschrift Rotierendes LED-Display mit AVR-Controller Von Steffen Sorge Der Bau eines “Abi-Denkmals” war der Anlass für diese pfiffige Entwicklung, die es ermöglicht, mit nur acht blauen LEDs eine um 360 Grad umlaufende Laufschrift zu erzeugen. Ein sparsameres Groß-Display kann man sich kaum vorstellen… Die Idee für den Bau eines solchen Displays entstand beim Brainstorming über den Bau eines so genannten „AbiDenkmals“. Dabei geht es um die Realisierung eines originellen Objekts aus Anlass des Abiturs. Eine Aufgabe, die an der damaligen Schule des Autors traditionell von den E-Technikern übernommen wurde. Eine Anregung waren dabei Wecker, die nach einem ähnlichen Prinzip funktionieren. Diese preiswerten FernostProdukte zeigen allerdings nur die Uhrzeit und keinen Text. Der erste Prototyp war schon nach einem Tag folgendermaßen realisiert: Auf einer kleinen Holzleiste wurden acht LEDs aus der Bastelkiste, ein Schalter zur Synchronisation der Textanfänge, ein AT90S2313, eine 9-VBlock-Batterie und noch ein bisschen Kleinkram montiert. Die Holzleiste wurde mit der Achse eines kleinen Gleichstrommotors verbunden und so in Rotation versetzt - und nach ein bisschen 88 Programmierarbeit zeigte das Display auch schon das Wort „Hallo“ an. Dieser erste Prototyp (ganz im Stil des ELEKTOR-Workshops, Anm.d.Red.) hatte aber noch einige Nachteile: •die LEDs waren viel zu dunkel die Lebensdauer des Schalters er• schien begrenzt (er schaltet bei jeder Motordrehung) die rotierende Batterie war auch • nicht der Weisheit letzter Schluss… Aber Probleme sind nun mal dazu da, gelöst zu werden. Als Erstes wurden ultrahelle blaue LEDs mit 3500 mCd beschafft. Als Nächstes wurde das Schalterproblem durch einen Hallschalter aus einem alten Drucker gelöst. Die Batterie wurde durch eine Stromversorgung über einen Schleifring ersetzt. Und schließlich musste auch der AT90S2313 einem ATmega8 weichen… Ein Controller für acht LEDs Wie der Schaltplan (Bild 1) zeigt, besteht die Schaltung eigentlich nur aus einem Mikrocontroller (IC1), der acht LEDs steuert und mit einem Hallsensor (IC3) verbunden ist. Der Controller benötigt an externen Bauteilen nur einen 16-MHz-Quarz (X1) mit zwei Bürdekondensatoren (C4 und C5). Als Spannungsregler dient der altbewährte 7805 (IC2). Da der Mikrocontroller nicht genug Strom für die kräftig gepulsten LEDs liefern kann, erfolgt die Ansteuerung über die Transistorstufen T1 bis T8. Da die rotierenden acht LEDs ein aus acht Bildzeilen aufgebautes Bild „schreiben“ (allerdings nicht von links nach rechts, sondern 360 Grad umlaufend), muss der Mikrocontroller mit einem „Bildimpuls“ synchronisiert werden. Diese Aufgabe übernimmt der Hallschalter (IC3), der seinen Ausgangspegel ändert, so bald er sich in einem Magnetfeld befindet (also in der elektor - 12/2006 +5V 100n 100n D7 D8 D9 R1 R2 R3 R4 R5 R6 R7 R8 56 Ω 47µ 25V D6 56 Ω C3 D5 56 Ω C2 D4 56 Ω C1 D3 56 Ω ≈ 12V D2 56 Ω 1N4007 56 Ω D1 56 Ω IC2 7805 T1 7 21 +5V 23 24 1k2 R17 1 25 26 27 28 +VS IC3 Q 3 14 TLE4905L 15 GND 16 2 AREF T2 20 VCC AVCC PD0(RXD) IC1 PD1(TXD) PC0(ADC0) PD2(INT0) PC1(ADC1) PD3(INT1) PC2(ADC2) PD4(XCK/TO) PC3(ADC3) PD5(T1) PC4(ADC4/SDA) PD6(AIN0) PC5(ADC5/SCL) PD7(AIN1) ATmega8 PB0(ICP) PB3(MOSI/OC2) PB1(OC1A) PB4(MISO) PB2(SS/OC1B) PB5(SCK) PC6(RESET) GND XTAL1 8 9 3 4 5 6 11 12 13 330 Ω 330 Ω 330 Ω 330 Ω 330 Ω 330 Ω 330 Ω 330 Ω R9 R10 R11 R12 R13 10 22 T3 T4 T5 R14 T6 R15 R16 T7 17 T8 18 19 1 XTAL2 AGND X1 C4 27p 2 8x BC548 K1 C5 16MHz 27p 060014 - 11 Bild 1. Die Schaltung besteht im Wesentlichen aus einem AVR-Controller, der acht LEDs steuert und mit einem Hallsensor (IC3) verbunden ist. Nähe eines Magneten). Ohne Feldeinfluss ist sein Ausgang „High“, bei Annäherung an einen Magneten geht er auf „Low“. Dieser Pegelwechsel startet den Bildaufbau, den die Software im Mikrocontroller übernimmt. Software Der ATmega8 ist ein AVR-Controller von Atmel, der zur Gattung der RISC-Controller (mit reduziertem Befehlssatz) zählt. Das Programm für die Laufschrift wurde aber nicht in Assembler geschrieben, sondern in dem bekannten BASCOM-AVR-Basic. Die mit ausführlichen Kommentaren versehene Software kann von der ELEKTOR-Website frei heruntergeladen werden (Datei 060014-11.zip). Das Programm erzeugt aus dem im Controller gespeicherten Text kleine Einzelbilder mit Textfragmenten. Diese Textfragmente werden nun in Spalten 12/2006 - elektor umgerechnet und zu einer definierten Zeit auf den LEDs ausgegeben. Durch die Drehung des Motors entsteht so der Eindruck eines auf einen Zylinder geschriebenen Textes. Der Controller kann maximal 255 Zeichen für die Laufschrift aufnehmen. Diese Zeichen werden im Array “Instring” gespeichert, das drei Elemente (drei Textabschnitte) enthält, die nacheinander angezeigt werden. Die Ausgabe der Zeichen wird durch den schon erwähnten Hallschalter synchronisiert, der auch die Information liefert, ob sich der Motor dreht (wenn der Motor steht, sind alle LEDs dunkel). Die Länge des über das “Display” laufenden Textes hängt vom Kreisradius der rotierenden LEDs, also von der Länge des Dreharms ab. Der auf den Fotos gezeigte Aufbau arbeitet mit einer Textlänge von 30 Zeichen. Im Programm läuft eine Endlos-Schleife, die durch den Hall-Schalter synchronisiert wird und fortlaufend 30 Zeichen ausgibt. Das Programm kann folgende Zeichen ausgeben: Großbuchstaben von A bis Z inklusive Umlaute (Ä, Ö, Ü), Leerzeichen, Frage- und Ausrufezeichen, Punkt, Komma und Bindestrich. Für jedes Zeichen wurde eine Subroutine programmiert, man kann daher leicht Zeichen selbst hinzufügen oder ändern. Eine Subroutine besteht einfach aus mehreren Schreibbefehlen für Port D, die die LEDs steuern. Auf jeden Schreibbefehl folgt eine kurze Pause durch eine Warteschleife. Jeder Schreibbefehl erzeugt eine Spalte des betreffenden Zeichens, das aus mehreren solchen Spalten mit jeweils acht Bildpunkten besteht. Man kann also ein Zeichen sehr einfach auf kariertem Papier “entwerfen” und die Spalten von links nach rechts in Bytes umsetzen. Wenn man sich die Warteschleifen (Subroutine ‘Wa’) im Quellcode wegdenkt, kann man recht gut erkennen, wie ein Zeichen aussieht. Zum Beispiel: 89 praxis mikrocontroller Bild 2. Blick auf den rotierenden Arm mit der Controller-Platine. Sub A Portd = Portd = Portd = Portd = Portd = Portd = Portd = Portd = Wa Wa End Sub Bild 3. Anordnung der acht LEDs am Ende des Rotors. on (ATmega8-16PU) verwendet wird, gibt es weder SMDs noch sonstige Problemfälle. Die Widerstände R9…R16 müssen an den Nennstrom der LEDs angepasst werden. Man kann sie einfach als Vorwiderstände an 5 V berechnen. Beim Musteraufbau ergab sich ein Wert von 56 Ω. Als Aufbauhilfe kann man Der letzte Schreibbefehl hat das Platinenlayout und den immer den Wert „0“, um die Bestückungsplan des Autors LEDs auszuschalten. Die nebst Stückliste ebenfalls von Wartezeit der Subroutine der ELEKTOR-Website her„Wa“ muss auf die Motorunterladen. Allerdings muss drehzahl abgestimmt werman dabei beachten, dass den, indem man verschiedie im Bestückungsplan verdene Werte ausprobiert, um wendeten Anschlussbezeichein Optimum zu finden. nungen im Schaltplan (Bild Bild 4. Die Stromversorgung der rotierenden Schaltung erfolgt über einen Schleifring. 1) nicht eingetragen sind beDie Wiedergabe beginnt mit ziehungsweise auch abweiden ersten 30 Zeichen des chen. Elektrisch entspricht ersten Textabschnitts in Instring. Nach die Platine aber dem Schaltplan und vier Motorumdrehungen (überwacht ist die (von 30 abweichende) Anzahl lässt sich im Zweifelsfall entsprechend durch die Variable Laufer1) wird der der auf dem „Display“ sichtbaren Zeikontrollieren. Text um ein Zeichen weitergeschoben chen an zwei Stellen anzupassen. Es wurde eine längliche, an die Ab(die Startposition des Textes wird in Bei Drehzahländerung ist die Pixellänmessungen des rotierenden Arms an“Laufer“ überwacht). Wird das Ende ge (Subroutine Wa) anzupassen. gepasste Platinenform gewählt und die des ersten Textabschnitts erreicht, Die Textlaufgeschwindigkeit (mit der LEDs auf einer kleinen separaten Plawird der nächste Textabschnitt geder Text wandert) kann angepasst tine vorne am Arm und übereinander wählt (Variable Strz). Am Ende des in einer Zeile montiert (siehe Fotos). werden. dritten Textabschnitts wird wieder mit Um die 5-mm-LEDs auf einer normaDie Anzahl der Texte kann verändert dem ersten Textabschnitt begonnen. len 2,54-mm-Raster-Platine aneinander werden (erfordert aber einen Controller reihen zu können, muss das LED-Gemit mehr Speicher). Wenn man Parameter wie Drehzahl häuse an zwei gegenüber liegenden und Kreisradius der umlaufenden LEDs Seiten etwas abgeflacht werden. Die Schaltungsaufbau stark variiert, müssen im Programm LED-Platine wird über ein 9-adriges nur einige kleine Änderungen vorgeFlachbandkabel mit der anderen PlaDie Schaltung lässt sich relativ leicht nommen werden: tine verbunden. Die Anoden der LEDs anhand des Schaltplans aufbauen. Da Bei einem anderen Radius (Armlänge) auch für den ATmega8 die DIL-Versiwerden miteinander und mit +5 V, die 90 &B11000000 &B00110000 &B00101110 &B00100001 &B00101110 &B00110000 &B11000000 &B00000000 elektor - 12/2006 Kathoden mit dem zugeordneten Vorwiderstand (R9…R16) verbunden. D2 (mit R1 verbunden) ist auf der Platine die oberste LED, D9 (mit R8 verbunden) ist die unterste LED. Wenn man die LED-Zeile verkehrt herum anschließt (D9 oben, D2 unten), steht auch die Schrift Kopf. Programmierung Der Download 060014-11.zip enthält eine .bas, eine .hex und eine .bin-Datei. In der .bas Datei befindet sich der Sourcecode in „Bascom“. Die .hex oder die .bin Datei lässt sich direkt in den ATMega8 flashen und ist dann lauffähig. Mann erhält dann den vom Autor programmierten Demo-Text als Laufschrift angezeigt. Wenn man einen eigenen Text programmieren möchte, benötigt man Bascom. Damit öffnet man die Datei Schrift.bas und ändert den Inhalt des Arrays INSTRING. Jetzt muss der neue Sourcecode nur noch mit F7 kompiliert werden. Nach dem Anlegen der Betriebsspannung (9…12 V) an die Schaltung kann der Controller programmiert werden. Dazu verbindet man die Programmieranschlüsse (K1 im Schaltplan) über ei- nen geeigneten Programmer (z.B. über PonyProg) mit dem PC und flasht die Datei Schrift.bin oder Schrift.hex in den Chip (Fusebits auf 16 MHz extern umstellen!). Wenn man zum Compilieren die kostenlose BASCOM-AVR DEMO 1.11.8.3 verwenden möchte, muss man die Textlänge beschränken und darauf verzichten, das INSTRING-Array mit drei Texten zu füllen, da die Demoversion nicht mehr als 4 KB Code compiliert. Mechanik Als „Rotor“ wird ein etwa 50 cm langer Arm aus Alublech verwendet. In der Mitte des Armes befestigt man eine kleine Buchse, die mit der Motorachse elektrisch leitend verbunden sein muss. An das Motorgehäuse (!) wird nun die Masseleitung angeklemmt. Oben auf dem Motorgehäuse wird ein Schleifring aus (nicht mit Fotolack beschichtetem) Platinen-Basismaterial angebracht und mit der Plus-Leitung der Spannungsquelle verbunden. Am Rotor-Arm befestigt man über dem Schleifring eine kleine Kohlebürste, die elektrisch vom Aluminiumblech des Arms isoliert sein muss. Ebenfalls am Motorgehäuse wird nun noch ein Ma- S E L B S T B AU -W E GW E I S E R • Bauteile: Bauteile und Bauteilzusammenstellungen sind im Fachhandel erhältlich. Im Anzeigenteil von Elektor findet man regelmäßig Anbieter, die zu Elektor-Projekten Materialsätze oder Bauteilesätze zusammenstellen und auch Spezialbauteile liefern können. Ein alphabetisches Inserentenverzeichnis ist in jeder Elektor-Ausgabe am Heftende (vorletzte Seite) zu finden. Die Serviceseite(n) in der Heftmitte bieten eine Übersicht über Platinen und Software. Wegen der Bestimmungen der Postzeitungsordnung dürfen Bezugsinformationen zu aktuellen Projekten erst im nächstfolgenden Heft veröffentlicht werden, aus dem gleichen Grund sind die Serviceseite(n) nicht in allen Ausgaben enthalten. Das bedeutet aber nicht, daß Platinen, Software und Bauteile ebenfalls erst verspätet oder nicht lieferbar sind. • Ohm und Farad: In den Stücklisten werden große und kleine Widerstände und Kondensatoren mit folgenden Angaben für Faktoren versehen: p n µ m = Pico = Nano = Micro = Milli = 10-12 = 10-9 = 10-6 = 10-3 = ein Billionstel = ein Milliardstel = ein Millionstel = ein Tausendstel k = Kilo M = Mega G = Giga = 103 = 106 = 109 So bald Spannung anliegt und der Arm rotiert, sollte der umlaufende Text auf dem „Display“ zu sehen sein – so wie auf dem Foto am Artikelanfang… (060014e) PS. Der Autor hatte nicht nur mit seinem „Abi-Denkmal“, sondern auch beim Abitur Erfolg und studiert inzwischen Elektrotechnik/Informationstechnik an der FH Westküste in Heide. Kontrollieren Sie nochmals kritisch alle Lötstellen, einerseits auf gute Verbindungen (silbrig glänzend sollen sie sein, nicht matt und grau), andererseits auf überschüssiges Lötzinn und eventuell Lötzinnspritzer, die Leiterbahnschlüsse verursachen können. Angegebene Gleichspannunsmeßwerte (siehe Schaltplan und eventuelle Texthinweise) sollen mit einem hochohmigen (digitalen) Multimeter überprüft werden. Toleranzen bis zu 10 % sind normalerweise noch zulässig, größere Abweichungen deuten auf Fehler hin. Alle Korrekturen und relevanten Hinweise werden als “Nachlese” veröffentlicht. Tips, Tricks und ergänzende Informationen, die sich aus Leserkontakten ergeben, sind auch in “Readers’Corner” zu finden. • Farbcode: Der Wert von Widerständen wird durch Farbringe wie folgt angegeben: = Tausend = Million = Milliarde Die Einheiten (Ω für Ohm bei Widerständen, F für Farad bei Kondensatoren) werden nur dann angegeben, wenn keine Faktorenangabe erfolgt (Ω bei Widerständen kleiner 1 kΩ und größer 99 mΩ, z.B. 999 Ω oder 0,1 Ω). Ansonsten steht die Angabe des Faktors an der Stelle des Kommas bei der Wertangabe. Beispiele: 3k9 (= 3,9 kΩ = 3900 Ω) 4µ7 (= 4,7 µF = 0,0000047 F) Wenn nicht anders angegeben, werden immer Widerstände mit max. 5 % Toleranz und min. 1/3 W Belastbarkeit und Kondensatoren mit min. 50 V Spannungsfestigkeit verwendet. • Bauhinweise: Beim Bestücken von Platinen beginnt man am besten immer mit den kleinsten passiven Bauteilen. Daher zuerst die Drahtbrücken, Widerstände und kleine Kondensatoren bestücken, danach IC-Fassungen, Relais, Elkos und Steckverbinder. Empfindliche Halbleiter kommen zuletzt an die Reihe. • Löten: Geeignet ist ein Lötkolben mit 15 bis 30 Watt mit feiner Spitze. Nur Elektronik-Lötzinn (60/40) mit Flußmittelkern verwenden. Anschlußdrähte der Bauteile durch die richtigen Platinenbohrungen stecken, etwas umbiegen und abkneifen. Die beiden zu verlötenden Stellen erhitzen, und Lötzinn hinzufügen. 1 bis 2 Sekunden warten, bis das Zinn gut fließt und Lötkolbenspitze wegnehmen. Halbleiter, ICs und kleine Platinenlötaugen nicht zu stark erhitzen! Lötzinn kann wieder entfernt werden, indem man Lötsauglitze mit der heißen Lötkolbenspitze auf die Stelle mit dem zu entfernenden Lötzinn drückt. • Fehlersuche: Funktioniert die Schaltung nicht? Als erstes kontrolliert man die Bestückung im Vergleich mit Bestückungsplan, Schaltplan und Stückliste. Besonders auf die Bestückung der Drahtbrücken achten, die nur im Bestückungsplan angegeben sind. Sind alle Bauteile an der richtigen Stelle und auch richtig herum eingesetzt? Beachten Sie diesen Punkt besonders bei IC-Fassungen, Dioden, Elkos und Transistoren. Stimmt die Belegung von Anschlußpunkten auf der Platine, wie Anschlüsse für Betriebsspannung und Schalter etc.? 12/2006 - elektor gnet befestigt, der den an passender Stelle am Arm montierten Hallschalter bei jeder Undrehung mit seinem Magnetfeld „streift“ und damit aktiviert. Die Platine wird nun auf dem Arm montiert (möglichst so, dass keine Unwucht entsteht). Zur Stromversorgung verbindet man den Masse-Anschluss der Platine mit der Buchse (auf der Motorachse) und den Plus-Anschluss mit der Kohlebürste. Eine eventuell noch vorhandene Unwucht des Arms muss durch Auswuchten beseitigt werden. Jetzt kann man die Spannungsquelle (Steckernetzteil 9 bis 12 V) mit dem Schleifring (Plus) und dem Motorgehäuse (Masse) verbinden. Die Stromaufnahme der Schaltung ergibt sich im Wesentlichen aus der Summe der LEDStröme, dazu kommt dann noch die Stromaufnahme des Motors, wenn er vom gleichen Netzteil versorgt wird. Farbe schwarz braun rot orange gelb grün blau violett grau weiß gold silber ohne 1. Ring Ziffer 1 2 3 4 5 6 7 8 9 - 2. Ring Ziffer 0 1 2 3 4 5 6 7 8 9 - 3. Ring Nullen 0 00 000 0000 00000 000000 x0,1 x0,01 - 4. Ring Toleranz ±1 % ±2 % ±0,5 % ±5 % ±10 % ±20 % Beispiele: braun-rot-braun-gold: 120 Ω/5 % gelb-violett-orange-gold: 47 kΩ/5 % • Eigene Entwicklungen: Eigene Schaltungsentwickungen und Entwicklungsideen können Sie uns jederzeit zusenden. Fürs erste genügt der (lesbare) Schaltplan mit ein paar begleitenden Worten zum Kennenlernen. Wenn Ihre Einsendung für Elektor interessant ist, senden wir Ihnen ein Honorarangebot. Für die weitere Ausarbeitung sind dann natürlich Unterlagen auf Diskette (Schaltung, Platine, Text) sehr willkommen. 91