PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : PWM am Timer2



robodriver
06.01.2008, 10:37
Hallo Leute,

ich hab mal wieder eine PWM-frage. Die Suche weder hier noch bei Google hat mich weiter gebracht :(

Bisher verwende ich folgenden Code:



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

Pwm_rechts Alias Compare1a
Pwm_links Alias Compare1b

Do
Pwm_rechts = 100
Pwm_links = 200
Loop

End


Hat auch immer ast rein Funktioniert.
Jetzt brauch ich aber meinen Timer1 anderweitig, weil er einen Eingangs-Pin hat. Timer0 wird bereits verwendet, auch mit Eingangs-Pin.

Also bleibt mir nur noch übrig das PWM auf dem Timer2 zu generieren.
Aber: Wie geht das mit dem Timer2? Schon alleine die Zeile

Config Timer2 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8

Bringt mir einen Error. Gut, ich hab gelesen das man dann Pwm = on schreiben sollte. Das funktioniert auch soweit.
Und ein Compare2a und Compare2b gibt es nicht.
Dan dieser Stelle hab ich gelesen nimmt man dann OCR2.
Aber das ist doch dann nur ein einzelner Compare. Wie bekomm ich dann mein zweites PWM-Signal zustande und wie bringe ich die auf 2 verschiedene Ausgangs-Pins?
Kann man mit dem Timer2 auch irgendwie Compare1a und Compare1b verwenden? Laut Datenblatt hängen die ja auch am internen Bus...

Hoffe mir kann jemand weiter helfen.

Gruß Robodriver

Rofo88
06.01.2008, 10:55
Könntest Du noch sagen was für nen AVR du hast?

robodriver
06.01.2008, 10:57
oh, sorry. Hab ich vergessen:

Ein ATmega8

Rofo88
06.01.2008, 11:17
Der M8 hat nur 3 Hardware PWMs. 2x16 Bit Timer1 und 1x8 Bit mit Timer2. Also gibts für Timer2 nur einen PWM-Kanal.

robodriver
06.01.2008, 11:20
Ja gut, dann habe ich am Pin 17 ein PWM Signal.
Und wo greife ich dann das zweite PWM-Signal ab?

Vorher hab ich ja mit Compare1a und Compare1b gearbeitet, weil ich 2 PWM-Signale brauche die sich unabhängig voneinander einstellen lassen. also einer z.B. 100 und der andere 200.

Wo nehm ich bei Timer2 dann das 2. PWM-Signal her?
Das war ja meine Frage.

Rofo88
06.01.2008, 11:34
Niergendwo. Wenn der M8 nur 3 Hardware-Pwms hat und davon 2 auf dem Timer1 liegen bleibt nur noch einer für den Timer2 übrig. Da ist nur ein Ausgang für Timer2 und es gibt keinen 2ten!!!! [-(

robodriver
06.01.2008, 11:40
Hm okay.
Also kann ich mein PWM ganz offensichtlich nicht vom Timer2 erzeugen lassen... :(
Und der Timer 2 kann auch nicht die Compares vom Timer1 nutzen...

Nun gut, dann eine andere Frage:
Dann lass ich halt das PWM-Signal bei Timer1.
Aber ist es möglich den Timer2 als Counter zu verwenden und bei statuswechsel eines Pins eins hoch zählen zu lassen? Wobei wichtig ist: OHNE Interrupt bei dem die Software den Counter um eins erhöht.
Also das der Counter Hardwareseitig immer um eins erhöht wird?

Aber wenn ich das Datenblstt richtig interpretiere geht auch das nicht. Richtig?

Rofo88
06.01.2008, 21:14
Habe das Datenblatt jetzt nicht zur Hand aber ich dachte auch das es mit dem Timer2 keinen Counter gibt.

Lösung 1: Mit Timer2 ne Soft-PWM machen (braucht Interrupt)
Lösung 2: ATMega88 -> hat 6 Hardware-Pwms

robodriver
07.01.2008, 06:26
hey das mit dem Mega88 ist ne klasse Idee. Den kannte ich noch gar nicht. Und der ist sogar Pinkompatibel zum Mega8 :)

Werd dann aber sicher den Mega168 verwenden, da hab ich dann auch gleich noch mehr Flash zur Verfügung.

Super und vielen Dank nochmal für den Hinweis :)