Guten Abend,
Leider sind meine elektronischen Kentnisse eher mau, deshalb hoffe ich
auf Anregungen/Hilfe.
Ich benutze einen Attiny13, programmiere in Assembler und möchte pro
Sekunde 8 zufällige Bytes erzeugen ( einmal das Ram vom Attiny13 voll
machen)
Ich hab jetzt schon einiges darüber gelesen, bin aber noch nicht so
wirklich weiter gekommen. Ich würde ungern ein LFSR benutzen, da ich
tatsächlich echte Zufallszahlen benötige. Die Möglichkeit eines schnell
laufenden Timers der durch eine Benutzereingabe gestoppt wird scheidet
leider auch aus, da es keine Eingabe gibt.
Der meiner Meinung nach beste Weg führt uber den Integriert ADC. Ich
hatte mir gedacht irgendein Rauschen einzufangen, das mit dem ADC zu
messen und dann von jeder Messung nur das unterste Bit zu benutzen. Kann
das so funktionieren? Und vorallem, wo kriege ich ein anständiges
Rauschen her?
vielen Dank für eure Hilfe
der Eumel
Den genzen RAM voll Zufall? Dafür braucht man auch keine
Programmierkenntnisse:
Strom aus -- 10 Sekunden warten -- Strom an: Voilà!
In 0 Zeilen Code :-))
Hallo,
such doch einfach mal nach Rauschquelle!
Dort wird eine Diode oder B/E-Strecke eines Transistors verwendet. Um
mit dem AD-Wandler zu messen musst die Spannung natürlich noch
verstärken. Alternativ würde sich auch der Analog-Comp. verwenden lassen
(??ähm hat der einen??) - der würde dann 1-Bit liefern.
Sascha
Johann L. schrieb:> Den genzen RAM voll Zufall? Dafür braucht man auch keine> Programmierkenntnisse:>> Strom aus -- 10 Sekunden warten -- Strom an: Voilà!
Ich möchte fast dagegen wetten. Ich denke nämlich, es wird immer
derselbe Wert in den Zellen stehen ($FF ?).
Da ich das aber genau wissen möchte, werde ich es mal gleich
ausprobieren (leerer Chip (ok, kein ATtiny13) und dann mal mittels JTAG
das RAM auslesen).
Auch wenn es nicht der ATtiny ist, sollten die Ergebnisse vergleichbar
sein ...
Gruß,
Thomas
Würde es denn vielleicht schon reichen den ADC mit einem zu hohen Takt
zu betreiben und z.b. nen Spannungsteiler mit nem LDR zu verwenden? Ist
dann das niedrigst Bit dann schon zufällig?
Wohl nicht.
Es stellt sich zwar irgendwas außerhalb der
Spezifikation ein - aber auch das kann sehr
regelmäßig sein...
Rauschquelle wie oben beschrieben ist
schon ein guter Ansatz. Einfacher gehts
kaum, wenns ECHTER Zufall sein soll.
Thomas T. schrieb:> Ich möchte fast dagegen wetten. Ich denke nämlich, es wird immer> derselbe Wert in den Zellen stehen ($FF ?).>> Da ich das aber genau wissen möchte, werde ich es mal gleich> ausprobieren (leerer Chip (ok, kein ATtiny13) und dann mal mittels JTAG> das RAM auslesen).
Also, JTAG war jetzt keine große Hilfe, stattdessen habe ich mir die
ersten vier Byte ($0100-$0103) auf einem LED-Display ausgeben lassen.
Heraus kamen nahezu immer die gleichen Folgen:
"$0100: 1F B7 62 D7" Einige Male hatte ich auch "$0100: 1F B7 62 97".
Zum Vergleich habe ich auch vier andere Bytes im SRAM getestet:
"$0120: A5 75 36 99", mit ein paar "$0120: A5 75 36 19" dazwischen.
Die Bytes sind zwar alle sehr zufällig, aber nach dem Einschalten ist
der Inhalt im Grunde sehr genau vorhersehbar.
"Device under Test" war ein AT90CAN128.
Gruß,
Thomas
moin
einfacher 24 bit generator ,sollte ausreichen um dein ram ohne
wiederholung vollzubekommen.Nach dem Init (seed) ,das unterprg. simpler
aufrufen , gibt jedesmal ne neue 24bit zufallszahl.Kann man schön im
AVR-Studio testen .
1
;RAND1 - RAND3 = ram oder Register
2
3
Init_Random: ;first time
4
ldi TEMP,$AA ;Init the random number generator
5
mov RAND1,TEMP ;since a 00,00,00 state will not
6
mov RAND2,TEMP ;progress.
7
mov RAND3,TEMP ;you can get a timer to pre load first time
Hmmmm, hab jetzt mal nach Rauschgeneratoren gesucht. Das gefundene hat
mich aber nicht wirklich überzeugt. Hat jemand von euch nen Schaltplan
für einen einfachen Rauschgenerator?
PS: Könnte man vielleicht auch was mit eine NE555 basteln?
Hi
>Hmmmm, hab jetzt mal nach Rauschgeneratoren gesucht. Das gefundene hat>mich aber nicht wirklich überzeugt. Hat jemand von euch nen Schaltplan>für einen einfachen Rauschgenerator?>PS: Könnte man vielleicht auch was mit eine NE555 basteln?
Dann kannst du auch gleich ein LFSR nehmen. Wozu soll das ganze
überhaupt dienen?
MfG Spess
Wofür brauchst du den Zufallsgenerator eigentlich??
Den NE555 an den Portpin hängen wäre noch ein anderer Ansatz.
Dann könnte man intern einen Timer laufen lassen, ohne Prescaler, und
mit dem NE555 einen externen Interupt auslösen, der dann das letzte
Timerbit ausliest und speichert.
Problem:
die Frequenz des 555 sollte möglichst ungenau sein, und selber schwingen
julian
Kurt schrieb:> Rauschquelle wie oben beschrieben ist> schon ein guter Ansatz. Einfacher gehts> kaum, wenns ECHTER Zufall sein soll.
Ist kein hochwertiger, "echter" Zufall.
Da muß man viel mehr Aufwand treiben. Einfach Diodenrauschen oder so 1:1
übernehmen ist nicht.
Sorry, dass ich mich nicht gleich gemeldet habe.
Das ganze soll ein Demonstrationsobjekt sein. Wenn die Zufallszahlen gut
sind, wird wohl fast nie ein Muster zweimal auftreten ( gibt immerhin
2^64 Kombinationen... )
Hiermit kann man recht guten, halbwegs echten
Zufall "für Anfänger" erzeugen.
UNECHT wird er durch schlechte Abschirmung.
Den Aufwand für Abschirmung vs. Echtheit muss
man halt für die Erfordernisse ermitteln.
Eumel schrieb:> Sorry, dass ich mich nicht gleich gemeldet habe.>> Das ganze soll ein Demonstrationsobjekt sein. Wenn die Zufallszahlen gut> sind, wird wohl fast nie ein Muster zweimal auftreten ( gibt immerhin> 2^64 Kombinationen... )
Um das abschätzen zu können, sollte man erst mal eine Analyse
durchführen, siehe
http://de.wikipedia.org/wiki/Geburtstagsparadoxon#Mathematische_Herleitungen
Die Wahrscheinlichkeit p, daß bei n Zufallszahlen aus dem
Wertevorrat B (hier wäre B=2^64) mindestens zwei gleiche enthalten
sind, ist
Nach Anwendung von Sterling und etwas Rumrechnerei kommt man dann zB zu
folgendem Ergebnis:
Damit die Wahrscheinlich für mindestens eine doppelte Zufallszahl p
übersteigt, genügen
Ziehungen (wobei diese Annäherung nur für kleine p gilt).
Z.B. genügen für eine 32-Bit Zufallszahl (also 4294967296 Wert) bereits
260000 Ziehungen, um die Wahrscheinlichkeit auf 1 Promille zu bringen
und 560000 Ziehungen, um die 1%-Marke zu reissen.
B geht noch nicht einmal linear in die Anzahl der Ziehungen ein
sondern nur zur Potenz 0.66.
Johann L. schrieb:> Z.B. genügen für eine 32-Bit Zufallszahl (also 4294967296 Wert) bereits> 260000 Ziehungen, um die Wahrscheinlichkeit auf 1 Promille zu bringen> und 560000 Ziehungen, um die 1%-Marke zu reissen.>> B geht noch nicht einmal linear in die Anzahl der Ziehungen ein> sondern nur zur Potenz 0.66.
Nachdem mir aufgefallen ist, daß ich die Entwicklunf für ln an einer
Stelle zu früh abgebrochen habe *rotwerd*, hab ich die Abschätzung
nochmals gemacht. Das Ergebnis:
Damit die Wahrscheinlich für mindestens ein Mehrfach-Vorkommen einer
Zufallszahl p übersteigt (bei B möglichen Zufallszahlen), genügen
Ziehungen (wobei diese Annäherung nur für kleine p gilt).
Z.B. genügen für eine 32-Bit Zufallszahl (also 4294967296 mögliche Wert)
bereits 3000 Ziehungen, um die Wahrscheinlichkeit auf 1 Promille zu
bringen und 9200 Ziehungen, um die 1%-Marke zu reissen.
B geht nich tlinear sondern lediglich als Wurzel in die Anzahl der
Ziehungen ein.
Oweh, T1 war falsch angeschlossen... hier die Korrektur.
Natürlich muss die BE-Diode von T1 im Durchbruch betrieben
werden, um Rauschen zu liefern.
Ansonsten wäre für auch mich ein LFSR die bevorzugte Lösung,
wenn es um stochastische DEMO-Anwendungen geht.
Der Vorteil dieser Rauschquelle ist, dass sie nicht bei jedem
Einschalten den gleichen Ablauf liefert. Auch ein > 100-Bit
breiter Pseudo-Zufallsgenerator braucht einen ZUFÄLLIGEN
Startwert, um nicht immer wieder den selben Ablauf zu liefern.
Mal ne doofe Frage zu diesen Schaltungen: Die funktionieren doch alle
nur mit deutlich mehr als 5V Vcc oder?
Die Durchbruchspannung der BE-Strecke beträgt ja bei den meisten
(Kleinsignal-)Transistoren 5V, korrekt?
Gibt es denn auch Lösungen die mit einer Versorgungsspannung von 5V
auskommen? Ich habe mal irgendwo was gelesen man könne z.B. auch das
"rauschen" der Bandgap-Reference von z.B. nem LM317 verwenden.
Wie würde sowas denn aussehen?
Bei 5 V wirds schwieriger.
Die Rauschschaltung oben würde vielleicht bis hinab zu
7 ..8 V funktionieren.
Band-Gap-Referenzen sind "leider" recht rauscharm.
Also keine gute Wahl.
Schau mal zu:
http://www.prolab.tu-berlin.de/projekte/discopixel/referate/ref-ausarbeitung-rauschen-reinsch.pdf
Dort wird (auf Seite 6) ein ICL7660 benutzt, um aus +5 V
eine Versorgung von +/-5 V zu generieren.
Die intern erzeugte Wandelfrequenz des ICL7660 könnte
aber ohne einen gewissen Glättungsaufwand den "Zufall"
etwas verwässern.
Ich habe vor Jahren fuer einen Texas Hold'em Server das Rauschen eines
abgedeckten CCD-Chips verwendet um "echte" Zufaellszahlen zu generieren.
Am PC hat man mit einer Billig-Webcam eine akzeptable Loesung. Jetzt
weiss ich nicht wie trivial das einlesen am µC ist. Evtl. reicht ja
schon ein analoges Videosignal (eines Kameramoduls) am ADC?
Volker