Arduino Drehzahlmesser, Hallsensor + 1.2" 7-segment Backpack Anzeige

Hi

Wenn Du mir schreibst, was Du bereits über den Kram, Den ich erwähnte, rausgefunden hast - warum nicht?
Allerdings ist Das hier kein 'schreib mir einen SKetch für mein Problem'-Forum, sondern Hilfe zur Selbsthilfe.

In der ISR brauchst Du keine atomaren Zugriffe - zumindest der AVR kann nur einen Interrupt zur gleichen Zeit.

  • die Variable Deines Zähler in uint16_t statt byte ändern (also den Typ, ergibt dann 16Bit Breite)
  • vor dem Auslesen der Variable in Deiner loop() die Interrupts sperren, also
    noInterrupts();
    Dann die Variable auslesen, die Variable Null setzen.
    interrupts();
  • durch das interrupts(); erlaubst Du die Interrupts wieder und wir haben in kürzester Zeit unseren Wert sauber gelesen.
    DANACH erst mit dem Wert arbeiten - Zeit ist Geld - und in der Zeit, wo die Interrupts verboten sind, kann ein Impuls kommen.
    Das ist aber noch kein Problem, sobald die Interrupts wieder zugelassen sind, wird Dieser 'nachgeholt' - aber blöd, wenn in der Zeit zwei Interrupts kämen - dann geht Einer verloren!

Eigentlich ist Das bereits die Umschrift Deines Sketch - halt in Worten zur Selbsthilfe statt als Code zum kopieren - Nachteil: man lernt selber was dabei ... und ja, man braucht ein/zwei Minuten zum Umschreiben :wink:

MfG