Gast
#322002
Hallo, ich wollte euch mal an meinen SLEEP Mode Erfahrungen mit dem AVR (atmega128) teilhaben lassen. Ich habe lange (sehr lange) nach der Ursache für dieses Problem gesucht. In der Software gibt es zwei Interrupts: a) ein Timer Interrupt (Timer 0). Dieser läuft periodisch und startet eine single ADC Wandlung. b) Den ADC EOC Interrupt. Dieser wird vom ADC EOC getriggert und dort werden die A/D Daten verarbeitet. Der ADC Interrupt kann von anderen Interrupts unterbrochen werden! Dieses Zusammenspiel von zwei Interrupts ist notwendig, weil mit dem ADC alleine nicht die erforderliche Abtastfrequenz einstellbar ist. Die Freigabe der Interrupts im ADC-Int. ist notwendig, da der ADC unbedingt äquidistant abtasten muss. Was hat das ganze mit SLEEP zu tun? -> ohne SLEEP gehts, mit SLEEP nicht. Dabei benutze ich SLEEP Fall den Idle-Mode. Was genau passiert, kann man auf dem beigefügten Bild sehen. Die Interrupt-Laufzeiten wurden jeweils über einen Port nach aussen signalisiert und aufgezeichnet. Irgendwie bringt der SLEEP Mode den ADC Interrupt durcheinander. Timer 0 läuft noch sauber durch, aber der ADC-Interrupt spielt verrückt. Eine Erklärung dafür habe ich derzeit noch nicht....
