ADCL auslesen

Gast #2836315
Lesenswert?

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
Gast #2836353
Lesenswert?

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
#2836435
Lesenswert?

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.
Gast #2836444
Lesenswert?

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.
#2836448
Lesenswert?

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
Gast #2836457
Lesenswert?

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.
Gast #2836539
Lesenswert?

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.
#2836643
Lesenswert?

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
Gast #2836660
Lesenswert?

>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.
#2836663
Lesenswert?

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 ;-)
Gast #2836668
Lesenswert?

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.
#2836674
Lesenswert?

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
#2836723
Lesenswert?

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.
Gast #2837620
Lesenswert?

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
Angehängte Dateien:
#2837698
Lesenswert?

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.

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