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