Warum gibt es einen Prescaller am internen ADC in einem uC?
Ist der ADC nicht in der Lage, eine Messung im MHz-Bereich
durchzuführen, weil das mit der Messung zu "träge" ist und mit zB. 8MHz
nicht funktioniert?
Wenn der ADC einen unabhänigen Takt hat - läuft der ADC dann auch
getrennt vom Restprogramm parallel dazu, oder wenn ich eine Messung
starte - hält mein sequentielles Programm so lange an, bis das
Messergebnis da ist?
1.
manchmal kann er nicht so schnell, manchmal braucht man ihn nicht so
schnell, das spart strom
2.
bei vielen controllern gibt es beides,
continuous mode und single shot mode oder so.
Ja, bei genauerem Nachsehen im Datenblatt findet man,
dass er nur bis etwa 200 kHz gut arbeitet.
Man muss also den gewählten Systemtakt für den ADC mit seinem
Prescaler auf einen sicheren Wert herunterteilen.
Hat man eine AD-Wandlung gestartet, läuft sie unabhängig vom
restlichen Programm ab.
Man kann im Programm eine Warteschleife einbauen und ständig das
Status-Bit abfragen, bis der AD-Wert abholbereit ist.
Hat man es nicht so eilig, kann man bei passender Gelegenheit
das Status-Bit abfragen und - nach Fertig-Meldung den AD-Wert
abholen.
Komplizierter wird es, wenn man den AD-Wandler beauftragt,
sobald er fertig ist, eine neue AD-Wandlung zu starten...
1.) Der AD-Wandler braucht einen eigenen Takt von 50-200 KHz der aus dem
Haupttakt gewonnen wird. Also braucht er einen Prescaler damit man den
ADC bei allen Taktraten des µC nutzen kann. Steht auch so im Datenblatt.
2.)Der ADC läuft immer komplett getrennt vom Hauptprogramm. Wie auch
sonst? Du setzt das ADSC Bit und dann gehts in deinem Programm weiter
und der ADC macht ne Messung. Was da jetzt Single Shot usw. mit zu tun
hat, weiß auch nur der Hans.
gruß cyblord
@ cyblord ---- Nein!
Ich hab zum Beispiel auch darauf hingewiesen, dass die Behandlung
von automatisch wiederholten AD-Wandlungen etwas aufwändiger ist.
- Zumindest, wenn man alle Werte auch verarbeiten will...
Bernd schrieb:> @ cyblord ---- Nein!
Was nein? Was hab ich falsches geschrieben? Hör mit so einem Blödsinn
auf, entweder du schreibst sofort was dir nicht passt du hälst die
Klappe. Wie wär das?
> Ich hab zum Beispiel auch darauf hingewiesen, dass die Behandlung> von automatisch wiederholten AD-Wandlungen etwas aufwändiger ist.> - Zumindest, wenn man alle Werte auch verarbeiten will...
Ja na und? Das war in keinster Weise die Frage.
gruß cyblord
Oha,
sich cyblord nennen und nicht mal die simpelsten Benimmregeln
kennen.
Automatisch wiederholte AD-Wandlungen sind nun mal kein
Single-Shot. Und das Abwarten, Abholen und Weiterverarbeiten
der AD-Werte muss im Programm unterschiedlich organisiert werden.
Bernd schrieb:> Oha,> sich cyblord nennen und nicht mal die simpelsten Benimmregeln> kennen.
Meld dich erstmal an, dann darfste bei den großen Mitspielen. So bist du
nur ein Gast-Troll der mir nix von Benimm erzählen darf, solange er mir
irgendwelche Aussagen unterstellt die ich nicht getätigt habe.
> Automatisch wiederholte AD-Wandlungen sind nun mal kein> Single-Shot. Und das Abwarten, Abholen und Weiterverarbeiten> der AD-Werte muss im Programm unterschiedlich organisiert werden.
Ja und nun? Wo hab ich sowas behauptet? Zitat bitte. Wovon redest du
eigentlich? Es ging weder um Single-Shot vs Free-Running-Mode noch ging
es darum wie man irgendwelche Werte schnell genug verarbeitet. Es ging
nur um den ADC Prescaler. Kannst du das jetzt mal kapieren und evt.
schauen ob du nicht irgendwelche Namen und Beiträge hier verwechselst?
Ist ja nicht zum aushalten.
gruß cyblord
Abgesehen davon
cyblord ---- schrieb:> Es ging weder um Single-Shot vs Free-Running-Mode noch ging> es darum wie man irgendwelche Werte schnell genug verarbeitet.
frage ich mich, was mit
Bernd schrieb:> Und das Abwarten, Abholen und Weiterverarbeiten> der AD-Werte muss im Programm unterschiedlich organisiert werden.
gemeint ist. Der einzige Unterschied ist das Setzen des ADFR bzw. ADATE
Bits.
Ob man nun tumb daherwartet oder ADIE setzt und das Ergebnis im Handler
auswertet, hat damit nichts zu tun. Das ist im Single Shot und im Free
Running Modus gleich.
Also:
WAS muss unterschiedlich organisiert werden?
Zu den Fragen des TE fällt mir noch ein:
1. Der AD-Wandler wird mit zunehmender Taktfrequenz ungenauer. Der beste
Kompromiss aus Geschwindigkeit und Genauigkeit ist für jede Anwendung
separat herauszufinden.
2. Fragender Anfänger schrieb:> hält mein sequentielles Programm so lange an, bis das> Messergebnis da ist?
Nur wenn Du den µC während der Konvertierung schlafen legst. Dafür gibt
es einen eigenen Sleep-Modus namens ADC Noise Reduction Mode.
Hi
>Zu den Fragen des TE fällt mir noch ein:>1. Der AD-Wandler wird mit zunehmender Taktfrequenz ungenauer. Der beste>Kompromiss aus Geschwindigkeit und Genauigkeit ist für jede Anwendung>separat herauszufinden.http://www.atmel.com/Images/doc8456.pdf
Auf Seite 17 ist die Sample&Hold-Stufe eines AVRs dargestellt.
Mit den Werten aus den Datenblättern ergibt sich für Radc und Cadc eine
Zeitkonstante von 0,014...1,4µs. In der Zeit lädt sich der Kondensator
auf 63,2 % der Eingangsspannung auf. Für 99,3 % braucht man schon die
fünffache Zeit. Die minimal Sampletime beträgt bei AVRs 1,5 ADC-Takte.
(5*1,4µs)/1,5 ergibt eine Periodendauer von 4,6666µs, was einer Frequenz
von 214,3 kHz entspricht.
Kommt das jemand bekannt vor?
MfG Spess
Ich verstehe nicht, wieso ihr auf en 50kHz bis 200kHz rumreitet.
Für den MSP430 gilt z.B.:
Internen Taktgenerator, (relativ ungenau) mit 5 bis 6 MHz.
Der Sampling-Kondensator ist mit ca. 20pF angegeben. Somit folgt die
eigentliche Aufgabe doch eher daraus, die Anzahl an
Sample-and-Hold-Zyklen so zu wählen, dass bei der gewählten
ADC-Taktfrequenz die richtige Ladezeitkonstante eingehalten wird.
MSP430 schrieb im Beitrag #2828245:
> Ich verstehe nicht, wieso ihr auf en 50kHz bis 200kHz rumreitet.
Weil die Hersteller von µC alle nur mit Wasser kochen und die
Taktfrequenzen für den internen ADC ganz gut vergleichbar sein sollten.
> Für den MSP430 gilt z.B.:> Der Sampling-Kondensator ist mit ca. 20pF angegeben. Somit folgt die> eigentliche Aufgabe doch eher daraus, die Anzahl an> Sample-and-Hold-Zyklen so zu wählen, dass bei der gewählten> ADC-Taktfrequenz die richtige Ladezeitkonstante eingehalten wird.
Das ist erst die halbe Miete.
Der Komparator im ADC ist auch nicht beliebig schnell und begrenzt den
Takt nach oben. Andererseits dürften die meisten integrierten ADC
mittlerweile geschaltete Kondensatoren benutzen (a'la
http://en.wikipedia.org/wiki/Successive_approximation_ADC#Charge-redistribution_successive_approximation_ADC)
Dann begrenzen die unvermeidlichen Leckströme die ADC-Taktfrequenz auch
nach unten.
XL
Herzlichen Dank fuer die Vielzahl an Euren Beiträgen.
Fzzz schrieb:> Sinnvollerweise vewendet man den ADC interrupt um das Ganze zu steuern.
Ist es generell sinnvoll, mehrere Werte abzufragen und diese zu mitteln,
wie in dem AVR-GCC-Beispiel zu dem obigen Link von mir? Wenn ja, macht
es beim Mitteln auch Sinn, dies per Interrupt zu steuern? Wenn ich das
sequenziell mache, dann kann ich einfach eine Schleife machen, mach ich
das per Interrupt, dann muss ich noch einen Zähler basteln, der die
gewünschte Anzahl zum Mitteln aufzählt.
Ist das Signal sehr verrauscht würde ich lieber analog filtern.
Muss es digital sein (z.B. aus Platzgründen) ist der einfache Mittelwert
so ziemlich der schlechteste Tiefpassfilter.
Ich würde erstmal ohne Mitteln anfangen und schauen ob die Werte gut
genug sind.
>Muss es digital sein (z.B. aus Platzgründen) ist der einfache Mittelwert
so ziemlich der schlechteste Tiefpassfilter.
Den Mittelwert verwendet eh niemand. Was verwendet wird ist der
exponentielle Mittelwert. Denn der braucht nur einen einzigen
Speicherwert, und nicht 10 oder so. Und der exponentielle Mittelwert ist
identisch zu einem Tiefpass erster Ordnung.
Siehe http://www.ibrtses.com/embedded/exponential.html
Aeh. schrieb:> Den Mittelwert verwendet eh niemand.
Doch, ich.
Warum auch nicht. Man kann damit prima z.B. 50Hz ausfiltern.
Aeh. schrieb:> Und der exponentielle Mittelwert ist> identisch zu einem Tiefpass erster Ordnung.
Stimmt, der filtert nur sehr schwach.
Peter