Hey mare_crisium, holla Oberallgeier,

ich bin noch dran, habe aber noch kein Programm gesendet, da mir diese blöde Idee mit der Regelmässigkeit auch schon gekommen war.

Mein Ansatz geht / ging eher in die Richtung, dass ich die Störungen selber verursache, da ich, per Timer gestartet, ca. alle 2 Sekunden noch die Batterie messen lassen. (Auch die Taster können im Timer-Interrupt zu einer AD-Wandlung auf dem entsprechenden MUX-Kanal führen.)
Da aber die Messwertaufnahme aller oben angegeben ca. 50 Messwerte innerhalb von ein paar Millisekunden fertig ist, könnte dann höchstens nur eine einzige Störung über die Batteriemessung kommen.

Mittlerweile habe ich auch schon die Batteriemessung und auch die Taster weggelassen, aber nix da: Müll kommt immer noch.
Aktuell sieht es so aus, als ob der AVR einen INTERNEN Fehler hätte.
Ist ja so einfach, die Schuld auf andere zu schieben .


Los geht es zum starten der ADC-Messung im Timer-Interrupt:
- SIGNAL (SIG_OVERFLOW2)

Über die dort verwaltetet Variable "sens_i.adc_do_akt" versuche ich aber jede weitere 'Umstellerei' am einmal ausgewählten und gesetzten ADMUX-Wert zu verhindern.

Der Timer ermittelt (so mein Plan) nur dann den nächsten AD-Kanal, und würde den ADMUX ändern, wenn halt die gerade angestossene AD-Wandlung abgeschlossen ist.
Dafür ist am Ende der ADC-Interrupt-Funktion die Zuweisung:
- sens_i.adc_do_akt = ADC_DO_NICHTS;
vorhanden.

Sohnematz der 'Kleine' hatte eine gute Idee, dass ADC-Werte nur dann ausgewertet werden, wenn der geholte Wert auch zu dem erwarteten MUX-Kanal passt.
Meine 'Erwartungshaltung', welchen Kanal ich meine gestartet zu haben, halte ich ja in der Variablen "sens_i.adc_do_akt" fest.
Hierzu kann es dann nur einen MUX-Kanal geben, und wenn der halt nicht passt: Weg mit den Daten und neu versuchen.


Mittlerweile habe ich ein Test-Programm, mit dem man sowohl beim Starten (im Timer-Interrupt), als auch beim Abholen der AD-Werte (im ADC-Interrupt) Daten sammeln kann.
Es werden ca. 50 'Datensätze' gesammelt und dann zum PC gesendet.
In der Sendezeit werden alle Interrupt disabled, bzw. die Sensoren werden deaktiviert.
Nach dem Senden der 50 'Datensätze' geht das Spiel wieder weiter.
So kann ich nun kontinuierlich Daten bekommen.

Aber leider, leider sieht es so aus, dass immer noch nicht immer alles passt.
Da ich mal wieder immer noch in der Firma sitze, sende ich euch das Progrämmchen heute Nacht zu gewohnter Stunde.

Gruß Sternthaler