das bsp. von Volvodani habe ich jetzt so verstanden und auch ausprobiert, dass die Variable "takt_ventCounter" immer erhöht wird, unabhängig vom Restprogramm und egal welchen Interrupt ich nehme. Ist diese Aussage so richtig?
int rpm_vent = 0;
int takt_vent = 0;
int lastTakt_vent = 0;
int takt_ventCounter = 0;
long previousMillis_vent = 0;
unsigned long currentMillis = 0;
int interval_vent = 10000;
void setup() {
Serial.begin(115200);
attachInterrupt(3, countup, FALLING); // Interrupt 3 Eingang ist beim Mega2560 Pin D20
}
void loop() {
currentMillis = millis();
if(currentMillis - previousMillis_vent > interval_vent) {
noInterrupts();
previousMillis_vent = currentMillis;
rpm_vent = takt_ventCounter * 3;
Serial.print("1/min ");
Serial.println(rpm_vent);
Serial.print("number of Puls: ");
Serial.println(takt_ventCounter);
takt_ventCounter = 0;
interrupts();
}
}
void countup(){
takt_ventCounter++;
}
Was ich nicht verstehe, wie hängen die Interrupts mit den Timern zusammen?
@mkl0815
Ist das nicht gefährlich die Timer zu manipulieren weil ich mal gelesen habe, dass z.B millis() Timer0 verwendet.
Folgendes bsp. habe ich gefunden:
// For Attiny85
// Author: Nick Gammon
// Date: 29 November 2012
void setup()
{
pinMode (0, OUTPUT); // pin 5 // OC0A
pinMode (1, OUTPUT); // pin 6 // OC0B
pinMode (4, OUTPUT); // pin 3 // OC1B
// Timer 0, A side
TCCR0A = _BV (WGM00) | _BV (WGM01) | _BV (COM0A1); // fast PWM, clear OC0A on compare
TCCR0B = _BV (CS00); // fast PWM, top at 0xFF, no prescaler
OCR0A = 127; // duty cycle (50%)
// Timer 0, B side
TCCR0A |= _BV (COM0B1); // clear OC0B on compare
OCR0B = 63; // duty cycle (25%)
// Timer 1
TCCR1 = _BV (CS10); // no prescaler
GTCCR = _BV (COM1B1) | _BV (PWM1B); // clear OC1B on compare
OCR1B = 31; // duty cycle (25%)
OCR1C = 127; // frequency
} // end of setup
void loop() { }
Hier sieht man wie man auf die Timer0, und Timer 1, zumindest beim tiny85, Einfluss nehmen kann . "//duty cycle" und "//frequency", verstehe ich ja noch. Aber wie die Zeilen für den "fast PWM Mode" aufgebaut sind oder die deklaration vom prescaler kapiere ich nicht, was ist z.B. "_BV"?
Ich habe Anhand vom Datenblatt versucht die Geschichte nachzuvollziehen, aber das ganze übersteigt meinen Horizont
