Atmega128 Analog Comparator Interrupt Flag löschen

Gast #3506532
Lesenswert?

Hallo zusammen,

ich habe ein Problem mit dem Analog Comparator des Atmega128. Ich habe 
den Interrupt bei steigender Flanke aktiviert:
1
/* Analog comparator initialization*/
2
void AC_Init()
3
{
4
  /*AC "first off", interrupt enabled, interrupt on rising output edge*/
5
  ACSR = (1<<ACD)|(0<<ACBG)|(1<<ACIE)|(0<<ACIC)|(1<<ACIS1)|(1<<ACIS0);
6
}

Wenn ich die ISR ausführe, möchte ich beim ersten Durchlauf einen Zähler 
inkrementieren, 100ms warten und danach die ISR verlassen. Ist der 
AC-Ausgang immer noch "high", dann soll im nächsten Aufruf der ISR etwas 
ausgeführt werden. Dazu wollte ich beim ersten Aufruf der ISR die 
Interrupt Flag ACI löschen, doch ich habe festgestellt, dass diese 
bereits direkt nach dem Aufruf gelöscht wird. Also müsste die ISR doch 
nach Durchlauf des ersten ISR-Aufrufs erneut aufgerufen werden, da der 
AC-Ausgang immer noch "high" ist. Aber es passiert leider kein zweiter 
Interrupt nach Durchlauf des ersten ISR-Aufrufs. Hier die ISR:
1
ISR(ANALOG_COMP_vect)
2
{  
3
  cli();
4

5
  counter++;
6

7
         ACSR &= ~(1<<ACIE);/*deactivate analog comparator interrupt*/   
8
  if(counter == 2)
9
  {
10
            //Hier soll etwas ausgeführt werden
11
  }
12
  else{_delay_ms(100);}
13
  
14
         sei();
15
         ACSR |= (1<<ACIE); /*activate analog comparator interrupt*/ 
16
}

Habe es auch schon mit deaktivieren und erneuten aktivieren des AC 
versucht aber es bracht keine Veränderung. Habt ihr eine Idee woran es 
liegen könnte?

Vielen Dank und viele Grüße.
Gast #3506545
Lesenswert?

Hi

>Also müsste die ISR doch
>nach Durchlauf des ersten ISR-Aufrufs erneut aufgerufen werden, da der
>AC-Ausgang immer noch "high" ist.

Der Interrupt nur bei einer Änderung (Toggle) oder einer steigenden bzw. 
fallenden Flanke von ACO ausgelöst. Statisches ACO löst keinen Interrupt 
aus.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren