Hallo Manuel,
hier ist mal ein Beispielcode (ungetested) für dein Problem.
Funktionsweise:
*Es wird eine Globale Variable PulseCnt deklariert.
*In der Initialisierungs Routine wird für Port PD2 (INT0) Interrupt bei steigernder Flanke enabled.
*In der Interrupt Funktion SIGNAL(SIG_INT0) wird einfach nur PulseCnt erhöht.
*In der Main Funktion des Programmes kann man PulseCnt dann auswerten. Da nur auf steigende oder fallende Flanke getriggert werden kann, müßte man in diesem Fall auf den Wert 120 abprüfen, nicht 240.
Code:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdlib.h>
unsigned int PulseCnt;
SIGNAL(SIG_INT0)
{
PulseCnt++;
}
void Init(void)
{
DDRD |= (1 << DDD2); // Port D2 als Eingang
MCUCR |= ((1 << ISC01) | (1 << ISC00)); // Steigende Flanke generiert Interrupt
GICR |= (1 << INT0); // Erlaube externen Interrupt 0
sei();
}
int main(void)
{
Init();
while(1)
{
if (PulseCnt >= 120) // mind. 120 High Flanken
{
PulseCnt = 0;
; // Tue irgendwas sinnvolles
}
}
return 0;
}
Hoffe, ich habe jetzt nichts wesentliches vergessen.
Gruß m.a.r.v.i.n
Lesezeichen