-
Das Problem bei rand() egal welcher Sprache ist, das intern immer ein Algo da ist, der eine Reihe willkürlicher Werte aufbaut. Dadurch das dieser Algorythmus gleich ist, ist die Reihe gleich. Deshalb wird gerne bei den meisten Hochsprachen auf dem PC als "zufälliger Startwert" die Systemzeit benutzt. Dadurch startet man immer woanders. kann man nachprüfen wenn man die Uhr per code vorher immer auf die gleiche Zeit stellt. Im Roboter ist das ein Prob. DCF77 Uhr anschließen udn darüber den Startpunkt laufen lassen oder GPS? Ist auch nicht immer der gleiche! *gg*
-
Hi,
ich hab hier irgendwo ne Bauanleitung liegen. Da wird mit dem Rauschen einer Germaniumdiode ne Zufallszahl erzeugt.
Hat glaubich auch nur ne Diode, nen Op und ein paar Rs gebraucht, bei Interesse such ichs raus, kann bei meiner Ordnung aber ein bischen dauern.
-
Hi Thorsten,
mach Dich doch bitte mal auf die Suche ;)
Wuerd das gern mal sehen...
Danke !!!
-
Ok, kann aber wirklich ein zwei Tage dauern, war in irgendeiner Zeitschrift und davon hab ich ne Menge 8-[
-
eine möglichkeit ist wenn man z.B. nach einem Tastendruck eine Zufallszahl braucht, einfach wärend des wartens auf den Tastendruck eine Variable ständig hochzählen und nach dem drücken der Taste den Wert der Variable als "Zufallszahl" hernehmen.
Diese Art eine zufällige Zahl zu generieren funktioniert zwar nicht in allen Fällen jedoch ist es eine sehr einfache Variante eine zufällige Zahl zu generieren.
mfg
-
Vielleicht hilft das hier ein Stück weiter, das Thema wurde hier auch schon mal aufgeworfen :-)
https://www.roboternetz.de/phpBB2/ze...ht=zufallszahl
zum Thema Rauschen:
http://www.umnicom.de/Elektronik/Sch...generator.html
-
So hab den Artikel gefunden und werd ihn mal im Laufe des Tages scannen wenn ich an den Rechner komme.
Der Aufwand ist doch etwas höher als ich in Erinnerung hatte.
Der Generator ist für die Serielle Schnittstelle und liefert Zufallszahelen mit bis zu 100kbit/s.
-
Naja, auch wenn der Aufwand evtl. etwas größer ist könnte sich das manchmal schon lohnen...
Denn da ja hier das Rauschen eines realen Bauteils zur Berechnung herangezogen wird, erhält man auch echte Zufallszahlen.
-
Hi,
ich versuche auch grad, (pseudo-)Zufallszahlen in meinem AVR GCC-Programm zu verwenden - nur leider klappts nicht.
Mein Vorgehen:
#include <stdlib.h>
#define RAND_MAX 0x05 //ich brauche Zahlen zw. 0 und 5. Müsste so gehen, oder?
[..]
srand(TCNT0); //PRNG mit timerwert initialisieren
int x;
x=rand();
[..]
Nur leider krieg ich damit keinen integer zwischen 0 und 5... fällt jemandem spontan ein Fehler auf?
Danke
Raphael
-
Nö, so kann das nicht gehen. RAND_MAX ist ein #define in der stdlib.h! Das ist vorgegeben durch den rand-Algorithmus.
Wenn du RAMEND umdefinierst bekommt dein AVR ja auch net mehr Speicher ;-)
Möglich wäre so was:
x = rand() % 6; // modulo n liefert Werte 0...n-1
::EDIT::
Und sich ne seed auf die Art zu besorgen geht zwar, aber es ist wohl immer die gleiche, falls Timer0 nicht von externen Signalen abhängt (Tastendruck, Takt, etc)