PicoBasic und flimmernde Sterne                            

Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic         




Ich arbeite gerade an einem Projekt mit einem preiswerten Pdauk-Controller, bei dem ich acht LEDs mit einem schwachen Flimmern ansteuern will, das an flimmernde Sterne erinnern soll. Wichtig ist auch, dass alles für den geplanten Batteriebetrieb sehr stromsparend wird. Ich hatte schon verschiedene Ideen dazu, aber die Entwicklung ist aufwendig, weil ich bei jedem Versuch das Padauk-Programmiergerät einsetzen muss. PicoBasic dient hier zur vereinfachten Entwicklung eines Vor-Prototyps. So kann ich mit weniger Aufwand ein geeignetes Verfahren entwickeln, das am Ende relativ leicht auf den Padauk-Controller übertragen werden kann. Das MiniC der Padauk-IDE ist ähnlich einfach gehalten wie PicoBasic, deshalb passen beide gut zusammen.

Zuerst hatte ich einen Weg versucht, der mit einer einfachen Zufallsfunktion und Schiebebefehlen arbeiten sollte. So hatte ich das schon mal meinen Zufallsprogrammen probiert. Der Versuch lief aber irgendwie ins Leere. Dann habe ich mit der verbesserten Zufallsfunktion weitergemacht, die Günther Zivny vorgeschlagen hatte.

              REM Zufall3
              REM G. Zivny
0x09FF  Pdir = 255
              L1:
0x0283  B = 131
0x2A00  A = A + B
0x3400  B = A
0x3900  A = D
0x2A00  A = A + B
0x4500  Pout = A
0x4200  Print A
0x3800  D = A
0x3500  A = B
0x1964  Delay ms = 100
0x2001  Goto L1:

Das Programm liefert ein starkes, zufälliges Flackern. Aber das Flimmern von Sternen ist sehr viel schwächer ausgeprägt. Die Idee war dann, dass ich zusätzlich alle Ports für eine etwas längere Zeit einschalte. Das Flackern macht dann nur einen kleinen Teil der Gesamthelligkeit aus. Weil insgesamt eine geringe Helligkeit das Ziel war, muss alles in einer Schleife laufen, die mit rund 10 ms wiederholt wird. Die relative Einschaltdauer liegt dann in der Größenordnung 0,1%, was mit sehr effizienten LEDs voll ausreicht.

0x4500  Pout = A
0x1801  Delay µs = 1
0x08FF  Pout = 255
0x180A  Delay µs = 10
0x0800  Pout = 0

Die weiteren Versuche haben dann gezeigt, dass das Flimmern noch zu schnell war. Die Lösung war eine weitere Schleife, in der jede berechnete Zufallszahl mehrfach benutzt wurde.

0x030A  C = 10
              L2:
0x4500  Pout = A
0x1801  Delay µs = 1
0x08FF  Pout = 255
0x180A  Delay µs = 10
0x0800  Pout = 0
0x190A  Delay ms = 10
0x2507  C*Goto L2:

Im Endergebnis kann ich nun die Helligkeit, die Tiefe der Helligkeitsmodulation, die Geschwindigkeit der Helligkeitsänderungen und die gesamte Schleifenzeit getrennt einstellen.  Insgesamt muss man deutlich unter 20 ms bleiben, sonst wird ein regelmäßiges Flackern wahrgenommen.

              REM Flimmern
0x09FF  Pdir = 255
              L1:
0x0283  B = 131
0x2A00  A = A + B
0x3400  B = A
0x3900  A = D
0x2A00  A = A + B
0x030A  C = 10
              L2:
0x4500  Pout = A
0x1801  Delay µs = 1
0x08FF  Pout = 255
0x180A  Delay µs = 10
0x0800  Pout = 0
0x190A  Delay ms = 10
0x2507  C*Goto L2:
0x3800  D = A
0x3500  A = B
0x1905  Delay ms = 5
0x2001  Goto L 1:









Elektronik-Labor  Projekte  Mikrocontroller  PicoBasic