Zufallszahl mit µC generieren

Hallo,

hat jemand eine Idee, wie man mit einem Microcontroler, der keinen Randomize-Befehl kennt, trotzdem eine Zufallszahl erzeugen kann ? D.h. wie kann man den Randomize Befehl „ausprogrammieren“ in einem µC ?

Vielen Dank für jeden Tipp
Franky

Hallo,

Standard ist die Formel von Lehmer:

number1=(a+c*number0) % m

where number0 is the previous number or the seed.
c should be an even integer not divisible by 3 or by 5
m should be 2^b (a bigger b is better)
a = 8*c(±)3

Anmerkung: das sind natürlich alles keine echten Zufallszahlen. Funktionen wie randomize() sind deterministisch.

Gruss Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

hallo.

hat jemand eine Idee, wie man mit einem Microcontroler, der
keinen Randomize-Befehl kennt, trotzdem eine Zufallszahl
erzeugen kann ? D.h. wie kann man den Randomize Befehl
„ausprogrammieren“ in einem µC ?

wenn er einen adc hat, könnte man irgendein rauschsignal auf den eingang geben und damit rechnen.
evtl. geht’s auch mit (mehreren) digitalpins, die du als eingang (ohne pull-widerstand) konfigurierst und einfach unbeschaltet läßt.

gruß

michael

Hallo,

number1=(a+c*number0) % m

sowas ähnliches machte auch der Zufallsgenerator im alten Apple ][. Wobei die Funktion bei jedem Tastendruck aufgerufen wurde. Was dazu führte, daß man, wenn man nach dem Einschalten jedesmal genau die gleichen Tasten gedrückt hat, ein entsprechendes Spiel auch jedesmal genau gleich ablief… :wink:
Man könnte sich den ‚seed‘, also den möglichst zufälligen Startwert aus der Netzspannung erzeugen, z.B. einen Zähler starten und bis zum ersten Nulldurchgang (oder das Unterschreiten eines Schwellwertes - also sowas wie ein 1Bit-A/D-Wandler) zählen lassen.
Gruß
Axel

Hallo Franky,

hat jemand eine Idee, wie man mit einem Microcontroler, der
keinen Randomize-Befehl kennt, trotzdem eine Zufallszahl
erzeugen kann ? D.h. wie kann man den Randomize Befehl
„ausprogrammieren“ in einem µC ?

Wie bereits beschrieben, brauchst Du eine Pseudo-Zufallsfunktion und einen zufälligen Startwert. Ein Startwert läßt sich z.B. aus einem Timer gewinnen, dessen Zählerstand (seit Reset) bei einem externen Ereignis genommen wird. Geeignete Ereignisse sind z.B. durch einen Benutzer gedrückte Tasten. Ungeeignet sind Ereignisse, die durch den Controller selbst verursacht wurden und deshalb u.U. in einem festen Zusammenhang mit dem Zählerstand des Timers stehen. Um die Wahrscheinlichkeit einer Wiederholung der Pseudo-Zufallsfolge gering zu halten, muß der Timer möglichst schnell zählen, am besten im Prozessortakt und der Zeitraum, in dem das Ereignis auftreten kann, möglichst groß sein.

Jörg