Forum: Compiler & IDEs PWM und counter0 am ATmega16


von Tobias (Gast)


Lesenswert?

Hallo zusammen,
kann man den PWM und den counter0 des ATmega16 gleichzeitig benutzen? 
Ich bekomme es nämlich nicht hin. Und habe auch gelesen das PWM 
irgendwie immer den counter0 braucht, bin mir da aber nicht sicher. Wäre 
nett wenn mir einer von euch Experten mal sagen könnte ob es wirklich 
nicht geht und wenn doch wie man den counter0 in dem Fall initialisieren 
müsste.

Gruß, Tobias

von Krapao (Gast)


Lesenswert?

Grundsätzlich geht das. Du kannst auf dem Timer/Counter0 eine PWM in 
Hardware betreiben und dir zusätzlich einen Interrupt generieren lassen, 
wenn der TOP Wert des Timer/Counter0-Zählers erreicht wird. Schau dir 
die Timing-Diagramme im Datenblatt ab Figure 31 (im Datenblatt 
2466Q–AVR–05/08) an.

Diese Interrupts kannst du in einem Überlaufzähler zählen und hast damit 
einen Dauerzähler = Überlaufzähler*TOP-Wert+Zählerstand großen, stetig 
(*) weiter zählenden Wert (der gewünschte Counter).

Wenn du eine PWM mit wechselnder Frequenz machst, also dynamisch den 
Registerwert änderst, der als TOP-Wert genommen wird, wird die Formel 
entsprechend komplizierter bzw. kannst du mit Zwischensummen arbeiten. 
Ist aber weiter machbar IMHO.

(*) stetig, bis zum Überlauf des Ergebnisses dieser Formel natürlich. 
Das ist dann abhängig davon mit welchen Datentypen der Überlaufzähler 
und der Dauerzähler definiert wurden.

von Krapao (Gast)


Lesenswert?

Ähm, wenn du externe Ereignisse mit dem Counter0 zählst geht das IMHO 
so einfach nicht zusammen mit der PWM.

Man könnte aber versuchen pro externem Zählereignis einen Input Capture 
Interrupt auszulösen und die Zahl dieser IRQs in Software mitzählen. Das 
dürfte eine zeitgleich rennende PWM nicht stören. Der Atmega16 hat aber 
auf Timer/Counter0 keine ICP. Da müsste man auf Timer/Counter1 arbeiten. 
Und durch die Laufzeit im Programmcode der ISR sinkt die Höchstfrequenz 
mit der die Ereignisse noch sicher gezählt werden können.

von Tobias (Gast)


Lesenswert?

Es hat sich erledigt. Ich benutze jetzt einfach den PWM des counter2. 
Vielen Dank für dich Hilfe.

Gruß, Tobias

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.