Laufende Welle mit acht LEDs                        

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




https://youtube.com/shorts/pYLZClmkrAA


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