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 | }
|