Interrupts als input Zähler

Hallo zusammen,

Ich habe den Auftrag erhalten 24 Impulse zu zählen und wenn diese angekommen sind, ein EIN Signal zu produzieren, welches eine beliebige Zeit betragen kann (Abfallverzögerter Impuls).

Könnte mir jemand vielleicht mit der Aufgabe helfen?

Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden.
Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben

Wie man dieses Forum benutzt - bitte lesen


Welches Arduino verwenden Sie?

Das IDE Beispiel

https://www.arduino.cc/en/Tutorial/BuiltInExamples/StateChangeDetection

"zählt" bis 4 und schaltet dann eine LED um.

ich denke das kannst du gut als Ausgangsbasis verwenden um bis 24 zu zählen.

p.s.: die Aufgabenstellung scheint mir unvollständig. Bitte schreibe die komplette Aufgabe mit allen Nebenbedingungen rein.

Für einen gängigen Arduino (AVR) könnte der folgende Code funktionieren:

const byte eingabePin = 2;           // Pin, an dem die Impulse erkannt werden
const byte ausgabePin = 3;           // Pin für das Ausgangssignal

volatile int impulseZaehler = 0;     // Variable zur Zählung der Impulse

void setup() {
  pinMode(eingabePin, INPUT);        // Pull-down
  pinMode(ausgabePin, OUTPUT);
   // Interrupt für steigende Flanke
  attachInterrupt(digitalPinToInterrupt(eingabePin), zaehleImpulse, RISING);
}

void loop() {
  noInterrupts();                    // Interrupts deaktivieren
  int zaehlerKopie = impulseZaehler; // Kopie von impulseZaehler erstellen
  interrupts();                      // Interrupts aktivieren

  if (zaehlerKopie >= 24) {          // Überprüfen, ob 24 Impulse gezählt wurden
    digitalWrite(ausgabePin, HIGH);  // Ausgangssignal einschalten
    delay(10);                       // Beliebige Zeitverzögerung (hier 10 ms)
    digitalWrite(ausgabePin, LOW);   // Ausgangssignal ausschalten

    noInterrupts();                  // Interrupts deaktivieren
    impulseZaehler -= zaehlerKopie;  // Kopie von impulseZaehler abziehen
    interrupts();                    // Interrupts aktivieren
  }
}

void zaehleImpulse() {
  impulseZaehler++;                  // Impulszähler erhöhen
}

Danke für die Hilfe.

Die genau Aufgabenstellung lautet:
Ich bekomme 24 Impulse von einer externen Quelle. Diese muss ich im Arduinoprogramm erfassen. Dann das Signal auf die Arduino übertragen (z.B mit einem Optokoppler) und zu guter letzt ein Ausgangssignal produzieren, welches eine beliebige Abschaltverzögerung z.B von 5 millisekunden haben kann.

Es sieht aus wie ein Schulprojekt... ??

Wie schnell kommen die? Beliebige Pausen dazwischen? Warum willst du Interrupts benutzen? (Die machen meistens mehr Probleme wie sie lösen.)

Das ist doch ein Widerspruch in sich. Wenn das Arduinoprogramm die Impulse erfasst, ist die Info ja schon im Arduino. Wieso willst Du das dann erst in diesen über Optokoppler übertragen? Ist die Aufgabe so grauenvoll gestellt worden oder hast Du sie nur falsch interpretiert.

Gruß Tommy

Das Signal soll per Opto auf einen Arduino übertragen werden.
Das kann man durchaus richtig verstehen.
Lediglich das Wort 'dann' verwirrt etwas, 'dazu' wäre wohl besser.

So herum wird etwas Sinnvolleres draus.
Aber ich nehme erst mal die Aufgabenstellung, wie sie uns gegeben wird. Wir haben hier ja schon viel Mist erlebt.
Wenn man schon die Aufgabe nicht richtig abschreiben kann, sehe ich für die Programmierung mindestens dunkelgrau :wink:

Gruß Tommy

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.