Hallo Zusammen, ich hätte mal eine Frage zum Auslesen des ADCL bei einer ADC Wandlung. Ich möchte zur Erzeugung einer Zufallszahl das niederwertigste Bit als Rauschsignal verwenden. Hierzu gibt es auch einige Beispiele im Internet, deren Abfrage so if (ADCL & (1<<1)) ... oder so aussieht if (ADCL & 1) ... Von der Syntax her is das ja das gleiche! (oder?) Die Frage die mich beschäftig ist: Müsste sich die Abfrage nicht auf das "Bit 0" beziehen, wenn ich das "niederwertigste" Bit verwenden möchte? also: if (ADCL & (1<<0)) ... Danke für eure Antworten. zander
Hallo, (1<<1) heißt schiebe die "1" einmal nach links, also 1 * 2 = 2 = b0010 ! und bitte lies mal für die Atmel-Welt nach, wann Du bei Zugriff auf ADCL ein Ergebnis erhälst. :-)
zander schrieb: > Von der Syntax her is das ja das gleiche! (oder?) Nein. (1 << 1) ist 2. http://www.mikrocontroller.net/articles/Bitmanipulation Und ADCH muss immer gelesen werden. mfg.
Danke für die Aufklärung. Also ist es falsch, dass ich mit if (ADCL & (1<<1)) ... das niederwertiste Bit lese (was ich öfters gelesen habe) Mit ... if (ADCL & (1<<0)) ... schiebe ich somit die 1 auf die "0te-Stelle", was gleichbedeutend ist mit ... if (ADCL & 1) ... und ich somit das niederwertigste Bit auslese! zander
Geht es Dir zwei zufällige Zustände, also 1 oder 0? Dann sollte doch if(ADCH % 2) gehen, oder?
Am einfachsten ist es wohl, direkt ADC in eine 16 Bit Variable zu lesen und dann ein x & 1 zu machen. Dann muss man über den 16 Bit Registerzugriff nicht nachdenken. gruß cyblord
zander schrieb: > Ich möchte zur Erzeugung einer Zufallszahl das niederwertigste Bit als > Rauschsignal verwenden. Hast du da auch mal beispielsweise über einen Rauschgenerator in Software nach gedacht?
Wilhelm Ferkes schrieb: > zander schrieb: > >> Ich möchte zur Erzeugung einer Zufallszahl das niederwertigste Bit als >> Rauschsignal verwenden. > > Hast du da auch mal beispielsweise über einen Rauschgenerator in > Software nach gedacht? Was ist denn das? Wie willst du mit Software ein nicht-deterministisches Rauschen erzeugen? Oder meinst du einen PRNG? Kleiner HW-Rauschgenerator am ADC ist doch DIE Möglichkeit einfach und billig an gute Zufallszahlen zu kommen.
cyblord ---- schrieb: > Was ist denn das? Wie willst du mit Software ein nicht-deterministisches > Rauschen erzeugen? Oder meinst du einen PRNG? Kleiner HW-Rauschgenerator > am ADC ist doch DIE Möglichkeit einfach und billig an gute Zufallszahlen > zu kommen. Keine Sorge, das funktioniert schon. Ich machte bereits auf einem µC statistische Auswertungen zu Würfelaugen, ohne den ADC zu beanspruchen. Mein implementierter Rauschgenerator 32 bit wiederholt ein Bitmuster etwa an einem ganzen Tag, wenn er jede Millisekunde betätigt wird, und ich vermenge es mit einem System-Timer, der auch bis unendlich zählt, länger als ich leben werde. Um der Sache analytisch auf den Grund zu kommen, ist indessen schwieriger. Aber die Ergebnisse sind schon gut. Ich wollte auf den ADC verzichten, weil ich dort hätte Anbauteile an ein Board bauen müssen.
Wilhelm Ferkes schrieb: > Keine Sorge, das funktioniert schon. Ich machte bereits auf einem µC > statistische Auswertungen zu Würfelaugen, ohne den ADC zu beanspruchen. Klar es gibt auch gute PRNGs. Trotzdem bleibt es aber halt Pseudo. > Mein implementierter Rauschgenerator 32 bit wiederholt ein Bitmuster > etwa an einem ganzen Tag, wenn er jede Millisekunde betätigt wird, und > ich vermenge es mit einem System-Timer, der auch bis unendlich zählt, > länger als ich leben werde. Das ist aber trotzdem deterministisch. D.h. bei Kentniss aller Startparameter und der Laufzeit können alle Zufallszahlen berechnet werden. Das gilt zwar ebenfalls für einen HW-Rauchgenerator, aber dort ist die genaue Kentniss aller Parameter real unmöglich. Vor allem weil die dort nicht diskret sind. In einem Controllerprogramm hat man aber nur diskrete Werte. gruß cyblord
cyblord ---- schrieb: > Trotzdem bleibt es aber halt Pseudo. Egal, wenn es geht. Du kannst mir ja anhand von Beispielen belegen, daß es nicht geht. Sicher ist das alles deterministisch, und man versucht das beste. Es gibt ja am PC auch eine Menge Spiele, die auch nicht einen ADC benutzen. Was hatte ich da mal: Auch Kniffle, mit 5 Würfelaugen. So wie ich es jetzt an einem µC gestalte. Danach kommt der Lottozahlengenerator, wenn Kniffle fertig ist.
Also, zander, man kann da was machen. Auch noch einen zweiten Timer starten, der asynchron zum ersten läuft, und auch einen Rauschgenerator bedient. Experimentiere mal damit. Laß dir Zahlen über den UART an ein Terminal-Programm ausgeben, z.B. eine Probe mit 1000 Elementen, lese die in z.B. Excel ein, und schau, was du damit machst. Bei mir gibt es kein Excel, aber OpenOffice. Geht aber genau so gut.
Wilhelm Ferkes schrieb: > cyblord ---- schrieb: > >> Trotzdem bleibt es aber halt Pseudo. > > Egal, wenn es geht. Du kannst mir ja anhand von Beispielen belegen, daß > es nicht geht. Wie gesagt, es gibt gute PRNGs, also was soll die Frage? Und Mathematiker wirst du wohl auch nie mit so einer Aussage ;-) Da hättest du ja die Riemannsche Vermutung schon bewiesen.... Allerdings kommt bei einem Microcontroller der Umstand dazu, dass dieser meist keine mitlaufende RTC mit Kalender hat, wie ein PC. Soll heißen, wenn ich einen guten PRNGs im PC, via Uhrzeit (d.h. Microsekunden seit 1.1.1970) Seede, dann ist dieser Wert sicher einmalig. Bei einem Controller fängt halt meist bei einem Reset alles wieder von vorne an. Lange Rede kurzer Sinn: Rauschen am ADC ist besser als ein PRNG in SW. Mehr will ich nicht sagen. gruß cyblord
Ich weiß immer noch nicht, was ein PRNG ist. Andere Leute wiederum wissen nicht, was ein EVZ ist.
Wilhelm Ferkes schrieb: > Ich weiß immer noch nicht, was ein PRNG ist. Aber hier über Zufallsgeneratoren schwadronieren. Super. PRNG= Pseudo Random Number Generator http://de.wikipedia.org/wiki/PRNG > Andere Leute wiederum wissen nicht, was ein EVZ ist. Interessiere mich leider nicht sooo sehr für die schweizerische Eishockeyszene. http://de.wikipedia.org/wiki/EV_Zug
>Ich weiß immer noch nicht, was ein PRNG ist. Pseudo Random Noise Generator. >Rauschen am ADC ist besser als ein PRNG in SW. Dann aber auch echtes Rauschen an den ADC geben und nicht einfach das nur letzte Bit auswerten. Wo kommt dieses Rauschen wohl her? Aus der Schaltung und hauptsächlich vom uC selber. Man findet da dann die PWM für die LEDs, die Motorsteuerung, I2C, usw.
holger schrieb: > Dann aber auch echtes Rauschen an den ADC geben und nicht einfach > das nur letzte Bit auswerten. Wo kommt dieses Rauschen wohl her? > Aus der Schaltung und hauptsächlich vom uC selber. Man findet > da dann die PWM für die LEDs, die Motorsteuerung, I2C, usw. Naja ein echter Rauschgenerator wäre sicher gut. Aber auch das übliche Rauschen am offenen ADC Pin ist sicher nicht-deterministisch genug für die meisten Anwendungen. Einen RSA-Schlüssel für Atomwaffen würde ich damit nun aber nicht erstellen wollen ;-)
Wilhelm Ferkes schrieb: > EVZ Alter Telekomiker? > Ich weiß immer noch nicht, was ein PRNG ist. Pseudo Randondom Number Generator. > und auch einen Rauschgenerator bedient. Wie erzeugst du mit einem Timer ein Rauschen? Ein Controller macht doch ab Reset immer wieder das Gleiche. Es sei denn man holt sich irgendwelche "Umwelteinflüsse" rein. mfg.
cyblord ---- schrieb: > Wilhelm Ferkes schrieb: >> Ich weiß immer noch nicht, was ein PRNG ist. > > Aber hier über Zufallsgeneratoren schwadronieren. Super. > PRNG= Pseudo Random Number Generator > http://de.wikipedia.org/wiki/PRNG > > >> Andere Leute wiederum wissen nicht, was ein EVZ ist. > > Interessiere mich leider nicht sooo sehr für die schweizerische > Eishockeyszene. > http://de.wikipedia.org/wiki/EV_Zug Ach so. Klugscheißerei.
Thomas Eckmann schrieb: > Wilhelm Ferkes schrieb: >> EVZ > Alter Telekomiker? > >> Ich weiß immer noch nicht, was ein PRNG ist. > Pseudo Randondom Number Generator. > >> und auch einen Rauschgenerator bedient. > Wie erzeugst du mit einem Timer ein Rauschen? Ein Controller macht doch > ab Reset immer wieder das Gleiche. Es sei denn man holt sich > irgendwelche "Umwelteinflüsse" rein. Aber er hat doch einen Timer der ewig läuft ;-) > Ach so. Klugscheißerei. Ja sorry aber ein wenig theoretisches Grundwissen erwartet man halt wenn jemand anfängt über das Thema zu diskutieren und wenn dann mitten drin die Frage nach PRNG gestellt wird, dann finde ich das etwas merkwürdig. gruß cyblord
cyblord ---- schrieb: > Aber er hat doch einen Timer der ewig läuft ;-) Nee, aber mal ernsthaft. Warum soll ein µC, der nur auf seine eigene Peripherie zurückgreift, heute was anderes machen als morgen nach z.B 5478278236ns nach Reset? mfg.
Thomas Eckmann schrieb: > cyblord ---- schrieb: >> Aber er hat doch einen Timer der ewig läuft ;-) > Nee, aber mal ernsthaft. > Warum soll ein µC, der nur auf seine eigene Peripherie zurückgreift, > heute was anderes machen als morgen nach z.B 5478278236ns nach Reset? Ja eben, das macht er natürlich nicht. Die einzige Chance ist halt, dass man eben nicht genau weiß bei welcher ns er gerade ist und so die nächste erzeugte Zufallszahl nicht voraussagen kann.
uiuiui, da hab ich ja was ausgelöst. ^^ Vielen Dank an alle. Meine Frage war nach der Erkenntnis, das ich mit "(ADCL & (1<<1))" nicht das 1.Bit sondern das 2. lese schon beendet. Für alle die es vllt. gebrauchen können, anbei der Codebrocken sowie ein Bild zur statistischen Auswertung über 1mio Ereignisse. Für mich ist die Verteilung gut genug (auch wennd die Null scheinbar öfters kommt. Aber ihr wisst ja theoretisch könnte auch 1million mal die 0 kommen und dann der Rest, bis es gleich verteilt ist. Die Chance dafür ist aber sehr gering... wahrscheinlicher ist dann, dass der ADC Eingang auf Masse liegt... :-P Gruß zander
zander schrieb: > uiuiui, da hab ich ja was ausgelöst. ^^ > Vielen Dank an alle. > > Meine Frage war nach der Erkenntnis, das ich mit "(ADCL & (1<<1))" nicht > das 1.Bit sondern das 2. lese schon beendet. Dass du dafür überhaupt einen Thread aufmachst ist schon erschreckend. Kurzes Nachdenken, bzw. Stift und Papier und schnell mal den Shift + das Bitweise AND per Hand gemacht und fertig.
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.