Nimm halt den Inhalt des nicht Initialisierten RAM's als SEEDZitat von Dane
Der ist übrigens jedesmal verschieden.
Hallo,
ich bräuchte für eine Schaltung eine Zufallszahl, die aber schon ab Power-on-Reset wirklich zufällig sein soll.
Das Problem beim RND-Befehl ist ja, dass er immer die selben Zahlen liefert, wenn der selbe SEED-Startwert verwendet wird.
Wenn ich jetzt einen Timerwert verwenden würde, wären es ja wieder die selben Zahlenfolgen.
Ich hab mit der Forum-Suche was von einem Rauschgenerator oder zwischenspeicherin im EEPROM gelesen, das ist mir aber zu aufwändig bzw. zu epromvernichtend.
Meine Idee: einen ADC-Port "in der Luft" hängen lassen und den ermittelten Wert als Startwert verwenden.
Würde das funktionieren oder sind die Ports dafür zu niederohmig, wenn sie als ADC arbeiten?
Oder einfach einen Digitalport ohne Pullup in der Luft hängen lassen und jedes mal wenn er high ist, eine Variable hochzählen und diesen Wert dann verwenden.
Was haltet Ihr von meinen zwei Vorschlägen?
MfG, Dane
Nimm halt den Inhalt des nicht Initialisierten RAM's als SEEDZitat von Dane
Der ist übrigens jedesmal verschieden.
Hallo,
das hört sich interessant an.
Kannst Du mir auch mit einem Beispielcode weiterhelfen?
Das wär super!
greetz, Dane
Hmm, schau mal in der Bascom Doku nach ... oder hier im Wiki.
Grüße,
da Hanni.
Hallo,
im Wiki hab ich leider nix gefunden und in der Hilfe zum RND-Befehl steht nur was von der Verwendung des Timers als SEED.
Dane
Du kannst ja auch den aktuelle RND() Wert im EERAM speichern und beim nächsten Start von dort weiterrechnen lassen (als SEED)
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Als Seed kann man bei AVR sehr gut uninitialisierten RAM-Inhalt verwenden, der nach einem PowerDown-RESET gut streut. Und selbst wenn es nur ein externer Reset oder so war, sind das RAM als Seed gut brauchbar.
Aus dem RAM-Inhalt berechnest du eine Seed, und zwar bevor dein Programm das RAM und die Variablen initialisiert hat, und speicherst das in einer Variablen, die nicht initialisiert wird (also nicht von deinem Programm mit ini-Werten besetzt wird).
schont den EEPROM
Für C beschrieben ists hier, muss nur noch nach Bascom "übersetzt" werden...
Disclaimer: none. Sue me.
Lesezeichen