CDI Zündimpuls in 12V Digitalsignal umwandeln

Zündaussetzer, Seitenständerschalter, Lichtmaschine usw.
Tibor
Beiträge: 225
meble kuchenne Ruda Śląska Rybnik Tychy
Registriert: Mi 5. Jan 2011, 18:08

Re: CDI Zündimpuls in 12V Digitalsignal umwandeln

Beitrag von Tibor »

Moin,

keine Ahnung ob meine Posts einen Mehrwert bieten, aber ich will noch kurz den Code für einen Arduino UNO posten. Damit habe ich vorhin erfolgreich den Drehzahlmesser an der XT betrieben. Für einen ATTiny85 müsste man den noch auf TIMER1 umstellen. Da ein ATTiny85 mit einer anderen Taktfrequenz arbeitet, müssen auch noch prescaler und OCRx angepasst werden.

Code: Alles auswählen

#include <avr/sleep.h>

const uint8_t INPUT_PIN  = 2; // INT0
const uint8_t OUTPUT_PIN = LED_BUILTIN; // Pin 13

enum TimerState {
    OUTPUT_PULSE,
    IGNORE_PULSES
};

volatile TimerState timerState = OUTPUT_PULSE;

void isrInt0() {
  EIMSK &= ~(1 << INT0); // INT0 off

  TCNT2 = 0; // Reset TIMER2
  TIFR2 = (1 << OCF2A); // Clear compare flag
  OCR2A = 187; // ~3 ms
  TIMSK2 |= (1 << OCIE2A); // Activate TIMER2 compare interrupt
  TCCR2B = (1 << CS22) | (1 << CS21); // Set prescaler to 256

  digitalWrite(OUTPUT_PIN, HIGH);
}

ISR(TIMER2_COMPA_vect) {
  TCCR2B = 0; // Stop TIMER2
  TIMSK2 &= ~(1 << OCIE2A); // Compare interrupt off

  switch(timerState) {
    case OUTPUT_PULSE: {
      timerState = IGNORE_PULSES;

      digitalWrite(OUTPUT_PIN, LOW);

      TCNT2 = 0; // Reset TIMER2
      TIFR2 = (1 << OCF2A); // Clear compare flag
      OCR2A = 250; // ~4 ms
      TIMSK2 |= (1 << OCIE2A); // Activate TIMER2 compare interrupt
      TCCR2B = (1 << CS22) | (1 << CS21); // Set prescaler to 256
      break;
    }
    case IGNORE_PULSES: {
      timerState = OUTPUT_PULSE;

      EIFR = bit(INTF0); // Clear pending INT0 flag
      EIMSK |= (1 << INT0); // INT0 on
      break;
    }
  }
}

void setup() {
  pinMode(OUTPUT_PIN, OUTPUT);
  digitalWrite(OUTPUT_PIN, LOW);

  pinMode(INPUT_PIN, INPUT);
  attachInterrupt(digitalPinToInterrupt(INPUT_PIN), isrInt0, RISING);

  // Set TIMER2 to CTC mode
  TCCR2A = (1 << WGM21);
  TCCR2B = 0;
  TCNT2 = 0;

  set_sleep_mode(SLEEP_MODE_IDLE);
}

void loop() {
  sleep_mode();
}

Straßenschrauber
Beiträge: 1217
Registriert: So 29. Mär 2020, 21:38

Re: CDI Zündimpuls in 12V Digitalsignal umwandeln

Beitrag von Straßenschrauber »

Klar hat das Mehrwert. Leonhard kann damit was anfangen, denke ich.
Und andere, die versehentlich einen Drehzahlmesser für Unterbrecherzündung gekauft haben.
~-o|-

lowrider82
Beiträge: 2015
Registriert: Di 16. Okt 2007, 11:17

Re: CDI Zündimpuls in 12V Digitalsignal umwandeln

Beitrag von lowrider82 »

@Tibor
Auch ich finde das spitze! Auch wir XT-Fahrer leben im Jahr 2026 und sowas kann hilfreich sein.
Spendenkonto für den Forenbetrieb:
viewtopic.php?f=306&t=157066

Antworten