Forum: Mikrocontroller und Digitale Elektronik A/D Werte mit konstanter Samplefrequenz aufnehmen?


von Jens Bach (Gast)


Lesenswert?

Hallo,

kann mir bitte jemand sagen, wie ich es hinbekomme, dass ich in einem 
festen zeitlichen Abstand (z.B. 10000 mal pro Sekunde) einen Wert von 
einem Analog-Digital-Wandler des ATmega 323 einlesen kann? Ich habe es 
mit CodeVisionAVR probiert, indem ich immer dann, wenn ein A/D-Wert 
gesampelt wurde einen Interrupt auslösen ließ, aber wenn ich die 
technischen Daten im Manual richtig gelesen habe, dann kann eine 
A/D-Wandlung zwischen 65 und 260 µs dauern. Der Zeitabstand zwischen den 
Samplewerten ist also nicht konstant. Könnte man das ändern, indem man 
auf den "Free Running Mode" des A/D-Wandlers umschaltet und in einer 
Timer-Interruptroutine im festen zeitlichen Abstand den A/D-Port 
ausliest? Falls ja, wie kann ich eine Timer-Interruptroutine so 
konfigurieren, dass sie wie gewünscht aufgerufen wird? Muss ich den 
Timer-Überlauf beachten und ähnliches? Ich blicke da leider nicht durch.

Wäre wirklich toll, wenn ihr mir helfen könntet.
Jens

von thkaiser (Gast)


Lesenswert?

Im Free-Running Mode funktioniert das, wie Du schon selbst bemerkt hast, 
wegen der unterschiedlichen Wandlungszeiten nicht. Du mußt den 
A/D-Wandler im Single-Shot Modus betreiben.
Du richtest einfach einen Timer-Interrupt so ein, daß er 10000 mal pro 
Sekunde ausgeführt wird. In diesem Timer-Interrupt startest Du den 
A/D-Wandler, mehr nicht. Das Auslesen des Wandlers kann im Hauptprogramm 
per Abfrage des A/D-Ready Bits erfolgen oder im A/D-Interrupt, der dann 
ausgelöst wird, wenn eine Wandlung fertig ist.

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
Noch kein Account? Hier anmelden.