Möchte mit dem duemilanove Drehzahlen vom Elektromotor mit Hallgebern messen.Hab schon mit dem PulseIn Befehl schnell Ergebnise bekommen. Allerdings eignet sich das ganze nicht, da bei ganz kleinen Drehzahlen die Zeiten zu lang werden.Hab mich hier durchs Forum gelesen und es mit interrupts und micros()versucht zu lösen. Hab den Code aus dem Internet und für meine Aufgabe angepasst ..Aber über den Seriell-Monitor bekomm ich keine vernünftigen Werte raus.Hat jemand ne Idee oder einen Tip?
1 | void setup() { |
2 | pinMode(2, INPUT); // Eingangspin auf Eingang |
3 | |
4 | attachInterrupt(0, readmicros, RISING ); // Interrupt 0 auf Routine |
5 | }
|
6 | |
7 | volatile unsigned long dauer=1; // microsekunden |
8 | volatile unsigned long last=0; // Zählerwert |
9 | long drehzahl; // selbstredend |
10 | char buf[17]; // Pufferstring für sprintf |
11 | |
12 | void loop() { // Hauptprogramm |
13 | drehzahl = 60000000 / dauer; // Drehzahl ausrechnen und |
14 | sprintf(buf, "%5lu", drehzahl); // als 5 Zahl in den Puffer |
15 | serial.println(buf); // Puffer ausgeben |
16 | delay(500); // Eine halbe Sekunde warten |
17 | }
|
18 | |
19 | void readmicros() { // Interrupt-Routine |
20 | unsigned long m = micros(); // Microsekunden auslesen |
21 | dauer = m - last; // Differenz letzte |
22 | last = m; // Letzten Wert merken |
23 | }
|