Forum: Mikrocontroller und Digitale Elektronik InterruptProbleme


von Elektro Gandalf (Gast)


Lesenswert?

Hab ne statische Variable:
1
static volatile uint8_t watchdog;

Und eine Funktion die die impulse in während 1 ms zählen soll
1
uint8_t pruefeObSichWasTut(void)
2
{
3
  watchdog = 0;
4
  
5
  sei();          // Interrupt enable
6
  _delay_ms(1);   // Warte 1 ms
7
  cli();           // Interrupt disable  
8
  
9
  return watchdog;
10
}

und dann noch eine ISR:
1
ISR(INT1_vect) 
2
{
3
  ++watchdog;
4
}

Das funktioniert soweit auch ganz gut, daß Flanken erkannt werden.
Und jetzt die große Frage: Warum wird maximal bis 1 gezählt?
Also kommt keine Flanke an, wird 0 zurück gegeben.
Kommt eine oder mehr Flanken, wird 1 zurück gegeben. Auch wenn mehr als 
1 Flanke kamm.

von Karl H. (kbuchegg)


Lesenswert?

Das beschriebene Verhalten ist mit dem Codeausschnitt
nicht erklärbar. Der 'Fehler' muss also in den nicht gezeigten
Codeblöcken stecken.

von Peter D. (peda)


Lesenswert?

Elektro Gandalf wrote:

> Kommt eine oder mehr Flanken, wird 1 zurück gegeben. Auch wenn mehr als
> 1 Flanke kamm.

Woher weißt Du das ?

Ist deine Eingangsfrequenz wirklich weit über 1kHz ?

Und stimmen auch die Fuses und die F_CPU-Angabe für das Delay ?


Peter

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.