AVR: PWM zu langsam

Gast #3243150
Hallo!
Ich stehe gerade vor einem kleinen Problem und komme nicht weiter- 
irgendwo muss ein Denkfehler sein...

Ich möchte mit einem 16-Bit-Timer ein PWM-Signal erzeugen. Da mein 
Controller mit 16 Mhz läuft sollte der Zähler alle 4,1ms überlaufen 
(65.536/16.000.000).
Jetzt sehe ich aber am Oszilloskop, dass die PWM-Periode 8,2ms beträgt, 
also genau das Doppelte. Wo liegt der Fehler?
1
void pwm_init()
2
{
3
  // Timer4 PWM
4
    //Ausgangsports setzen
5
    DDRE |= (1<<PE4)|(1<<PE5);
6
    //Fast PWM, Modus 14, Prescaler 1, Kanal B und C
7
    TCCR3A = (1<<COM3B1)|(1<<COM3C1)|(1<<WGM32)|(1<<WGM31);
8
    TCCR3B = (1<<CS30)|(1<<WGM33);
9

10
    //Obergrenze des Zählers festlegen
11
    ICR3=0xFFFF;
12

13
    //PWM-Werte
14
    OCR3B = 16000;
15
    OCR3C = 32000;
16
}
Gast
Eigentlich sollten die Fuses richtig sein.
Die serielle Schnittstelle läuft auch problemlos- das sollte ja 
eigentlich nicht funktionieren wenn die Frequenz falsch wäre..
Wenn man wüsste welcher µC das ist, dann könnte man mal im Datenblatt 
nachsehen, ob das hier
1
    TCCR3A = (1<<COM3B1)|(1<<COM3C1)|(1<<WGM32)|(1<<WGM31);
2
    TCCR3B = (1<<CS30)|(1<<WGM33);
wirklich das ist, was der Kommentar verspricht.

Beim Mega128 jedenfalls ist es das nicht.
Da sind WGM30 und WGM31 im Register TCCR3A, WGM32(!) und WGM33 
allerdings im Register TCCR3B. Was allerdings nicht heißen muss, das es 
bei deinem µC auch so ist.
Karl Heinz Buchegger schrieb:
> Wenn man wüsste welcher µC das ist, dann könnte man mal im Datenblatt
> nachsehen, ob das hier
>
1
>     TCCR3A = (1<<COM3B1)|(1<<COM3C1)|(1<<WGM32)|(1<<WGM31);
2
>     TCCR3B = (1<<CS30)|(1<<WGM33);
3
>
> wirklich das ist, was der Kommentar verspricht.
>
> Beim Mega128 jedenfalls ist es das nicht.
> Da sind WGM30 und WGM31 im Register TCCR3A, WGM32(!) und WGM33
> allerdings im Register TCCR3B. Was allerdings nicht heißen muss, das es
> bei deinem µC auch so ist.


AH. ein M2560.
Bei dem ist es genau gleich.
-> Falsches Register erwischt.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 13 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.