Forum: Mikrocontroller und Digitale Elektronik Atmega128 Analog Comparator Interrupt Flag löschen


von AFauEr (Gast)


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.

von spess53 (Gast)


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.