Könntest Du noch sagen was für nen AVR du hast?
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:
Hat auch immer ast rein Funktioniert.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
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
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
Könntest Du noch sagen was für nen AVR du hast?
oh, sorry. Hab ich vergessen:
Ein ATmega8
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
Der M8 hat nur 3 Hardware PWMs. 2x16 Bit Timer1 und 1x8 Bit mit Timer2. Also gibts für Timer2 nur einen PWM-Kanal.
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.
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
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!!!! [-(
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?
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
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
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
Wer aufhört besser zu werden, hat aufgehört gut zu sein
Jeder I/O Port kennt drei Zustände: Input, Output, Kaputt
Lesezeichen