PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Hilfe beim Atmega644p, Timer 2 PWM



Felix H.
28.08.2010, 15:51
Hi,

ich möchte gern beim atmega644p die beiden Ausgänge für PWM nutzen. Pin 20 und 21. Leider blick ich bei den ganzen Fusebits im Datenblatt mal überhaupt nicht durch...

mit dem einfachen "config timer2 = pwm......" geht es leider nicht.

Den wert setze ich im Programm mit dem Befehl "OCR2A = X"

Kann mir jemand helfen? Ich will einfach nur die beiden PWM Kanäle mit clear down benutzen.

Gruß

Felix H.
28.08.2010, 16:22
habe gerade nochmal ins datenblatt geschaut und gesehen, dass beim 644p die beiden TOSC anschlüsse auf timer2 gehen! nicht wie sonst auf timer1. D.h. Timer2 ist mit meinem UhrenQuarz schon belegt.

Ich habe jetzt alles auf timer1 umverdrahtet. Dort geht es aber auch nicht^^

for_ro
28.08.2010, 19:27
Hallo Felix,
die TOSC Anschlüsse sind auf Pin 28+29, kommen deinem Timer2 also nicht in die Quere.
Zeig doch mal deinen Code, dann kann man besser helfen.

Felix H.
28.08.2010, 19:51
Hi,

die TOSC Anschlüsse gehen aber an Timer2. Da ich dort einen Uhrenquarz dran habe, blockiert dieser ja den Timer2 für weitere Verwendung. Daher habe ich es jetzt auf Timer1 ungekabelt. Pin 18+19.


Config Timer1 = Pwm , Pwm = 8 , Prescale = 256 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down

Tccr1a = &B10100001
Tccr1b = &B00000011
Timsk1 = &B00000111

und im code....

Ocr1ah = &B00000000
Ocr1al = dimmen1

Ocr1bh = &B00000000
Ocr1bl = dimmen2

for_ro
28.08.2010, 21:35
Config Timer1 = Pwm , Pwm = 8 , Prescale = 256 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down
Tccr1a = &B10100001
Tccr1b = &B00000011
Timsk1 = &B00000111

Mit
Tccr1b = &B00000011
überschreibst du den Prescale auf 64. Ist das gewollt?

Mit
Timsk1 = &B00000111
enablest du Interrupts. Ist das gewollt? Hast du die entsprechenden ISRs erstellt und über
On <interrupt> isr
dem Controller mitgeteilt? Wenn nicht, wird er dauern resetten.

Felix H.
29.08.2010, 14:17
Hi,

ich dachte die interrupts sind nötig... ich hab halt alles mögliche durchprobiert aber nichts hat funktioniert...

ja der prescale soll auf 64 stehen. Wenn ich Timsk1 = &B00000111 hinter dem config timer.... stehen habe wird das ja überschrieben oder?

Hilfe ich blick da nicht durch....

for_ro
29.08.2010, 15:26
ja der prescale soll auf 64 stehen.
Warum schreibst du dann nicht Prescale=64 in den Config Timer1 Befehl?


Wenn ich Timsk1 = &B00000111 hinter dem config timer.... stehen habe wird das ja überschrieben oder?
Ja schon, aber wenn du keine ISR anspringen willst, dann lass das Setzen von Timsk1 weg.

Felix H.
29.08.2010, 16:22
hi,

hab das jetzt rausgenommen... geht trotzdem nicht^^

for_ro
29.08.2010, 16:37
Zeig doch mal deinen ganzen Code, dann kann man den mal im Simulator ausprobieren.