Hallo! Ich habe vor, Pulse zu zählen. Mein Grundprinzip wäre: einen Interrupt auszulösen bei rising edge (an int0) Dieser zählt dann eine countervariable hoch. um ein Timing reinzubekommen, würde ich via timer0- interrupt über ein flag das zählen einschalten bzw. ausschalten. Ziel ist, innerhalb einer(relativ langen) Zeit die Anzahl der Pulse zu zählen. Die Frequenz brauche ich nicht, wäre eh nur ne Umrechnung. Gibts bessere Prinzipien? ps. ca 3-30 Pulse innerhalb von 3 minuten.
du kannst auch die Danegger'sche Debounce-Routine nehmen und im Timer-Interrupt die Flanken zählen. Ich habe die mal in einer Decoder-Routine leicht umgeschrieben, damit die Bedeutung der Bits klarer wird - edge enthält eine 1 für jede Flanke auf einem Pin, pos_edge und neg_edge jeweils for eine positive bzw negative Flanke. Du brauchst nur mehr auf pos_edge zu testen, bei 1 einen Zähler hochzählen und das bit resetten. Ob entprellt wird, habe ich noch optional gemacht. War experimentelles Erforschen eines Quadratur-Encoders, geht wunderbar. Das ganze wird bei mir alle 50usec aus einem Timer-Interrupt aufgerufen. Damit hast Du auch automatisch mehrere gleich arbeitende eingänge. -Michael void update_encoder() // 1ms for manual movement { static byte ct0, ct1; byte edge,pos_edge, neg_edge; char n, diff, enc_delta; // encoder pins changed ? edge = port_state ^ ~(encoder0Port & encMask); if (debounce) { ct0 = ~( ct0 & edge ); // reset or count ct0 ct1 = ct0 ^ (ct1 & edge); // reset or count ct1 edge &= ct0 & ct1; // count until roll over ? } port_state ^= edge; // then toggle debounced state pos_edge = port_state & edge; // bit set: positive edge detected neg_edge = ~port_state & edge; // bit set: neagtive edge detected ....
Hallo max 30 Impulse pro 3 Minuten => 10 Imp. / Min. => 6s/Imp macht also alle 3 sec. einen Flankenwechsel. Was für ein Tastverhältniss hast du? Kann mann so machen. Ein ausschalten des Interrupts ist nicht nötig. Interrupts sperren, Zähler auslesen und rücksetzen, wieder freigeben. Dann verpasst du keinen Interrupt. Pollen würde aber auch gehen.
gast schrieb:
> Gibts bessere Prinzipien?
Im Prinzip schon ;)
Ne mal im Ernst, du könntest den externen Zähleingang eines der Timer
nutzen wenn du dir das Hochzählen sparen willst, du könntest auch den
ICP Funktion nutzen, aber für so "gemütliche" Anzahl von Pulsen reicht
auch der Interupt, nur wenn die QUelle prellt solltest du das
berücksichtigen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.