Hallo,
ich bin gerade dabei mich mit dem ADC des attiny85 zu beschäftigen..
Dabei habe ich mich gefragt, was wohl passiert, wenn ich das
ADC-Register lese, bevor der ADC fertig ist? Ist es so, dass das
komplette Register erst aktualisiert wird, wenn der ADC fertig ist, oder
wird jedes Bit nach und nach geschrieben?
Ich meine es dauert 13 Zyklen, bis der ADC fertig ist, aber kann mir
jemand sagen, warum sich das auf die ADC-Clock bezieht und nicht auf die
CPU-Clock?
Außerdem frage ich mich, warum es wohl 13 sind?! 10 kann ich mir noch
erklären (10 bit ADC) und mit Doublebuffer kommt evtl. noch der eine
oder andere hinzu. ..Weshalb ich auch mal vom Doublebuffer ausgehe, aber
wer weiß..
Nochmal zur ADC-Clock: Ich denke, der Frequenzbereich ist begrenzt durch
den S/H, aber warum wird die berechnung nicht mit CPU-Clock
durchgeführt? So hab ich es zumidest verstanden, wenn man die im
Datenblatt empfohlenen f_ADC_max = 200 kHz und f_Samplerate = 15kHz
beachtet: f_ADC_max / 13 ~=~ f_Samplerate..
Ich verstehe nicht, warum man nicht lieber alle t_Samplerate 13 mal
t_CPU was zu tun hat, statt 13 mal alle t_Samplerate quasi 1 t_CPU zutun
hat.
Ist doch sogar schlecht für den S/H..
Aber sonst verstehe ich nicht was die 200kHz mit den 15kHz zu tun haben.
Vielleicht weiß da ja jemand was genaueres?!?
Mfg
Arthur Ingo ^-1
Tipp:
Baue mal selber einen ADC aus diskreten Bauteilen.
Und versuche ihn dann auf Speed zu optimieren.
Ich bin mir sicher, auf dem Wege werden alle deine Fragen beantwortet
werden.
Arthur Ingo ^-1 schrieb:> ich bin gerade dabei mich mit dem ADC des attiny85 zu beschäftigen..
Dann solltest du einfach den den ADC-Abschnitt des Datenblattes so lange
lesen, bis du ihn vollständig verstanden hast.
Darin sind nämlich, wer hätte das gedacht, die Antworten auf alle deine
Fragen enthalten, sogar die Tatsache, warum sogar eine deiner Fragen
schon falsch gestellt ist, wird erklärt. Die haben sich da richtig Mühe
gegeben...
Und überfordern wird dich die Lektüre von nur 16 Seiten ja wohl auch
nicht...
Naja beides nicht sehr hilfreich.. Die Funktionsweise in Theorie würde
mir schon reichen, außer du hast zufällig die entsprechenden Bauteile in
diskret da..
Da stellt sich gleich die nächste Frage: Kann jemand c-haters Rätsel um
die eine, schon falsch gestellte, Frage lüften?...
Im Datenblatt steht schon einiges drin, aber verständlich für mich, ist
anders. Sonst wär ich nicht hier..
Was ich mich noch gefragt habe:
Ziehen wir es mal von hinten auf: Was passiert denn, wenn den ADC mit
z.B. 4MHz betreibe? Was genau macht da wohl nicht mehr mit? Bzw. wodurch
wird der Präzisionsverlust verursacht?
Und noch etwas zum Timer: Macht der Komparator eigentlich ein "==" oder
ein ">=" ? Wenn ich jetzt also habe:
(Counter, CmpValue): (0,3) (1,3) (2,3) (3,2) (4,2) ..,
löst der Komparator dann aus, oder nicht? Ein analoger würde das ja
tun..
Und habe ich das richtig verstanden, dass ich Timer1 mit bis zu 64/256
MHz-Periode betreiben kann, Timer0 nur mit bis zu 16/256 MHz-Periode?
Welchen Timer nimmt man denn nun als "DAC" ?
Warum glaubst du, als Anfänger mit NULL Ahnung mehr aus dem
ADC des Tiny-85 geliefert zu bekommen, als Normal-Benutzer?
Die Spezifikation ist:
- 10 Bit Auflösung bei einem ADC-Takt von <= 200 kHz
- das Ergebnis liegt nach 13 ADC-Takten vor und wird vom
Wechsel des ADSC-Bits von 1 auf 0 angezeigt.
Damit funktioniert es.
Wie und warum das so abläuft, wird im Datenblatt beschrieben
und wenn du es nicht glaubst, probier deine "Verbesserungen"
einfach unter definierten Bedingungen an 25 Exemplaren aus
25 Fertigungs-Chargen bei Temperaturen von ... bis aus.
Ist aber schnulli, weil du wahrscheinlich auch reproduzierbare
Ergebnisse haben willst.
Sonst nimm lieber einen Zufallszahlengenerator...
Arthur Ingo ^-1 schrieb:> Ziehen wir es mal von hinten auf: Was passiert denn, wenn den ADC mit> z.B. 4MHz betreibe? Was genau macht da wohl nicht mehr mit? Bzw. wodurch> wird der Präzisionsverlust verursacht?
Durch die begrenzte Bandbreite des Komparators natürlich. So wie das bei
absolut jedem SA-DAC der Fall ist...
> Und noch etwas zum Timer: Macht der Komparator eigentlich ein "==" oder> ein ">=" ?
OMG, hier werden analoge Größen verglichen. Ein "==" kann es da
höchstens zufällig geben, in unserer Makrowelt eigentlich garnicht. Wie
sollte ein SA-DAC im regulären Betrieb funktionieren, wenn er auf so
einen extremen Zufall angewiesen wäre? Ein wenig logisches Denken bitte!
> Und habe ich das richtig verstanden, dass ich Timer1 mit bis zu 64/256> MHz-Periode betreiben kann, Timer0 nur mit bis zu 16/256 MHz-Periode?
Was hat irgendein Timer mit dem DAC zu tun? Direkt sicher garnix und
indirekt auch höchstens als Trigger für einen Wandlungsvorgang. Auf die
eigentliche Wandlung hat er dann aber exakt keinerlei Einfluss mehr.
Wenn du fauler Hund endlich mal dieses verfickte Kapitel in diesem
verfickten DB lesen würdest, wäre dir das sofort klar, denn im
Prinzipschema des DAC tauchen keinerlei Timer auf...
> Welchen Timer nimmt man denn nun als "DAC" ?
Normalerweise überhaupt keinen. Und wenn doch, dann höchstens als
Trigger, um z.B. eine Samplerate exakt zu erreichen, die allein mit den
Mitteln des ADC eben nicht exakt erreichbar ist oder auch, um periodisch
eine Größe an (zeitlich) definierter Stelle zu messen, die direkt von
Aktivitäten eines Timers abhängig ist. Typisches Anwendungsbeispiel:
Feedback-Zweig für einen µC-gesteuerter Schaltregler mit Timer-PWM als
Aktor.
> Warum glaubst du, als Anfänger mit NULL Ahnung mehr aus dem ADC des Tiny-85
geliefert zu bekommen, als Normal-Benutzer?
Wie kommst du denn darauf? ..Außer du meinst mit 'Normal-Benutzer' die
Arduinoleute, die nicht mal Ahnung von einem NPN haben..
Die normalsten Nutzer nutzen den (alleine) eh als Radiosender..
> Wie und warum das so abläuft, wird im Datenblatt beschrieben ...
Gerade das Warum eher nicht so wirklich, oder? Und das Wie leider auch
nur bis zu einem, durch schwarze Striche begrenzten, Kasten mit ein paar
Pfeilen rein und raus...
> Sonst nimm lieber einen Zufallszahlengenerator...
Oh, hat sich eigentlich mal jemand am circuit-bending von µC versucht?!?
> Durch die begrenzte Bandbreite des Komparators natürlich. So wie das bei
absolut jedem SA-DAC der Fall ist...
Hatte ihn auch schon im Auge, 200kHz sind aber nicht viel für so einen
natürlichen Komparator. Und warum sich das dann nur auf die Präzision
der LSB auswirken soll, erschließt sich mir auch nicht.
> OMG, hier werden analoge Größen verglichen.
Also hier nicht.. Erleuchtet? ich rede vom..
>> Timer
..
> Ein wenig logisches Denken bitte!
Das macht dann 2,50€ ! Aber nur weil du's bist.
> Was hat irgendein Timer mit dem DAC zu tun? Direkt sicher garnix ...
Für dich anscheinend schon.. Und das von einem, der meinem verfickten
Beitrag nicht richtig liest..
> Normalerweise überhaupt keinen.
Das ist aber schlecht.. Dann halt entsprechende Bits setzen.
> ... mit Timer-PWM als Aktor.
Timer0, oder Timer1?
Und noch eine Frage (..hat nichts mit dem ADC zu tun!..): Hat jemand
zufällig ein ges. Blockschaltbild? Dann würde man evtl besser verstehen,
was mit wem verknüpft ist, statt es über verschiedene Paragraphen
verteilt lesen zu müssen (auch wenn man dann nen großen Bildschirm
braucht)?!
Arthur Ingo ^-1 schrieb:> Hatte ihn auch schon im Auge, 200kHz sind aber nicht viel für so einen> natürlichen Komparator.
Wer hat denn behauptet, dass die Bandbreite des Komparators auf 200kHz
limitiert wäre?
Er muß natürlich eine wesentlich höhere Bandbreite haben, um bei 200kHz
Messungen mit 10 Bit Genauigkeit realisieren zu können...
Bau' doch einfach mal selber einen 10Bit-SA-DAC auf (das wurde dir ja
bereits "ufuf" vorgeschlagen), dann erkennst du, wo die Knackpunkte sind
und wie sich das mit der Fehlerfortpflanzung über die Stufen der
Approximation verhält...
> Und warum sich das dann nur auf die Präzision> der LSB auswirken soll, erschließt sich mir auch nicht.
Auch das kannst du dann verstehen...
> ich rede vom..>>> Timer
Ja, bloß wie paßt das zum Thema des Threads? Das ist doch ein ganz
anderes Thema, also machst du einfach besser einen neuen Thread dafür
auf. Oder liest einfach das DB...
>> ... mit Timer-PWM als Aktor.> Timer0, oder Timer1?
Beim Tiny85 kann von den beiden vorhandene Timern nur Timer0 direkt als
Trigger für die AD-Wandlung dienen Auch das steht im DB. Lies' es doch
einfach endlich mal...
Mit einem Trick kann man allerdings auch Timer1 dafür hernehmen. Mit dem
Umweg über den Pin-Change, denn auch der kann beim Tiny85 als Trigger
für die ADC dienen und er läßt sich wiederum auch durch die
OC1A/B-Ausgabe auslösen. Der Nachteil ist dann halt nur, dass damit der
PCINT für andere Anwendungen praktisch unbrauchbar wird.
>Wer hat denn behauptet, dass die Bandbreite des Komparators auf 200kHz>limitiert wäre?>>Er muß natürlich eine wesentlich höhere Bandbreite haben, um bei 200kHz>Messungen mit 10 Bit Genauigkeit realisieren zu können...
Also wie man bei einem analogen Komparator von einer Genauigkeit von
mehreren Bits sprechen kann, musst du mir mal sehr gerne erklären..
Oder anders: Wenn ich jetzt mit 20kHz messe, habe ich dann magischer
Weise z.B. 100Bit Genauigkeit?!?
>der Fehlerfortpflanzung über die Stufen der>Approximation verhält...
Fehlerfortpflanzung im Digitalen ist immer sonne Sache, ne?!
Du glaubst nicht wirklich, dass man identisches Verhalten erhält, baut
man dieses IC diskret nach?! Wenn du das glaubst, hast du noch nie mit
"hf" gearbeitet.
>Auch das kannst du dann verstehen...
Soll ich dir dann sagen, woran es liegt..? Jeder Messvorgang einzelner
Bits unterscheidet sich nicht vom nächsten, außer, dass die
Sprungspannung sogar noch abnimmt. Wäre deine Annahme richtig, müsste
sich nicht allmählich ein Fehler in den LSB bemerkbar machen, sondern
gleich alles zusammenbrechen.
Weißt du überhaupt genau, wie ein SA-DAC, und auch dessen einzelne
Komponenten funktionieren?? Macht irgendwie nicht den Eindruck.
>Ja, bloß wie paßt das zum Thema des Threads? Das ist doch ein ganz>anderes Thema, also machst du einfach besser einen neuen Thread dafür>auf. Oder liest einfach das DB...
Och möönsch. Hätt ich gewusst, dass dich das so verwirrt, für dich hätt
ichs getan.
..Wozu 2 Threads, ohne interessante Antworten?!
>Beim Tiny85 kann von den beiden vorhandene Timern nur Timer0 direkt als>Trigger für die AD-Wandlung dienen Auch das steht im DB. Lies' es doch>einfach endlich mal...
Nur war das nicht die Frage. Ich wollte mich nur vergewissern, ob man
die Timer1-PWM wirklich, ohne Probleme, mit 64MHz-Schritten takten kann.
Nur zur Sicherheit, ADC =/= DAC...
Arthur Ingo^-1 schrieb:> Nur war das nicht die Frage. Ich wollte mich nur vergewissern, ob man> die Timer1-PWM wirklich, ohne Probleme, mit 64MHz-Schritten takten kann.
Nein, kann man nicht. Der asynchrone Betrieb via PLL führt natürlich
etliche Probleme ein, die man im Normalbetrieb des Timers nicht hat.
Welche genau, das steht (wer hätte das gedacht), ausführlichst in DB
beschrieben...
Du musst es eben einfach nur mal lesen...
Arthur Ingo^-1 schrieb:> Jeder Messvorgang einzelner> Bits unterscheidet sich nicht vom nächsten
Genau das stimmt eben im Falle der SA-Wandler nicht. Wo hast du diesen
völligen Schwachsinn her? Jeder Schritt hat natürlich den (nur
entsprechend der Zeitkonstante abgeklungenen) Restfehler aller vorigen
Schritte als Fehlersumme mit im Sack...
Bedenke: die Bandbreite des Komparators bezieht sich nicht auf's Signal
(denn das ist durch die S&H-Stufe über die Messzeit näherungsweise
konstant), sondern auf die Referenz, die wiederum aus dem Ergebnis der
vorigen Stufe resultiert...
Mathematisch ist das im Prinzip ein IIR Filter. Und genau mit den
Formel, mit denen man einen solchen beschreiben kann, kann man auch eine
SA-DAC beschreiben.
> Weißt du überhaupt genau, wie ein SA-DAC, und auch dessen einzelne> Komponenten funktionieren?? Macht irgendwie nicht den Eindruck.
Ich lach' mich tot. Mir scheint eher, du willst dir von mir erklären
lassen, wie die Sache funktioniert. Du hättest einfach besser in der
Vorlesung aufpassen sollen. Dann würdest du vielleicht wenigstens an der
einen oder anderen Stelle meiner Ausführungen das Gefühl gehabt haben:
"Moment mal, das kommt mir jetzt doch irgendwie bekannt vor".
Nö, du hast in der entsprechenden Vorlesung entweder erst garnicht
teilgenommen (weil vom GV oder vom Drogenkonsum entkräftet verpennt)
oder das Gehirn statt mit der blöden Wissenschaft damit beschäftigt, wie
du es Gretchen Modermöse tonight besorgen kannst. Oder woher du deinen
nächsten Joint kriegst oder was auch immer...
Mein Gott, ich will auch noch mal 20 und so strunzdumm sein. ;o)
>Nein, kann man nicht. Der asynchrone Betrieb via PLL führt natürlich>etliche Probleme ein, die man im Normalbetrieb des Timers nicht hat.>Welche genau, das steht (wer hätte das gedacht), ausführlichst in DB>beschrieben...
Und was ist mit dem synchronen - ist ja immerhin nen PLL..?! Ich
beschränke mich erstmal darauf. 'Etliche Probleme' können sicher nur von
einem Profi, wie dir bewältigt werden..
Meine Kristallkugel meint, im Datenblatt steht was vom max. ~85MHz. An
anderer Stelle jedoch was von max. 25MHz.. Also 85>64 - soviel steht
fest.
>Du musst es eben einfach nur mal lesen...
Du kommst auf Ideen... Also bislang habe ich alles in meiner
Kristallkugel gesehen - und dafür wars doch gar nicht so schlecht..
>Genau das stimmt eben im Falle der SA-Wandler nicht. Wo hast du diesen>völligen Schwachsinn her? Jeder Schritt hat natürlich den (nur>entsprechend der Zeitkonstante abgeklungenen) Restfehler aller vorigen>Schritte als Fehlersumme mit im Sack...>>Bedenke: die Bandbreite des Komparators bezieht sich nicht auf's Signal>(denn das ist durch die S&H-Stufe über die Messzeit näherungsweise>konstant), sondern auf die Referenz, die wiederum aus dem Ergebnis der>vorigen Stufe resultiert...
Nur zur Sicherheit: Du meinst aber schon "successive approximation ADC",
oder?
1. Bandbreite beim Komparator - ist doch kein OPAmp...
2. Auf die Referenz?! Die ist ebenso konstant wie das S/H-Signal. Du
meinst wohl eher das "-"/DAC-Signal.. Aber das hat gerade den Takt der
ADC! Und das sind nach wie vor die "max" 200kHz.
3. vorige Stufe? Ich sehe da nur eine Stufe. Wenn du den vorigen Schritt
meinst: Das ist es ja gerade - der "Fehler" des vorigen Schritts ist
wesentlich signifikanter als der des folgenden. Das kann also eig nicht
die Ursache für den leichten Päzisionsverlust einiger LSB sein.
>Mathematisch ist das im Prinzip ein IIR Filter. Und genau mit den>Formel, mit denen man einen solchen beschreiben kann, kann man auch eine>SA-DAC beschreiben.
*SA-ADC ;)
Also DAS will ich sehen!! Erklär mir mal, auf welche weise ein ADC,
genauer der Messvorgang eines Samples, den Namen Filter verdient hat?!
Und dann noch IIR - nur weil da was rückgekoppelt wird...wohl kaum?
>Ich lach' mich tot. Mir scheint eher, du willst dir von mir erklären>lassen, wie die Sache funktioniert. Du hättest einfach besser in der>Vorlesung aufpassen sollen. Dann würdest du vielleicht wenigstens an der>einen oder anderen Stelle meiner Ausführungen das Gefühl gehabt haben:>"Moment mal, das kommt mir jetzt doch irgendwie bekannt vor".
Oh ich glaube, das hätte ich nicht einmal gedacht, gäbe es eine
Vorlesung, die ich hätte verpassen können.
>Nö, du hast in der entsprechenden Vorlesung entweder erst garnicht>teilgenommen (weil vom GV oder vom Drogenkonsum entkräftet verpennt)>oder das Gehirn statt mit der blöden Wissenschaft damit beschäftigt, wie>du es Gretchen Modermöse tonight besorgen kannst. Oder woher du deinen>nächsten Joint kriegst oder was auch immer...
Ich weiß zwar nicht, wer das ist, aber will dir, dem Namen nach,
bestimmt keiner streitig machen.. Klingt eher so, als wärst du auf
Entzug..
>Mein Gott, ich will auch noch mal 20 und so strunzdumm sein. ;o)
Ich ..teilweise.. auch. 20 ist schon etwas viel. Und jetzt bist du - 21
3/4, oder was willst du hier mitteilen?!
Bei dem, was du so schreibst, hat man eher das gefühl du warst nie
'20'..