PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bessere Zufallszahlen in Bascom



stefan_Z
02.01.2010, 15:50
Ich stehe vor dem Problem, dass ich einen Ablauf recht zufällig laufen haben möchte und an verschiedenen Stellen im Programm RND() nutze.

Dooferweise scheint es so, als ob Bacom stets gerade, ungerade, gerade, ungerade usw. würfelt.
Falls man nur aus zwei Optionen wählt kommt man so u.U. erst immer nur mit Option 1 raus.

Hat jemand noch Tricks/Tipps?
___rseed bringts nicht.

Besserwessi
02.01.2010, 17:43
Für den Startwert des Zufallgeneratorsgenerators muß man man auf eine Echte Zufallszahl zurückgreifen. Das kann z.B. der AD-wandler oder ggf. ein Wert aus ICP Register von Timer 1 sein.

Wenn die interne RND() Funktion von BASCOM nicht gut genug ist, könnte man eine Pseudozufallszahlenfunktion auch von Hand Programmieren. Beispiele solle man finden, wenn auch meistens in C.

PICture
02.01.2010, 18:03
Hallo!

@ stefan_Z

Als bisher bester hardware Zufallszahlgenerator hat sich bei mir in der Praxis eine unentprellte Taste bewiesen.

MfG

Besserwessi
02.01.2010, 19:49
@picture
Wenn man einen Taster hat, dann geht am besten den Timer1 auf voller Geschwindigkeit laufen lassen, und dann die ICP Funktion über den Taster zu nutzen. Die Zeit, wann der Taster zuletzt Signal gegeben hat ist halt recht zufällig.

Beim Prellen hat man oft nur einige wenige Pulse, selten mehr als 10.

PICture
02.01.2010, 20:16
@ Besserwessi

Du hast völlig recht mit der Impulszahl und wenn man grössere Zahlen braucht, könnte man jedes "Prellen" als Ziffer gewünschter Zahl nehmen.

Ich habe es schon vor zig Jahren verwenndet, wo noch keine µCs mit Timers gegeben hat. Mann könnte auch anstatt einer Taste von µC gesteuertes Kontakt von z.B. Reedrelais verwenden.

MfG

stefan_Z
02.01.2010, 21:32
hmm das soll ja alles recht häufig und auch nicht sooo zufälig sein - ein Isotop werde ich mir nicht zulegen ;-)
Die besseren Algos sehen aber schon echt komplex aus muss man sagen, werde mir das letzte bit vom ADC mal ansehen...

Thomas$
02.01.2010, 21:33
oder den ad compare eingang nehmen bissel kabel das fängt auch rauschen ein und den zweiten eingang mit dreh poti in die rausch stellung drehen

Besserwessi
02.01.2010, 22:11
Die standard methode für echten Zufall ist das Rauschen einer Zenerdiode oder eines Transistors Verkehrt herum. Einfach nur ein Draht, fängt wahrscheinlich 50 Hz ein, und ist damit nicht zuverlässig. So eine echte Zufallgröße verwendet man selten allein, sondern , meistens in kombination mit einer Pseusozufallszahl. Das rauchen sorgt für echten Zufall, und die Pseudozufallszahl sorgt dafür das so etwas wie Gleichverteilung usw. gut hinbekommt.

Natalius
03.01.2010, 14:03
Der RND-Algorithmus in Bascom wurde kürzlich verbessert - updaten auf 9.8.

PICture
03.01.2010, 16:04
Hallo!

So wie der Besserwessi schon geschrieben hat, rein Softwaremässiger Zufallsgenerator ist nicht möglich, weil ein Prozessor selber nicht zufällig arbeitet, wenn sein Programm logisch aufgebaut ist. Deswegen alle rein softwaremässige Algorithmen können nur Pseudozufallszahlen erzeugen und für echte Zufallszahlen ist ein Signal von "aussen" notwendig.

Den Vorschlag vom Besserwessi, ein ADC an weissem Rauschen, finde ich optimal.

MfG