Guten Tag, ich finde den Fehler einfach nicht. Ich möchte eine Steigende Flanke bei einem ATmega644 durch den externen ICP Pin abfangen mit dem Timer1. Es muss eine Zeit gemessen werden. Wenn ich das Programm in AVR Studio 6 simuliere und beim Timer1 das ICF1 Flag per Hand setze wird es beim nächsten Schritt einfach wieder zurück gesetzt und die Interruptroutine wird nicht angesprungen. Ich habe vorher mal die Overflow routine des Timers getestet und sie hat funktionert. Wo ist der fehlende Hacken? Optimierung ist ausgeschaltet.
1 | #include <avr/io.h> |
2 | #include <avr/interrupt.h> |
3 | |
4 | int main (void) |
5 | {
|
6 | |
7 | TIMSK1= 1<<ICIE1; //Capture Input Enable |
8 | TCCR1B=((1<<CS10)|(1<<ICES1));//Positive Flanke auswählen und eine Clocksource |
9 | |
10 | sei(); |
11 | int a=23; |
12 | while(1){ |
13 | a++; //irgendwas machen und auf ext Interrupt warten |
14 | }
|
15 | }
|
16 | |
17 | ISR(TIMER1_CAPT_vect){ |
18 | int b=20; |
19 | |
20 | }
|
Viele Grüße