Forum: Mikrocontroller und Digitale Elektronik Zufallszahlen für PIC in ASM?


von Johannes (Gast)


Lesenswert?

Hi,
wie kann ich mit einem PIC 16F630 (Pseudo-) Zufallszahlen erzeugen? Am 
besten ohne äussere Beschltung also nur durch Zuhilfenahme von Assembler 
code?
Ich habe schon gesucht aber nichts gefunden.

...warscheilich weil es unmöglich ist?
Oder?

von Axel H. (axelh)


Lesenswert?

Hi,

> wie kann ich mit einem PIC 16F630 (Pseudo-) Zufallszahlen erzeugen? Am
> besten ohne äussere Beschltung also nur durch Zuhilfenahme von Assembler
> code? Ich habe schon gesucht aber nichts gefunden.
> ...warscheilich weil es unmöglich ist?
> Oder?

Eher weil du nicht Suchen kannst. Du willst doch nicht ernstaft 
behaupten, dass Goolge unter "Pseudozufallszahlen" nichts findet, was 
sich verwerten lässt, oder? :)

Du wird halt immer das Problem mit dem Startwert des PRNG haben, der 
muss irgendwo her kommen und sollte immer ander sein - sonst komme immer 
die gleichen Zahlen raus.

Axel

von Johannes (Gast)


Lesenswert?

Danke schon mal Axel. Wie man Zufallszahlen generell erzeugt ist mir 
schon klar. Auf PCs unter C ist es ja auch gar kein Problem. Aber 
soetwas für PICs zu machen in Assembler wobei man nur 35 verschiedene 
Befehle zur Verfügung hat...

"
Du wird halt immer das Problem mit dem Startwert des PRNG haben, der
muss irgendwo her kommen und sollte immer ander sein - sonst komme immer
die gleichen Zahlen raus.
"

Das war ja gerade meine Frage. Wobei du auch nicht so toll den Plan 
hast, oder? Wenn man schon immer andere (zufällige) Startwerte hat, dann 
hat man ja sein Ziel schon erreicht. Aus einer zufälligen Zahl eine neue 
Zufällige Zahl zu generieren ist meines erachtens nach sinnlos. Es sei 
den man generiert eine ganze Reihe.

Also die Frage ist immernoch: wie bekommt man einen zufälligen Startwert 
hin?

von Axel H. (axelh)


Lesenswert?

> Das war ja gerade meine Frage. Wobei du auch nicht so toll den Plan
> hast, oder? Wenn man schon immer andere (zufällige) Startwerte hat, dann
> hat man ja sein Ziel schon erreicht. Aus einer zufälligen Zahl eine neue
> Zufällige Zahl zu generieren ist meines erachtens nach sinnlos. Es sei
> den man generiert eine ganze Reihe.

Aus einer zufälligen Zahl eine neue zufällige Zahl zu generieren ist gar 
nicht so trivial, wie das erscheint. Daran sind schon viele gescheitert, 
denn am Ende waren die Zahlen dann bei weitem nicht so zufällig, wie sie 
sein sollten.

> Also die Frage ist immernoch: wie bekommt man einen zufälligen Startwert
> hin?

Mal anders geftagt: was willst du denn eigentlich machen. Letztlich 
kommt es sehr drauf an, wie gut die Zufallszahlen werden sollen und was 
schlimmstenfalls passiert, wenn jemand tatsächlich drauf kommt, welche 
Zahl als nächstes erzeugt wird.

Wenn du einen guten PRNG-Algorithmus hast, dann kann der Startwert pro 
Benutzung auch einfach um eins hochgezählt werden, ohne dass das den 
Zufallszahlen gross schadet. Setzt halt voraus, dass man ein 
EEPROM/FLASH oder so hat, wo man den Wert immer wieder Ablegen kann. 
Dann muss das ganze nur ein einziges einmal initialisiert werden (und 
ggf eine Runden laufen, damit keinr mehr weiss, bei welchem Wert man 
jetzt ist) und ab da wird das Ding bis zum Lebensende Zufallszahlen 
erzeugen können.

Ohne EEPROM/FLASH könntest du z.B ab dem Start einen Zähler laufen 
lassen, der dann als Startwert verwendet wird, wenn ein gewisses 
Ereignis eintritt. Kann man z.B gut machen, wenn man auf "Knopfdruck" 
eine Zufallszahl brauchst.

Also, sag mal, was du eigentlich machen willst....

von Johannes (Gast)


Lesenswert?

Hi Axel,
danke für deinen Beitrag. Das mit dem PRNG-Algorithmus klingt schon 
interessant. Ich werde mal danach suchen. Die Frage ist wie kompliziert 
dieser denn ist. So viel Rechenleistung und Speicher hat der PIC nicht. 
EEROM ist aber vonhanden.
Der Grund des ganzen ist wie immer meine Neugier.

von Axel H. (axelh)


Lesenswert?

Hi,

Viele PRGNs basieren letztlich auf einem rückgekoppelten 
Schieberegister. Und das bekommst jeder einfacher uC problemlos hin. 
Wenn du natürlich den sichereren ANSI-DES-RNG nehmen willst, dann wird 
es auswendiger...

von Ralf M. (Firma: Titel) (ego)


Lesenswert?


von Frank L. (hermastersvoice)


Lesenswert?

bei http://mondo-technology.com/ ist unter den Tipps auch ein Beispiel 
zu finden.

bye

Frank

von Tcf K. (tcfkat)


Lesenswert?

Yo, entweder einen Random-Seed nehmen (Zähler, RTC), oder den letzten 
Wert irgendwo onchip in einem NV-Bereich schreiben (maximale Anzahl 
Schreibzyklen beachten).
Wie Axel schon schreibt, der Aufwand hängt mit dem Anspruch zusammen...

von Johannes (Gast)


Lesenswert?

Danke an euch alle. Ich denke ich mache es wie in den links beschrieben!

Ciao

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.