Forum: Mikrocontroller und Digitale Elektronik PWM bestimmter Frequenz mit Timer1


von Max (Gast)


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.. :(

von Löchrig (Gast)


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)

von Max (Gast)


Lesenswert?

Es funktioniert! So nah dran :)

Vielen Dank für die schnelle Hilfe.

von c-hater (Gast)


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!

von Max (Gast)


Lesenswert?

Auch dir danke ich für die schnelle und nette Antwort, c-hater.

oh mann :)

von Löchrig (Gast)


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.

von c-hater (Gast)


Lesenswert?

Löchrig schrieb:

> Konstruktiv finde ich ihn nicht.

Dann ist dir der springende Punkt wohl mangels Kompetenz vollkommen 
entgangen.

von Löchrig (Gast)


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.

von der alte Hanns (Gast)


Lesenswert?

Wirklich ein bemerkenswerter Fall. Es scheint sich um eine Art 
Schreib-Tourette-Syndrom zu handeln.

von c-hater (Gast)


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.

von Löchrig (Gast)


Angehängte Dateien:

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.

von ?!? (Gast)


Lesenswert?

Du solltest nicht 'c-hater ' heißen, sondern 'all-hater' oder 
'self-hater'. Das würde viiiel besser passen :-)

Allen anderen ein schönes Wochenende.
Und dir gute Besserung!

von Englishman (Gast)


Lesenswert?

“Never argue with an idiot. They will only bring you down to their level 
and beat you with experience.”

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.