ATMeag2560 16-Bit PWM funktioniert nicht wie es soll.

Gast #3427015
Lesenswert?
• ▲
▼
Hallo,

ich versuche gerade eine 16-Bit PWM auf einem ATMega2560 zum laufen zu 
bekommen, was allerdings nicht richtig funktioniert.
1
  DDRB |= 0xFF;
2
  DDRE |= 0xFF;
3
  TCCR3A = (1<<WGM31) | (1<<WGM30) | (1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1); // PWM, phase correct, 16 bit.
4
  TCCR3B = (1<<WGM33) | (1<<CS31); // Prescaler 8;
5
  OCR3AH = 0x3F; // 50%
6
  OCR3AL = 0xFF;
7
  OCR3BH = 0x3A; // ?
8
  OCR3BL = 0x98;
9
  OCR3CH = 0xBF; // 75%
10
  OCR3CL = 0xFD;

Im AVRISP mkII ist unter Fuses SUT_CKSEL: EXTOSC_8MHZ_XX_16KCK_65MS 
eingetragen, daraus schließe ich dass der uC dann mit 8MHz rennt ?
Der uC läuft mit 5V.

Jetzt habe ich das Programm auf den uC übertragen und erhalte Folgende 
Werte:

OC3B : 4.533 V
OC3C : 0 V
OC3A : 4.950 V

OC3A ist jetzt schon bei 5V , daraus schließe ich dass der Timer nie 
meine Vorgabe im Register OCR3A erreicht, nur wieso ? Es ist doch ein 
16-Bit Timer.

Was ich auch ein wenig komisch finde ist, wenn ich einen Prescaler von 
64 einstelle ist das sehr langsam, habe nur ein Multimeter mit dem ich 
das überprüfen kann, aber die Spannung am Multimeter verändert sich 
sichtlich zu 0 und dann wieder auf 5 V !

Ich hoffe hier kennt sich jemand damit aus und kann mir weiter helfen.

Gruß
Gast #3427045
Lesenswert?
• ▲
▼
Hi

>  TCCR3A = (1<<WGM31) | (1<<WGM30) | (1<<COM3A1) | (1<<COM3B1) | (1<<COM3C1)
>  TCCR3B = (1<<WGM33) | (1<<CS31); // Prescaler 8;

Das ist zwar PWM, Phase Correct. Aber mit OCR3A als Top. D.h. OCR3a 
bestimmt die Zählweite des Timers und ist kein PWM-Kanal. Der Wert in 
OCR3A sind also deine 100%. Um mit OC3B und OC3C eine PWM zu erhalten 
müssen die Werte in den OC-Registern < OCR3A sein.

MfG Spess
Gast #3427121
Lesenswert?
• ▲
▼
Hi

>ich kann im Datenblatt leider keine anderen OC-Register außer die OCR
>Register gefunden...

Timer3 hat auch nur die drei OC-Register. Nur hat OCR3A im PWM-Mode11 
eine andere Funktion als du annimmst.

>Im AVRISP mkII ist unter Fuses SUT_CKSEL: EXTOSC_8MHZ_XX_16KCK_65MS
>eingetragen, daraus schließe ich dass der uC dann mit 8MHz rennt ?

Nein. Dein Controller läuft mit der Frequenz des angeschlossenen 
Quarzes.

>Was ich auch ein wenig komisch finde ist, wenn ich einen Prescaler von
>64 einstelle ist das sehr langsam,...

Mit deinen Einstellungen ist die PWM-Frequenz Controllertakt/1048576.

MfG Spess
Gast #3427130
Lesenswert?
• ▲
▼
Marcel schrieb:

> ich kann im Datenblatt leider keine anderen OC-Register außer die OCR
> Register gefunden...

Es gibt auch keine anderen.

> Ich möchte einfach nur eine PWM genereiren, die ich
> zwischen 0% und 100% verändern kann.

Dan lies' endlich mal das Datenblatt. Und zwar solange, bis du wirklich 
verstanden hast, was da beschreiben wird! Dabei kann dir niemand 
wirklich helfen, das kannst nur du alleine tun.

Das Problem ist, daß es die Timer ziemlich variabel einsetzbar sind. 
Reduziert auf die Nutzung in PWM-Modi gibt es aber prinzipiell nur drei 
verschiedene Fälle.

1) Feste Zyklusfrequenz, gewählt durch Timermode (nur durch Prescaler 
anpaßbar)

In diesem Fall stehen (sofern zwei vorhanden) beide PWM-Kanäle zur 
Verfügung und können via OCRxA (und OCRxB) gesteuert werden.

2) Zyklusfrequenz kontrolliert via ICRx

Auch in diesem Fall stehen (sofern vorhanden) beide PWM-Kanäle zur 
Verfügung und können via OCRxA (und OCRxB) gesteuert werden.

3) Zyklusfrequenz kontrolliert via OCRxA

In diesem Fall steht natürlich nur der PWM-Kanal zur Verfügung, der via 
OCRxB gesteuert wird, denn OCRxA kontrolliert ja bereits die 
Zyklusfrequenz.
Das ist genau dein Fall, wenn du auch den Kanal A nutzen willst, hast du 
schlicht den falschen Quelltext raubkopiert!

Also lies' doch endlich mal dieses verschissene Datenblatt, damit du 
wenigstens andeutungsweise in der Lage bist, zu erkennen, welchen Code 
du per Copy&Paste übernehmen mußt...

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.