Ein Zufallsgenerator
Elektronik-Labor
Projekte
Mikrocontroller PicoBasic
Ein Zufallsgenerator ist eine große Aufgabe, und deshalb ist es
eine Herausforderung, das mit PicoBasic zu schaffen. Das Programm
basiert auf der Methode eines rückgekoppelten Schieberegisters.
Es beginnt mit einer willkürlich gewählten Zahl A = 59, die in einer
Schleife, beginnend bei L1: verarbeitet wird. Zuerst werden alle Bits
um eine Stelle nach links geschoben. Danach werden zwei Bits besonders
ausgewertet. Wenn Bit 7 = 1 ist, wird Bit 0 gesetzt. Und wenn Bit 4 = 1
ist wird das Bit 0 invertiert. Am Schluss wird noch 1 addiert, was sich
als günstig erwiesen hat, um die Länge der Zufallssequenz zu
vergrößern.
REM Zufall
0x09FF Pdir = 255
0x013B A = 59
L1:
0x3100 A = A Shl 1
0x3600 C = A
0x1280 A = A AND 128
0x0200 B = 0
0x220A If A=B Goto L2:
0x3700 A = C
0x1301 A = A OR 1
0x3600 C = A
L2:
0x3700 A = C
0x1210 A = A AND 16
0x0200 B = 0
0x2212 If A=B Goto L3:
0x3700 A = C
0x0201 B = 1
0x3000 A = A XOR B
0x3600 C = A
L3:
0x3700 A = C
0x2800 A = A + 1
0x3600 C = A
0x4200 Print A
0x19FA Delay ms = 250
0x3700 A = C
0x2002 Goto L1:
In einer zweiten Version sollte ein zufälliges Blinkmuster entstehen.
Dazu wird das jeweils letzte Bitmuster in D zwischengespeichert und mit
der Zufallszahl Exclusiv-Oder-verknüpft, wobei jeweils die Bits
invertiert werden, die in der Zufallszahl gerade 1 sind. Das Ergebnis
kann sich sehen lassen. Mit dem Auge ist jedenfalls keinerlei
Regelmäßigkeit mehr zu finden.
REM Zufall2
0x09FF Pdir = 255
0x013B A = 59
L1:
0x3100 A = A Shl 1
0x3600 C = A
0x1280 A = A AND 128
0x0200 B = 0
0x220A If A=B Goto L2:
0x3700 A = C
0x1301 A = A OR 1
0x3600 C = A
L2:
0x3700 A = C
0x1210 A = A AND 16
0x0200 B = 0
0x2212 If A=B Goto L3:
0x3700 A = C
0x0201 B = 1
0x3000 A = A XOR B
0x3600 C = A
L3:
0x3700 A = C
0x3400 B = A
0x3900 A = D
0x3000 A = A XOR B
0x4500 Pout = A
0x4200 Print A
0x19FA Delay ms = 250
0x3700 A = C
0x2002 Goto L1:
Das Blinken erinnert an Computer der Anfangszeit, die man manchmal in
sehr alten Filmen sehen kann. Damals wurde anscheinend der Zustand
einer Rechenmaschine laufend über Glühlämpchen angezeigt. Allerdings
habe ich mich immer schon gefragt, ob irgendein Techniker daraus
irgendwas erkennen konnte.
Hat jemand noch eine andere Lösung, wie man einen Zufallsgenerator
möglichst perfekt und mit wenigen Zeilen in PicoBasic realisieren kann?
Ich würde mich freuen, wenn einer die Herausforderung annimmt,
PicoBasic lädt und es versucht. Für manchen kann das Erinnerungen an
den ersten Computer wecken, den man vielleicht in Assembler oder sogar
noch mit Lochkarten programmieren musste. Aber auch Erfahrungen mit der
TPS können hier nützlich sein.
Elektronik-Labor
Projekte
Mikrocontroller
PicoBasic