Zufallszahl Atmega16 mit Wertebereich

#3405777
Lesenswert?

Hallo erstmal,

ich benötige für ein Programm von mir eine berechnete Zufallszahl. Hab 
bereits gelesen das es natürlich keine echten Zufallszahlen gibt, da die 
CPU schliesslich alles berechnet. Nun benötige ich in meinem Programm 
eine Zufallszahl in dem Bereich von 1-4. Ist dies möglich und dann auch 
mit halbwegs gleicher verteilung?

Ich programmiere den uC in C.

Danke schon mal und Grüße
#3405864
Lesenswert?

Das Problem der rand()-Funktion ist, dass Du nach jedem Einschalten 
genau die gleiche "Zufallsfolge" erhälst. Das kann man ändern, indem man 
den Zufallsgenerator einmalig mit srand() und einer echten Zufallszahl 
initialisiert.

Eine echte Zufallszahl zu erhalten, ist aber gar nicht so einfach. Eine 
Möglichkeit wäre, mehrere ADC-Messungen an einem freien Pin 
durchzuführen und das Rauschen in den niederwertigsten Bits zu einer 
Zufallszahl zusammenzusetzen.

Falls Du irgendwelche Eingaben von außen (Tastendrücke, Kommandos von 
serieller Schnittsteller, Sensoren) hast, kannst Du diese Daten auch zum 
Erzeugen von (Initialisierungs-)Zufallszahlen nutzen. Zum Beispiel die 
Zeit zwischen zwei Tastendrücken per Timer stoppen und an srand() 
übergeben.
#3405883
Lesenswert?

Fabian O. schrieb:

> Eine echte Zufallszahl zu erhalten, ist aber gar nicht so einfach. Eine
> Möglichkeit wäre, mehrere ADC-Messungen an einem freien Pin
> durchzuführen und das Rauschen in den niederwertigsten Bits zu einer
> Zufallszahl zusammenzusetzen.

Kann man natürlich machen.
Man kann sich aber auch ganz einfach den zuletzt benutzten seed im 
EEPROM merken und beim nächsten Einschalten ganz einfach den seed um 1 
erhöhen, damit srand aufrufen um den Generator etwas vorzugeben und den 
neuen seed wieder im EEPROM speichern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren