Forum: Mikrocontroller und Digitale Elektronik PWM mit Atmega16 ohne CTC und Fast PWM


von Heinz (Gast)


Lesenswert?

Guten Abend, ich versuche gerade eine PWM mitmeinem Atmega16 zu 
erzeugen, allerdings kann ich CTC und Fast PWM nicht verwenden, da Fast 
PWM ja nicht auf 0 gehen kann und CTC ja immer ein 50/50 Signal ausgibt.

Was ich möchte ist eigentlich wie Fast PWM nur das es auch auf 0 gehen 
kann.

Soll heißen bei 255 soll TOP sein, und ich kann mit OCR1A den duty cycle 
einstellen.

Dabei fällt ja auch Phase correct PWM aus. und nun steh ich an, was ich 
machen sollte, das sollte doch funktionieren oder ? nur womit?

Danke !

Lg
heinz

von Karl H. (kbuchegg)


Lesenswert?

Heinz schrieb:
> Guten Abend, ich versuche gerade eine PWM mitmeinem Atmega16 zu
> erzeugen, allerdings kann ich CTC und Fast PWM nicht verwenden, da Fast
> PWM ja nicht auf 0 gehen kann

Na ja. Das ist jetzt aber Augenauswischerei.
Man kann die PWM ja auch invertieren, dann ereicht man den Full-Wert 
nicht aber dafür 0.

Allerdings kann man ja auch das hier machen.
Anstelle einer 0 ins OCR Register zu schreiben, genügt es ja auch den 
Timer einfach abzuschalten und den Ausgabepin händisch auf 0 zu setzen.
Oder eben umgekehrt, wenn man die PWM invertieren lässt, dann muss man 
sich händisch um den 100% Wert kümmern.
Welches davon einfacher ist, hängt dann auch davon ab, welcher Wert 
häufiger vorkommen wird.

von Heinz (Gast)


Lesenswert?

Ja das würde gehen, aber kann ich nicht auch mit Timer2 mit Phase 
correct PWM auch das erzeugen was ich möchte ?

von David K. (kresley81)


Lesenswert?

Da würde ich etwas in der Art schreiben:

im init:
1
DDRB |= 0x08; //als Ausgang definieren
2
PORTB &= ^0x08; //Ausgang auf low


und dann:
1
void SetPWM(int ocrValue)
2
{
3
   if (ocrValue == 0)
4
   {
5
      TCCR0 &= ^((1<<COM00)|(1<<COM01)); //Port disconnecten,
6
   }
7
   else
8
      OCR0 = ocrValue;
9
}

von David K. (kresley81)


Lesenswert?

Vergessen: im else muss der port natürlich wieder an den timer angehängt 
werden.

von Karl H. (kbuchegg)


Lesenswert?

David Kress schrieb:
> Vergessen: im else muss der port natürlich wieder an den timer angehängt
> werden.

Und natürlich den Pin vom Timer wegnehmen und auf 0 setzen.
Respektive im else dann natürlich wieder das Gegenteil: Pin wieder an 
den Timer koppeln.

von Heinz (Gast)


Lesenswert?

Hallo!

Danke für die Antworten, bringt mir das Vorteile gegenüber Phase and 
Frequency correct PWM ? Wo ich ja auch ICR als TOP Wert und mit OCR1A 
den Vergleichswert einstellen kann?

Lg
Heinz

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.