Forum: Mikrocontroller und Digitale Elektronik OCA1 Toggle


von Steffen (Gast)


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

von crazy horse (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.