Gast
#5799274
Nach längerem rätseln habe ich rausgefunden, warum meine ADCs so gerne in den Free Running Mode gehen, obwohl ich ADATE nicht gesetzt habe. Der Grund wird im Datenblatt nicht im Zusammenhang mit dem Symptom (anscheinend Free Running Mode) genannt, darum habe ich meine ADCs bisher nach jeder Messung abgeschaltet. Das ist nicht nötig, denn das seltsame Verhalten ist beabsichtigt... Falls noch jemand an dem Problem sitzt: Der Grund für den anscheinenden Free Running Mode ist eine Kombination hiervon: * Aus Gewohnheit lässt man den ADC eingeschaltet, um die wiederholte Initialisierung zu sparen. * Aus Gewohnheit setzt man den AVR in den Idle Sleep Mode, wenn main() nichts mehr zu tun hat, die Timer aber weiterlaufen müssen. * Aus Gewohnheit deaktiviert man die Interrupts nicht, weil man meint, die Interrupts unter Kontrolle zu haben. (ADIE Flag in ADCSRA) Was passiert? Der ADC wird dann und nur dann automatisch getriggert, wenn alle 3 Punkte zusammen auftreten! Leider völlig unabhängig von ADATE, und bei ADIE nicht erwähnt. Das ganze nennt sich „ADC Noise Canceler“. Lösung: Nach der letzten beabsichtigten Messung das ADIE-Flag löschen. Schon wartet der ADC geduldig auf ADCS. Danke, Atmel...