OCA1 Toggle

Gast #106157
Lesenswert?

Hallo!

Ich lasse den OCA1 Pin mit 125 kHz mittels eines Compare Ereignises des
Timer1 toggeln. Dieses Toggeln schalte ich nun an und aus (über das Bit,
das den Pin OCA1 zuschaltet).

Das ganze funktioniert soweit auch recht gut. Nun möchte ich aber, dass
immer nur ganze Impulse heraus kommen. Also beim Abschalten darf der
Impuls nicht abgeschnitten werden. Er soll mit dem Abschalten warten,
bis der Pin auf Low liegt - dann kann er abschalten.
Ich habe es mit forlgendem Code probiert:
do {} while ((PORTD & (1 << PD5) != 0);
oder
do {} while ((PIND & (1 << PD5) != 0);

Es funktioniert allerdings beides nicht.

Beim Anschalten sollte es meiner Meinung nach immer ganze Impulse
geben, da der Pin ja immer bei einem Compare Ereignis getoggelt wird.
Ich lasse den Timer ja weiter laufen also müsste der erste Impus immer
vollständig sein - ist er aber meinem Oszi nach zu urteilen nicht immer
...

Woran kann das liegen und wie kann ich obiges Problem lösen?

Grüße
Steffen
Gast #106158
Lesenswert?

lass einen output-compare-Interrupt auslösen, das ist besser als den MC
die ganze Zeit mit einer PIN-Abfragen zu beschäftigen.
PortD geht aber nicht, da die Portlogik mit Freigabe an den Timer
überschrieben wird. Pin-Abfrage sollte aber gehen, weiss ich jetzt aber
auch nicht genau. Falls nicht, kannst du den OC-Pin zur Not auch an
einen Eingang legen. Ist es ein Int-Eingang, kannst du dir den OC-Int
sparen, direkt auf fallende Flanke triggern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren