Forum: Mikrocontroller und Digitale Elektronik AVR: Output Compare Pin initialisieren/setzen?


von Michael R. (Firma: Brainit GmbH) (fisa)


Lesenswert?

Guten Morgen allerseits,

folgendes problem: Erzeugung eines PWM-Signals auf einem Atmega328P mit 
Timer0 auf OC0B, aber ohne einen PWM-Modus (sobald PWM-Mode, werden 
die OCR-Register gepuffert, und ich muss "die andere Hälfte" des Timers, 
also OCR0A, laufend ändern)

Rein in Software mit zwei Interrupts (Einschalten bei Overflow, 
ausschalten beim Output Compare Match) kein Problem.

ich möchte das aber die Hardware machen lassen, dazu gibts ja die 
diversen WGM Modi.

Problem: Im Nicht-PWM Mode kann ich zwar per WGM den OC-Pin einschalten, 
ausschalten oder toggeln, aber nur im Output Compare, nicht bei 
Overflow.

Ich kann also per Hardware den Pin beim Erreichen von OCR0B ausschalten 
lassen, muss ihn aber händisch im Overflow-Interrupt wieder einschalten. 
Nun ist das Einschalten eines OC nicht ganz so einfach, weil der ja vom 
Port komplett getrennt ist. Zugriff auf PORTx geht also ins Leere.

Ich müsste das WGM umschalten auf "Set on Compare Match", dann per FOC 
einen Compare Match erzwingen, um dann das WGM wieder auf "Clear on 
Compare Match" umzuschalten.

Das ginge zwar, ist aber ziemlich viel Bit-Schubserei. geht das nicht 
einfacher?

ich könnte zwar statt Set/Clear gleich das Toggle verwenden, dann müsste 
ich im Overflow nur einen Compare match erzwingen, aber "nur" toggeln 
ist riskant wenn ich nicht sicher sein kann wie der Ausgangszustand ist.

Danke, Michi

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.