Forum: Mikrocontroller und Digitale Elektronik Zufallsgenerator mit einem AT90S8515


von Somnatic (Gast)


Lesenswert?

Sooo .. mal wieder eine diffizile Frage .. Konnte im Forum mit der
Stichwortsuche nach Zufall nix gewünschtes finden, also frage ich
selbst mal.

Angenommen ich hätte gerne einen Zufallsgenerator, der auch wirklich
zufällig ist, wie würde ich sowas machen.
Grundbedingungen:
* Kostensparend (am besten kein externes Bauteil)
* CPU Time - sparend (bin eh schon beinahe am Limit :) )

Was mir bis jetzt in den Sinn kam:
* ADC Rauschen verwenden


Hat sowas schonmal jemand gemacht, oder gibts evtl. andere Vorschläge ?

von Thorsten (Gast)


Lesenswert?

Echte Zufallswerte wirst du so nicht bekommen, höchstens sg. Pseudo
Zufallszahlen. Guckst du hier: http://www.agner.org/random/

Um echte Zufallszahlen zu bekommen, benötigst du auch einen richtigen
Zufallsprozess. Z. B. das Rauschen von Halbleiterbauelementen. Dies ist
aber sehr klein, muß also verstärkt werden und somit sind externe
Komponenten notwendig.

Thorsten

von Somnatic (Gast)


Lesenswert?

habs fast befürchtet :)

gewünscht sind eben sehr wohl RICHTIGE Zufallszahlen ...

eine Killeralternative wäre ja auch eine RTC anzuhängen und aus dem
Wert über mathematische Verfahren eine Pseudo Zufallszahl zu
generieren, die wenigstens nicht bei jedem Start gleich ist ..

Kennst du vielleicht eine Schaltung, wie ich das von dir angegebene
Halbleiterrauschen verstärken könnte ?
Mein Elektronikwissen ist nicht allzu fundiert ... Verstärkung eines
Transistors kenn ich zwar, aber ehrlich gesagt wüsste ich nicht ganz wo
anfangen ...

Was mir im Kopf herumgeistert:
* Das Rauschen am ADC Eingang nutzen, von dem Wert einen Sinus bilden,
und vom Sinus die 10te Stelle nehmen .. oder irgendsowas :)

Nur das mit dem Rauschen und dem Verstärken macht mir noch etwas Sorgen
..

Bzgl. Performance: Eigentlich ist es egal wie lange die Berechnung
dauert, da sie nur etwa 1 mal / Minute benötigt wird ...

von Matthias (Gast)


Lesenswert?

Hi

PRNG plus irgendeinen Wert der nicht immer gleich ist (z.B. aus einem
Timerwert bei einem Tastendruck bzw. einem sonstigen asynchronen
Ereignisses) Reicht als Zufallswert fast immer völlig aus.

Matthias

von Martin Götzenberger (Gast)


Lesenswert?

Hallo!

Wenn du von jeder ADC-Messung nur das LSB verwendest, sollte das
Ergebnis schon recht zufällig sein, auch ohne riesigem Aufwand an
externer Schaltung.

servus,
Martin

von Matthias (Gast)


Lesenswert?

Hi

das wage ich zu bezweifeln. Unter Umständen mißt du die 50Hz vom
benachbarten Trafo. Und das dann mit 50Hz abgetastet gibt ne schön
zufällige Reihe von Nullen :-)

PRNG mit einem halbwegs zufälligen Initialwert ist schon der richtige
Weg.

Matthias

von Somnatic (Gast)


Lesenswert?

das blöde ist, dass ich nichts habe, was irgendeine User - Interaktion
erfordert ...

das Programm selbst läuft immer genau gleich ab, und damit dem nicht so
ist -> Zufallsgenerator ...

von Ingo Henze (Gast)


Lesenswert?

Ich denke mal auch, das die Kombination aus
Pseudo-Zufallszahlengenerator mit einem Startwert aus dem "zappeln"
des niederwertigsten Bits vom ADC aureichend zufällig ist.
Kommt natürlich immer darauf ann, was man damit machen will, und in
welchem Umfeld es eingestzt werde soll.
Notfalls kann man sich zusätzlich den letzen Startwert irgendwo merken,
um zu vermeiden, daß zweimal der selbe Wert beim Starten gesetzt wird.

Gruß
Ingo

von Martin Götzenberger (Gast)


Lesenswert?

Hallo!

Nochwas:
Den ADC natürlich möglichst schnell machen. In den Datenblättern steht
ja schon, daß man die Genauigkeit mit einer langsamen Wandlung
verbessern kann, also auch umgekehrt..
Aber am besten schaust du die Ergebnisse der Wandelung trotzdem einfach
mal an, und kannst dann anhand der Werteverteilung selbst abschätzen, ob
eine Zufällige Verteilung wahrscheinlich oder unwahrscheinlich ist..

servus,
Martin

von Somnatic (Gast)


Lesenswert?

also das mit dem ADC werde ich mal testen:

* möglichst schnell
* LSB auswerten (evtl. die letzten 2) ...

mal schauen :)

danke für den Input :)

von Josef (Gast)


Lesenswert?

Die C - rnd Funktion läuft recht gut. Am Besten 10 Werte sammeln und
dann dividieren. Ein Tastendruck wäre natürlich die beste Lösung.

SG Josef

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.