16 Bit PWM Initialisierung Problem

Gast #2668077
Lesenswert?

Hallo,

Ich möchte die Ausgabefrequenz eines PWMs mit dem ATmega8 um 16bit genau
regeln. Dazu habe ich folgende Initialisierung gemacht:

void pwm_init(void)
{
         DDRB    = 0b00000010
         //Nur OC1A als Ausgang
  ICR1    = 30576;  //Bliebiger Wert
  TCCR1A  = (1<<WGM11)|(0<<WGM10)|(1<<COM1A1);
  TCCR1B  = (1<<WGM13)|(0<<WGM12)|(0<<CS10)|(1<<CS11)|(0<<CS12);
         //16bit, ICR1 Top, Prescaler /8
}

Ich bekomme allerdings nur einen 5V Pegel ausgegeben. Kann den Fehler
nicht finden, hat jemand einen Rat? Danke im Voraus.
Gast #2668089
Lesenswert?

Dann habe ich es nicht richtig verstanden? Ich dachte Durch TCR1 hat der 
Zähler seinen maximalen Wert vorgegeben? Das heißt er zählt immer von 0 
bis TCR1 bevor es sich zurücksetzt? Was hat OCR1A damit zu tun?
Gast #2668098
Lesenswert?

Jabu schrieb:
> Dann habe ich es nicht richtig verstanden? Ich dachte Durch TCR1 hat der
> Zähler seinen maximalen Wert vorgegeben? Das heißt er zählt immer von 0
> bis TCR1 bevor es sich zurücksetzt? Was hat OCR1A damit zu tun?

Stimmt, du hast es nicht richtig verstanden ;-)

Wenn du ins Datenblatt guckst, ist da eine Tabelle, die dir die WGM Modi 
aufzeigt. Du hast alle WGM Register gesetzt, also (in der Tabelle kurz 
nachgeguckt) eine FAST PWM, die als TOP OCR1A hat. Also musst du OCR1A 
einen Wert zuweisen.

ICR1 ist TOP, wenn du einen anderen Modi nimmst. Zum Beispiel CTC oder 
Phace Correct.
#2668103
Lesenswert?

PWM schrieb:
> Jabu schrieb:
>> Dann habe ich es nicht richtig verstanden? Ich dachte Durch TCR1 hat der
>> Zähler seinen maximalen Wert vorgegeben? Das heißt er zählt immer von 0
>> bis TCR1 bevor es sich zurücksetzt? Was hat OCR1A damit zu tun?
>
> Stimmt, du hast es nicht richtig verstanden ;-)
>
> Wenn du ins Datenblatt guckst, ist da eine Tabelle, die dir die WGM Modi
> aufzeigt. Du hast alle WGM Register gesetzt,

Nö hat er nicht.
Schau noch mal genau auf den Code
#2668106
Lesenswert?

Was habt ihr nur immer mit diesem bescheuerten Phase Correct PWM Modus? 
Will denn jeder benutzen, weil die Bezeichnung so cool klingt, oder wie 
ist das?


Im Phase Corrrect Mode gibt es eine Beschränkung. Der Compare Wert kann 
nicht kleiner als 3 sein. Du hast OCR1A nicht angerührt, also steht da 0 
drinnen. -> undefiniert was dann alles passiert.


Generell würde ich es nicht für eine besonders gute Idee halten, wenn 
man zum Testen einer PWM gleich auf die Extremwerte losgeht. Erst mal 
einen mittleren Compare Wert nehmen, fern ab von jeglichen möglichen 
Sonderfällen.

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