Zufallszahl beim ATmega8

#3995269
Lesenswert?

Hallo,

ich möchte aktuell für ein Flackerlich eine Zufallszahl auf dem ATmega8 
generieren lassen. "rand();" ergibt immer nur die selbe zahl. Ich habe 
es mit srand(); versucht, doch dort braucht man anscheinen einen 
#include <time.h> für. Ich bekomme allerdings immer den Fehler: time.h: 
No such file or directory.

Was kann ich machen

Danke im Vorraus

Gruß
pralle_n
#3996957
Lesenswert?

Nick Pralle schrieb:
> wenn ich "Wert = srand(unsigned int seed);" schreibe

Was soll das denn auch sein? So sieht kein Funktionsaufruf in C aus. 
Vielleicht solltest du deine C Kenntnisse nochmal verbessern bevor du 
dich an Mikrocontroller wagst. Bei einem Mikrocontroller ist natürlich 
die Frage woher man überhaupt den Startwert für den 
Zufallszahlengenerator nehmen soll, da es kaum Parameter gibt, die sich 
bei jedem Start unterscheiden. Dazu hat Gerald ja schon eine Funktion 
verlinked, die einen Wert aus dem nicht initialisierten SRAM generiert. 
Damit kannst du dann srand füttern: srand(get_seed()); Danach sollte 
rand() dann unterschiedliche Werte ausgeben
#3997016
Lesenswert?

Sebastian V. O. schrieb:
> Nick Pralle schrieb:
>> wenn ich "Wert = srand(unsigned int seed);" schreibe
>
> Was soll das denn auch sein?

Was erwartst du?
Das ist halt immer das Problem mit den "Ich brauch kein C Buch, ich les 
mir alles irgendwie aus dem Web zusammen" Leuten. Kennen ihre 
Programmiersprache nur zu 15% und von dem was sie wissen ist dann auch 
noch mindestens die Hälfte falsch.
#3997029
Lesenswert?

Sebastian V. O. schrieb:

> die Frage woher man überhaupt den Startwert für den
> Zufallszahlengenerator nehmen soll, da es kaum Parameter gibt, die sich
> bei jedem Start unterscheiden.

Eine andere Idee wäre es, ganz einfach bei jedem Start einen um 1 
erhöhten Seed zu nehmen, den man sich aus dem EEPROM holt bzw. um 1 
erhöht wieder im EEPROM abspeichert.
#3997038
Lesenswert?

@ Ralf G. (ralg)

>Für'n Flackerlicht wäre mir sowas zufällig genug:

>uint8_t rnd()
>{
>  static uint8_t r;
>  r = r * 17 + 13;
>  return r;
>}

Denkst du die Leute, welche den C-Compiler bzw. die libc geschrieben 
haben sind doof? Die wissen schon, wie man eine PSEUDO-Zufallsfolge 
erzeugt. Man muss halt wissen, was das PSEUDO bedeutet.

Es wird mit gleichem Startwert IMMER die gleiche, vorhersagbare 
Zahlenfolge ausspucken, auch wenn diese sehr lang ist.

Man braucht, um wenigsten einen halbwegs zufälligen Punkt in der 
Zahlenfolge als Startpunkt festzulegen, eine ansatzweise ECHT zufällige 
Zahl. Diese kann man auf vielen Wegen erzeugen. ADC-Rauschen, Dauer von 
Tastendrücken, Echtzeituhr, Temperatur, Wasserstand von Timbuktu, etc.
#3997144
Lesenswert?

Falk Brunner schrieb:
> Denkst du die Leute, welche den C-Compiler bzw. die libc geschrieben
> haben sind doof? Die wissen schon, wie man eine PSEUDO-Zufallsfolge
> erzeugt. Man muss halt wissen, was das PSEUDO bedeutet.

Hmm. Das liest du da raus? :-/

Nick Pralle schrieb:
> ich möchte aktuell für ein Flackerlich eine Zufallszahl auf dem ATmega8
> generieren lassen.

Und wenn's ihm gefällt, will er's kleiner. Ein Tiny13 ist mit 'rand()' 
halb voll!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren