Laufende Welle mit acht LEDs
Elektronik-Labor
Projekte
Mikrocontroller PicoBasic
Wenn man die Helligkeit einer LED-Reihe passend steuert, entsteht der
Eindruck einer fortschreitenden Welle. Die Helligkeitsänderung sollte
sinusförmig sein. Dazu wird die Sinusfunktion in das RAM-Array
übertragen und dann laufend mit A = [B+) ausgelesen.
Wenn jede folgende LED einen Phasenwinkel von 360 Grad / 8 bekommt,
wird auf der Länge von acht LEDs gerade eine vollständige
Sinusschwingung dargestellt. Im Unterprogramm L2 wird dazu eine
Sprungweite von 32 verwendet, denn 8 * 32 ist 256, die Länge der
Tabelle. Der Phasenwinkel ist in D gespeichert und wird im
Hauptprogramm nach jedem Durchlauf aller acht LEDs um eins verschoben,
damit sich die Welle langsam fortbewegt.
Rem Welle
0x09FF Pdir = 255
Rem Sinus
0x21F4 Gosub L244:
L1:
0x0801 Pout = 1
0x2117 Gosub L2:
0x0802 Pout = 2
0x2117 Gosub L2:
0x0804 Pout = 4
0x2117 Gosub L2:
0x0808 Pout = 8
0x2117 Gosub L2:
0x0810 Pout = 16
0x2117 Gosub L2:
0x0820 Pout = 32
0x2117 Gosub L2:
0x0840 Pout = 64
0x2117 Gosub L2:
0x0880 Pout = 128
0x2117 Gosub L2:
0x3900 A = D
0x0201 B = 1
0x2A00 A = A + B
0x3800 D = A
0x2002 Goto L1:
L2:
Rem Sin-Winkel
0x3900 A = D
0x0220 B = 32
0x2A00 A = A + B
0x3400 B = A
0x3800 D = A
0x3A00 A = [B+]
0x211F Gosub L3:
0x4800 Return
L3:
Rem PWM
0x3600 C = A
L4:
0x2520 C*Goto L4:
0x0800 Pout = 0
0x3300 A = Not A
0x3600 C = A
L5:
0x2524 C*Goto L5:
0x4800 Return
PicoBasic kennt nur zwei PWM-Ausgänge, aber hier werden acht gebraucht.
Deshalb gibt es im Unterprogramm L3 eine Softwarelösung. Eine
Zählschleife bestimmt die in A übergebene Impulslänge. Dann wird
abgeschaltet, und eine zweite Zählschleife liefert die Zeit für den
Rest bis 256. Vollaussteuerung liefert in diesem Fall nur ein Achtel
der vollen Zeit, weil die LEDs nacheinander angesteuert werden müssen.
Die Helligkeit ist aber trotzdem noch ausreichend hoch.
Bei diesem Projekt habe ich zum ersten Mal ein Unterprogramm aus einem
anderen Unterprogramm heraus aufgerufen, und es funktioniert prima. Bei
der Entwicklung brauchte ich mehrere Versuche, bis die PWM-Frequenz
ausreichend hoch für einer flackerfreie Anzeige wurde und zugleich die
Bewegung der Welle ausreichend langsam war.
Einen groben Eindruck der PWM-Impulse an den acht Ausgängen zeigt der
Logik-Analysator im TestLab. Die zeitliche Auflösung reicht allerdings
nicht, um die Impulslänge genau darzustellen, und die sehr kurzen
Impulse werden überwiegend nicht gezeigt, weil die Abtastpunkte sie
meist verfehlen. Die PWM-Frequenz liegt bei ca. 70 Hz.
Elektronik-Labor
Projekte
Mikrocontroller PicoBasic