Gast
#1198936
Hallo, auf einem mega8 möchte ich kontinuierlich nacheinander alle 6 AD Eingänge einlesen. Randbedingungen sind: das Sampling muss in gleichmässigen Zeitabständen erfolgen, und es muss so schnell wie möglich sein. Abgesehen von der passenden analogen Beschaltung und der Wahl eines für die geforderte Genauigkeit passenden ADC-Prescalers dürfte der Freerunning Mode meine Forderungen erfüllen. Der ADC IRQ wird aufgerufen, sobald ein neues Messergebnis vorliegt. Da beim Sprung in die ISR bereits die nächste Conversion läuft, bezieht sich das in der ISR abgeholte Ergebnis immer auf den vorhergehenden Kanal. In der ISR schalte ich dann jeweils den MUX auf den nächsten Kanal um (wobei der AVR ja erst mit Beginn der nächsten Conversion auf diesen Kanal umschaltet). Soweit klar (hoffe ich ;-) Problem ist leider, dass der ADC sporadisch falsche Werte liefert, die völlig daneben liegen. Sie spiegeln weder den Wert des gewünschten Kanals wieder, noch irgend eines anderen Kanals. Häufig kommt der Wert 192 (1100000). Auf meinem System laufen nebenher auch noch andere Interrupts, deren Laufzeit aber weit unterhalb der ADC-Abtastrate liegt. Es kann also nicht passieren, dass das Auslesen eines Kanals übersprungen wird. Im Datenblatt finde ich unter dem Punkt "Changing Channel or Reference Selection" einen möglichen Hinweis, den ich aber leider nicht kapiere. Ich habs unten angehängt. Insbesondere Punkt 2 ist mir nicht klar. Muss ich im interruptgetriebenen free running mode immer 1 ADC clock cycle warten, bevor ich den MUX umschalten darf? Ich habe die ISR testhalber mit NOPs vollgekleistert um 1 ADC cycle zu warten, das half aber auch nicht. Habt Ihr Ideen? Danke Jens If both ADFR and ADEN is written to one, an interrupt event can occur at any time. If the ADMUX Register is changed in this period, the user cannot tell if the next conversion is based on the old or the new settings. ADMUX can be safely updated in the following ways: 1. When ADFR or ADEN is cleared. 2. During conversion, minimum one ADC clock cycle after the trigger event. 3. After a conversion, before the Interrupt Flag used as trigger source is cleared. When updating ADMUX in one of these conditions, the new settings will affect the next ADC conversion