PWM bestimmter Frequenz mit Timer1

Gast #3765773
Lesenswert?

Hallo,

ich möchte gerne mit Hilfe des Timer 1 vom ATmega32 mit 16MHz ein 
PWM-Signal mit einer Frequenz von 800kHz ausgeben, mit variablem 
Dutycycle.

Meine Idee war, die TCCR1A,B-Register folgendermaßen einzustellen:

- kein Prescaler -> 20 Takte entsprechen 1,25us und somit genau meiner 
gewünschten Frequenz
- Mode of Operation: CTC, mit TOP = ICR1, wobei ICR1 = 19 (Also: Springe 
bei 19 wieder auf 0. Details im ATmega32-Datenblatt auf Seite 109)

- und dann wollte ich Werte zwischen ~1 und ~18 ins OCR1A schreiben, um 
verschiedene Dutycycles zu erreichen (über CompareMatch), die mir über 
den Pin PD5 (OC1A) ausgegeben werden.

Hier der Code innerhalb meiner Funktion:
1
OCR1A = u16Pwm; // = vergleichsregister vom Timer1 bekommt Variable
2

3
ICR1 = 0x0013; // = 19, ICR1 beinhaltet den TOP-Wert, bei auf 0 gesetzt wird.
4

5
TCCR1A = _BV(COM1A1); // High->Low an OC1A bei CompareMatch
6
TCCR1B = _BV(WGM13) | _BV(WGM12) | _BV(CS10) ; // siehe DB S.109

Ergebnis: Der Timer zählt periodisch bis zu meinem gewünschten im ICR1 
angegebenen Wert, allerdings bekomme ich am OC1A keinerlei PWM-Output.

Meine Vermutung: Da ich ja im CTC-Modus arbeite, ist so eine PWM evtl. 
gar nicht möglich? Aber wie gehts dann?

Ich freue mich auf alle Tipps. Bin schon seit Stunden am rätseln.. :(
Gast #3765804
Lesenswert?

Max schrieb:
> Meine Vermutung: Da ich ja im CTC-Modus arbeite, ist so eine PWM evtl.
> gar nicht möglich?

Genau.

> Aber wie gehts dann?

Mach noch das WGM11 Bit in TCCR1A dazu. Dann kommst du in den Timer1 
Mode 14 - Fast PWM. Rest von deinem Programm könnte dann immer noch 
passen (hab jedoch die Timings nicht nachgerechnet)
Gast #3765843
Lesenswert?

Max schrieb:

> ich möchte gerne mit Hilfe des Timer 1 vom ATmega32 mit 16MHz ein
> PWM-Signal [...] ausgeben
[...]
> Meine Idee war
[...]
> - Mode of Operation: CTC

Merkst du's was?

Wie kommt man auf die unsinnige und absolut nicht naheliegende Idee, CTC 
zu wählen, wenn PWM gleichzeitig verfügbar und das Ziel ist?

Vollidiot oder Troll? Wähle!
Gast #3765864
Lesenswert?

c-hater schrieb:
> Max schrieb:
>
>> ich möchte gerne mit Hilfe des Timer 1 vom ATmega32 mit 16MHz ein
>> PWM-Signal [...] ausgeben
> [...]
>> Meine Idee war
> [...]
>> - Mode of Operation: CTC
>
> Merkst du's was?
>
> Wie kommt man auf die unsinnige und absolut nicht naheliegende Idee, CTC
> zu wählen, wenn PWM gleichzeitig verfügbar und das Ziel ist?
>
> Vollidiot oder Troll? Wähle!

Für diesen Beitrag (Author: c-hater) kann ich mich nicht entscheiden. 
Konstruktiv finde ich ihn nicht.
Gast #3765896
Lesenswert?

c-hater schrieb:
> Löchrig schrieb:
>
>> Konstruktiv finde ich ihn nicht.
>
> Dann ist dir der springende Punkt wohl mangels Kompetenz vollkommen
> entgangen.

Im nun funktionierenden Code von Max mit Timer1 Mode 14 ist CTC 
sozusagen mit dem CTC Bit und dem ICR1 als Top enthalten. Ist dir das 
entgangen?

Max war selbst sehr nah dran und es hat ihm nur die noch die kleinste 
Informationseinheit in der ganzen Digitalwelt an der richtigen Stelle 
gefehlt. Ihn kann ich nicht als Troll oder Vollidiot erwählen.
Gast #3765928
Lesenswert?

Löchrig schrieb:

> Im nun funktionierenden Code von Max mit Timer1 Mode 14 ist CTC
> sozusagen mit dem CTC Bit und dem ICR1 als Top enthalten.

Häh? Welches CTC-Bit? Mode 14 ist FastPWM. Und ich kann in den 
Registerdeklarationen des Datenblatts des Mega32 auch keinerlei Hinweise 
auf irgendein ominöses "CTC-Bit" finden.

> Ist dir das
> entgangen?

Wie soll einem etwas entgehen können, was nicht existiert?

> Max war selbst sehr nah dran und es hat ihm nur die noch die kleinste
> Informationseinheit in der ganzen Digitalwelt an der richtigen Stelle
> gefehlt.

Wenn das so war (ich hatte keinen Lust, den ganzen Troll-initiierten 
Thread zu lesen), dann hat ihm nicht das gefehlt, was du hier so 
blümig-verschraubt beschreibst, sondern nur eins: ein Blick in's 
Datenblatt.
Gast #3765953
Lesenswert?

c-hater schrieb:
> Löchrig schrieb:
>
>> Im nun funktionierenden Code von Max mit Timer1 Mode 14 ist CTC
>> sozusagen mit dem CTC Bit und dem ICR1 als Top enthalten.
>
> Häh? Welches CTC-Bit? Mode 14 ist FastPWM. Und ich kann in den
> Registerdeklarationen des Datenblatts des Mega32 auch keinerlei Hinweise
> auf irgendein ominöses "CTC-Bit" finden.
>
>> Ist dir das
>> entgangen?
>
> Wie soll einem etwas entgehen können, was nicht existiert?

Datenblatt zum ATmega32. Vielleicht magst du einen Blick hineinwerfen?
http://www.atmel.com/images/doc2503.pdf

Hab noch die Tabelle 47 daraus als Bild angehangen. Gut, es ist das CTC1 
Bit, zwar ist der Name obsolet aber noch vorhanden.
Angehängte Dateien:

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