Dann bleiben eigentlich nur Interrupts - gaaaanz grob würd´ ich es etwa so machen:Ja, der Chip sollte noch was machen.
Der Original-Impuls wird auf einen Interrupt-Eingang gelegt, der auf wechselnde Flanke konfiguriert ist.
In der ISR wird abgefragt, ob der PIN 1 oder 0 ist.
Wenn der Pin gerade 1 ist, dann wird der Ausgangs-Port (beliebig) auf 1 gesetzt, ein Timer gestartet und dann return.
Wenn der Pin 0 ist, wird der wird der Timer gestoppt, sein Wert an eine Variable übergeben und der Timer auf 0 gesetzt. Diese Variable wird z.B. durch 10 geteilt (für 10%) und in das Output-Compare-Registers des Timers geschrieben. Der Timer wird gestartet und der Output-Compare-Interrupt freigegeben, und return.
In der Output-Compare-ISR (die logischerweise nach weiteren 10% Zeit erreicht wird) passiert folgendes:
Der Ausgangs-Port wird auf 0 gesetzt, der Timer gestoppt und auf 0 zurückgesetzt. Und, ganz wichtig, den Output-Compare-Interrupt deaktivieren, damit er beim "langen" hochzählen während des nächsten Impulses nicht "zuschlägt". Und return!
Ich hoffe, dass das jetzt nicht zu wirr war![]()
Gutes Gelingen!
Lesezeichen