Forum: Mikrocontroller und Digitale Elektronik 16 Bit PWM Initialisierung Problem


von Jabu (Gast)


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.

von spess53 (Gast)


Lesenswert?

Hi

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

Vielleicht solltest du auch OCR1A initialisieren.

MfG Spess

von Jabu (Gast)


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?

von PWM (Gast)


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.

von Karl H. (kbuchegg)


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

von PWM (Gast)


Lesenswert?

Ach bah... Mein Fehler! Sorry! Hab nicht gesehen, dass du "0" gesetzt 
hast!

von spess53 (Gast)


Lesenswert?

Hi

Stimmt ICR1 ist der Top-Wert. Aber du brauchst auch einen Comparewert. 
Bei OCR1A=0 passiert nichts.

MfG Spess

von Karl H. (kbuchegg)


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.

von Ingo (Gast)


Lesenswert?

Er zählt bis ICR1 und vergleicht OCRnx  damit. Folgich brauchst du für 
16Bit deine 2^16 -1 im ICR1.


Ingo

von Jabu (Gast)


Lesenswert?

Moooment. Angenommen ich möchte 65Hz erzeugen. Ich führe die 
Initialisierung wie gezeigt durch. Mit welchen Werten muss ich ICR1 und 
OCR1A dann laden?

von Jabu (Gast)


Lesenswert?

Ich habe ICR1 nun auf 40000 gesetzt und OCR1A auf 30000. Der 5V Pegel 
ist immer noch konstant. Nix Frequenz.

von Karl H. (kbuchegg)


Lesenswert?

Jabu schrieb:
> Moooment. Angenommen ich möchte 65Hz erzeugen. Ich führe die
> Initialisierung wie gezeigt durch. Mit welchen Werten muss ich ICR1 und
> OCR1A dann laden?

Wie wärs mit ..... rechnen?

von Karl H. (kbuchegg)


Lesenswert?

Jabu schrieb:
> Ich habe ICR1 nun auf 40000 gesetzt und OCR1A auf 30000. Der 5V Pegel
> ist immer noch konstant. Nix Frequenz.

Dann wirst du wohl zum äussersten greifen müssen und dein komplettes 
Programm mal zeigen müsssen.

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.