Zufallszahl Atmega16 mit Wertebereich

OP #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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.