Umlaufende Laufschrift - Rotierendes LED-Display mit AVR

Werbung
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
Herunterladen