Doppelter ISR Einsprung beim Analog Comparator?

#3321918
Lesenswert?

Hallo,

ich habe eine Frage zum AC beim ATMega88. Im folgenden Code 
(Dämmerungsschalter) soll eine LED leuchten, wenn die Vergleichsspannung 
am Pin AIN1 größer als die Referenzspannung am Pin AIN0 ist.
Das funktioniert soweit auch ganz gut!

Was ich aber noch nicht verstehe ist der doppelte ISR-Einsprung! Kann 
mir das bitte jemand erklären?

1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3

4
#define LED PC5
5

6
int main(void)
7
{
8
  DDRC = 0xFF;    //Richtungsregister PORTC auf Ausgang
9
  PORTC &= ~(1<<LED);  //LED OFF
10
  
11
  //Referenzspannung an AIN0 aktivieren, AC-Interrupt enable, Comparator Interrupt on output toggle
12
  ACSR = (1<<ACBG)|(1<<ACIE); 
13
  
14
  sei();        //Global Interrupt enable
15
  
16
    while(1)
17
    {
18
        
19
    }
20
}
21

22
ISR (ANALOG_COMP_vect)
23
{
24
  if ((ACSR & 0b00100000)==0)  // Wenn Bit ACO gelöscht ist
25
    PORTC |= (1<<LED);
26
  else
27
    PORTC &= ~(1<<LED);
28
}
#3322090
Lesenswert?

Ein Komparator ist (noch) kein Schmitt-Trigger.

Du könntest eine Hysterese programmieren, z.B. mit einem Ausgang und 
einem Widerstand.
Oder mit dem internen Pullup.

Du kannst aber auch eine Totzeit programmieren, z.B. mindestens 5min an 
bzw. aus.
Und wichtig!
Nach Ablauf der Totzeit vor Freigabe des Interrupts das Pending-Flag 
löschen (beim AVR also setzen).

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