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