Klingt alles sehr praktikabel, aber auch sehr aufwändig gemessen an der Aufgabe. Rein gefühlsmäßig hätte ich einfach einen RC-Tiefpass rangeklebt und das Signal dann über den ADC eingelesen, das wäre deutlich weniger "tricky".
A propos "tricky", mir kommt gerade noch ein schmutziger kleiner Gedanke: Du kannst ja auch über mehrere Periodendauern messen:
1. Frequenz ermitteln, das geht für Tastgrade != 0%/100% recht einfach und genau.
2. Trigger auf steigende Flanke einstellen
3. Nach Auslösung Input Capture für eine halbe Periodendauer ausschalten
4. Trigger auf fallende Flanke einstellen
(Nach der Umschaltung jeweils zuerst das Interrupt-Flag zurücksetzen)
Warum hilft das?
Fall a) Tastgrad <= 50%: Du "verpasst" die fallende Flanke des (vielleicht zu) kurzen HIGH-Anteils und erfasst erst mit der nächsten fallenden Flanke insgesamt die Zeit einer Periode + Länge des (zweiten) HIGH-Anteils, zieht man die Periodendauer ab, bleibt nur noch der HIGH-Anteil übrig
Fall b) Tastgrad > 50%: Du misst direkt die Zeit des HIGH-Anteils, da er länger als eine halbe Periode dauert.
Relativ einfache Logik, keine zusätzliche Hardware nötig, ich glaube die Variante solltest du Mal ausprobieren.
mfG
Markus
Lesezeichen