Das Programm ist ein Beispiel. Du musst die einzelnen Register ändern. Diese findest du im DB (Datenblatt). Die verwendeten Register im Beispiel ist "TCCR2" und "TIMSK". Du musst das Programm jetzt ändern.
Ich verwende dieses DB http://www.atmel.com/dyn/resources/p...ts/doc2593.pdf
Ab Seite 60 fängt das Kapitel Externe Interrupts an.
Du musst jetzt die richtigen Register heraussuchen. Z.B. das EICRA, EIMSK
Wenn du jetzt den INT 0 mit steigender Flanke verwenden willst musst du das in den entsprechenden Registern einstellen.
Code:
.........
EICRA |= (1<<ISC00) | (1<<ISC01);
EIMSK |= (1<<INT0);
.....
sei();
......
while(1)
{
.....
}
Es gibt aber auch noch andere Interrupts. Z.B. die PCINT (Pin Change Interrupts). Diese reagieren auf einen Flankenwechel (egal ob rising oder falling edge).
Die ISR musst du natürlich auch ändern. Das wirst du aber schon schaffen. Man sollte zwar nicht zuviele Zeilen in der ISR haben, aber wenn es nur z.B. 5 Zeilen sind mache ich die Auswertung direkt in der ISR. Wenn man mehr machen muss sollte man es so machen, wie im nächsten Beispiel im Link, den ich vorher gepostet habe (UART Beispiel).
PS: Wenn man mit Interrupt arbeitet muss man die Interrupts freigeben. Eine generelle Freigabe wir mit "sei();" gemacht, man kann es aber auch sperren, das ist wichtig wenn etwas wichtiges auf keinen Fall unterbrochen werden darf. Dieser Befehl lautet "cli();". Etwas das auch wichtig ist ist bei der Deklaration von Variablen das "volatile". Für was das ist gibt es Google.
MfG Hannes
Lesezeichen