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
Nick Pralle schrieb: > Ich habe es mit srand(); versucht, doch dort braucht man anscheinen einen > #include <time.h> für. Nein. srand() ist im selben Header wie rand(), nämlich <stdlib.h>.
Hier: http://rn-wissen.de/wiki/index.php/Zufallszahlen_mit_avr-gcc Nutze die Funktion getseed und übergebe sie srand. Timer kannst du nur bei vorhandener RTC nutzen.
Moin, danke erst einmal. Jetzt möchte ich die Zufallszahl einer Variable über gebn, aber wenn ich "Wert = srand(unsigned int seed);" schreibe bekomme ich immer folgenden fehler: Error 1 expected expression before 'unsigned' 49 19 Zufall Wie bekomme ich es sonst hin eine Zufallszahl einer Variable zuzuordnen. Danke und Gruß pralle_n
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
Für'n Flackerlicht wäre mir sowas zufällig genug:
1 | uint8_t rnd() |
2 | {
|
3 | static uint8_t r; |
4 | r = r * 17 + 13; |
5 | return r; |
6 | }
|
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.
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.
@ 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.
Und wofür brauchst du für ein Flackerlicht einen "halbwegs zufälligen Startpunkt"? Du kannst immer denselben Seed nehmen, das merkt kein Mensch.
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!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.