hi! ich hoffe jemand kann mir weiter helfen?!?! und zwar soll ich ein sensorspiel mit hilfe eines aduc boards entwickeln! das sensor spiel soll folgendermaßen funktionieren: ich habe 5 led's und 5 dazugehörige schalter bzw. taster! der zufallsgenerator soll nun einen wert ausgeben und die dazu gehörige led soll aufleuchten, dann bestätige ich den taster von der aufleuchtenden led.....dann soll die led wieder erlischen! danach läuft der zufallsgenerator wieder an....nun soll er die davor aufleuchtenede led nochmals anzeigen und dazu soll noch eine weitere von den 5 leds aufleuchten, die betätige ich nun auch wieder usw.!! der ablauf soll folgendermaßen sein: 1. der zufallsgenerator läuft und gibt dann einen wert aus 2. die zu dem wert gehörige led leuchtet auf 3. die led bestätige ich durch den dazugehörigen taster 4. der wert muss irgendwie gespeichert werden 5. led erlischt und zufallsgenerator läuft erneut an 6. zufallsgenerator stoppt und gibt den vorherigen wert nochmals aus und dazu soll er noch einen weiteren wert anzeigen 7. dann muss man wieder beide aufleuchteneden leds durch die dazugehörigen taster bestätigen 8. zufallsgenerator läuft erneut an 9. zufallsgenerator stoppt wieder und zeigt beide zuvor aufleuchtenden leds wieder an und dazu noch eine weiter led 10. die 3 leds bestätigen usw. nun stehe ich vor dem problem.....wie mache ich das??? ich hatte vielleicht gedacht, das rauschen eines transistors mit einzubinden, nur wie binde ich dann diesen transistor mit in das programm ein? oder gibt es vielleicht noch andere möglichkeiten?? ich hoffe ihr könnt mir helfen!! vielen dank schon einmal im voraus!! gruß patrick
dankeschön, das ist auf jedenfall schon einmal hilfreich.....nur wie lege ich die werte fest, wann welche led angeht und wie speicher ich den wert, damit ich ihn dann wieder ausgeben kann!! und an welcher stelle gebe ich den wart an die ports aus?
Wie dir bestimmt schon aufgefallen ist gehoert die Erzeugung von Zufall mit zu dem schwierigsten was man so machen kann in einem Prozessor wo nichts zufaellig ist. :-] Rauschen zu messen ist sicherlich moeglich, aber auch nicht ganz einfach, da du dann ja einen AD-Wandler brauchst, oder vielleicht die Zeit zwischen zwei Spitzenwerten messen musst. Da stellt sich dann die Frage ist deine externe Schaltung gut genug um wirklich zufaellig zu sein? Oder kommt es z.B zu einer Haeufung von bestimmten Zahlen? Ich wuerde bescheissen. :-) Es gibt pseudozufallszahlen auf Basis rueckgekoppelter Zaehler. Verwendet man z.B wenn man mit Zaehlern rauschen erzeugen moechte. Sowas wuerde ich programmieren. Dann hast du nur noch das Problem jedesmal einen anderen Startwert zu haben damit du nicht immer dieselben Zufallszahlen nach dem einschalten bekommst. Das wuerde ich z.b Loesen indem ich die Zeit nach dem einschalten bis zum ersten Tastendruck messe und damit den Generator einmal initialisiere. Olaf
Schau mal unter "rückgekoppelte Schieberegister", die sind mit FlipFlops einfach aufzubauen. Wenn man verstanden hat wie sie funktionieren kann man die Funktion leicht in Assembler nachprogrammieren.
Hagen hat in seiner Nokia 6100-Bibliothek auch eine Art Zufallgenerator programmiert, um das randomize das AVR-GCC zu ersetzen. Benötigt nur 72 Bytes und scheint sehr gut zu sein. Vielleicht kannst du das brauchen. Die Bibliothek ist in der Codesammlung. Gruß Elektrikser
Ja, und da oben schon Schieberegister angesprochen wurden, die Lib enthält ein 63Bit SG-LFSR. Das ist ein Shrinking-Generator Linear Shift Register. Also im Grunde ein Schieberegister das per Software realisiert wurde. Allerdings, eben von spezieller Form mit einer Periode von 2^63-1 Bits, ziemlich groß also. Lange Zeit wurden solche Register in der Kryptographie benutzt, neben den sehr guten statischen Eigenschaften als Zufallsgenerator. Die maximal machbare Sicherheit wären 126 Bit, d.h. die "Schlüssel" wären 126 Bit groß. Das SG-LFSR habe ich eigentlich nur deshalb programmiert weil die Zufallsfunktionen der RTL vom WinAVR ziemlich viel Code benötigen und wesentlich schlechtere Eigenschaften besitzen. Bindet man deren rand() Funktion ein so kann das schon 1Kb Code kosten. Die rand() Funktion benutzt einen LCG = Linear Congruental Generator, der wesentlich schlechtere statische Zufallseigenschaften als LFSRs besitzt und zudem nur eine maximale Periode von 2^32 Bits. (und er ist inperformanter). Gruß Hagen
Achso, und ganz wesentlich ist der Fakt das in den Sourcen schon 2x 1000 Polynome enthalten sind. Denn bei Schiftregistern, die ja im Galois Field gf(2) arbeiten ist es enorm wichtig das die benutzen Polynome = Abgriffspunkte in Hardware SRs, von spezieller Gestalt sind. Man kann also nicht beliebige Polynome benutzen, da ansonsten die maximale Periode nicht erreicht wird !! Nun, die Lib enthält 2000 zufällig gewählte Polynome die zudem noch verifiziert wurden so daß sie auch tatsächlich "irreduzible" = nicht reduzierbar == teilerfremd sind. Gruß Hagen
Vielleicht kann man diesem Fall einfach die Zeit messen zwischen LED aufleuchten und Taste drücken. Da diese Zeit höchstwahrscheinlich immer unterschiedlich ist, hat man eigentlich schon einen wunderbaren Zufallswert. Es müsste dafür jedoch ein Schritt zu Beginn eingefügt werden (LED aufleuchten lassen und Taster drücken und das Ganze als Bereitmeldung vom Benutzer deklarieren), um den Zufallsgenerator zu starten. Gruß Thorsten
Also wenn es möglich ist das du Daten im EEPROM speichern kannst dann würde ich nur einen guten Pseudo Zufallsgenerator empfehlen. Den Seed, bei meinem LFSR die Register A & S, müssten dann aber im EEPROM gespeichert sein. Beim Programmieren der MCU müssten dann diese Seeds mit einem einmaligem Zufallswert beschrieben werden. Beim LFSR mit 2^63-2 Bits Periode ist es sehr sehr unwahscheinlich das man als Mensch an die Grenze stösst und Wiederholungen erhält. ABER, und das ist der wesentlichste Unterschied zu jedem Hardware RNG, die statistischen Eigenschaften dieses Zufallsstromes sind mathematisch beweisbar. Bei einem Hardware RNG ist dies längst nicht der Fall ! Die Idee die individuelle Affinität des Menschens beim Drücken der Taster zu benutzen ist sehr gut. Es ist zwar auch nur Pseudo-Zufall, aber er ist sehr individuell und somit sehr schwer reproduzierbar. Allerdings würde ich die Dauer der Tasterereignisse in den Seed des mathematischen Pseudo-Zufallsgenerators einbauen/einrechnen. D.h. der Seed zB. des LFSRs wird durch die gemessene Zeit zwischen den Tasterereignissen leicht manipuliert. Somit hättest du dann immer noch die Vorzüge des PRNG, eben seine bewiesene Funktionalität, erhalten. Gruß Hagen
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.