PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Timer1 16 Bit PWM



Felix H.
23.08.2011, 09:58
Hi,

ich habe einen Atmega16 und versuche gerade mit dem Timer1 ein 16Bit PWM zu realisieren. Ich verwende den Modus Nr. 10. Phase Correct PWM mit ICR1 als Top.



Tccr1a = &B10100010 'Timer1 PWM 16 Bit
Tccr1b = &B00010010 'PWM-Modus 10
Icr1h = &HFF
Icr1l = &HFF

Setze ich nun einen Beliebigen Wert in das OCR1AH und OCR1AL, kommt nichts am Ausgang raus. Mit dem Modus Nr. 3 funktioniert es bestens. Allerdings hab ich da auch nur 10Bit.

Lg

radbruch
23.08.2011, 11:35
PD5 ist ein Ausgang?

" However, note that the Data Direction Register (DDR) bit correspond-
ing to the OC1A or OC1B pin must be set in order to enable the output driver."

Vitis
23.08.2011, 12:15
In Hardware geht der 16-Bit-Timer nur bis 10 Bit, ist leider so ...
Du kannst aber ein halb Software, halb Hardware, 16 Bit PWM generieren indem Du den Timer als 16 Bit Timer laufen lässt
und je ein Interruptserviceroutine für Output Compare und Timerüberlauf schreibst, sprich bei OCR Pin setzen und bei Timerüberlauf zurücksetzen.
Aber die Wiederholfrequenz wird da nicht riesig sein ... 300-400Hz so in der Größenordnung

radbruch
23.08.2011, 12:27
"The PWM resolution for the phase and frequency correct PWM mode can be defined by either
ICR1 or OCR1A. The minimum resolution allowed is 2-bit (ICR1 or OCR1A set to 0x0003), and
the maximum resolution is 16-bit (ICR1 or OCR1A set to MAX)."

Mode 10 (WGM13 und 11 gesetzt) ist PWM, Phase Correct mit ICR1 als Top. Also müssten das auch 16Bit sein, oder?

Felix H.
24.08.2011, 14:15
Fehler gefunden =) zwischen dem Schreiben des TCCR1B und des ICR1 sollte eine kurze wartezeit erfolgen.



Tccr1a = &B10100010 'Timer1 PWM 16 Bit
Tccr1b = &B00010001 'PWM-Modus 10
!nop
!nop
!nop
Icr1h = &HFF
Icr1l = &HFF

Vitis
24.08.2011, 18:07
hmmm seltsam, das hatt ich dann damals im Datenblatt überlesen ... hätt mir viel Ärger erspart ....
muss ich erst mal testen