Gast
#4579949
Hallo, Ich stehe wohl gerade auf dem Schlauch. Ich möchte aus der differenz zwischen zwei Interrupts die Frequenz berechnen. Ich lege also ein Interrupt auf die steigende Flanke meines Signals. Nun messe ich die Zeit (in Mikrosekunden) zwischen den Interrupts. Die Zeit liegt zwischen 8,33Hz -> 120048 Mikrosekunden und 116Hz -> 8620 Mikrosekunden. Als Globale Variable ist timer1 und Tacho1 deklariert: uint32_t timer1 = 0; uint16_t Tacho1 = 0; Meine ISR sieht wie folgt aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
Als Prozessor nutze ich einen Arduino DUE (mit der Arduino IDE), also einen SAM3X8E. Jedoch bekomme ich nur ziemlich wirre und Wilkürliche ergebnisse heraus :(. Resette ich den Chip mit einem anliegendem Signal bei 116Hz bekomme ich bspw 61586 heraus. Ändere ich die Frequenz dann auf 20Hz springt die ausgabe auf 2 bzw läuft innerhalb von 10 sekunden auf 0, ändere ich die Frequenz wieder auf 116Hz bleibt die anzeige auf 0... Resete ich den Chip bei einer Frequenz von 20Hz startet er bei ungefähr bei einer hohen Zahl und läuft wieder gegen 0 (der Verlauf sieht logarithmisch aus). Mir kommt es so vor als würde da etwas überlaufen, kann das sein? Aber soweit ich gesehen habe gibt micros() ein unsigned long zurück, was einem uint32_t entspricht, oder? Grüße Peter