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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.