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.
Hoffe, ich habe jetzt nichts wesentliches vergessen.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; }
Gruß m.a.r.v.i.n







Zitieren

Lesezeichen