Mh ... ich versuchs jetzt einfach mal als Schuß ins blaue, da ich eigentlcih keine Ahnung von Basic für die µC hab:
Ist Full_current bekannt und zugriffsbereit in dem Interrupt?
Andun
Hallo!
Ich möchte die Auflösung einer Fast-PWM in einem INT0-Interrupt ändern und habe folgendes versucht:
Leider funktioniert es nicht auf diese Weise. Darf man die Register nicht direkt im laufenden Programm setzen? Oder muss noch etwas anderes beachtet werden? Im Datenblatt des Controllers (ATMegaCode:INT0_ISR: If Full_current Then Icr1h = 0 Icr1l = 63 Else Icr1h = 0 Icr1l = 255 End If ........weiterer Code...... Returnkonnte ich keine weiteren Hinweise finden!
Vielen Dank!
Mh ... ich versuchs jetzt einfach mal als Schuß ins blaue, da ich eigentlcih keine Ahnung von Basic für die µC hab:
Ist Full_current bekannt und zugriffsbereit in dem Interrupt?
Andun
www.subms.de
Aktuell: Flaschcraft Funkboard - Informationssammlung
Hi,
logisch ist Full_current bekannt, sonst hätte ich wohl ganz andere Probleme....
Dass Du keine Ahnung von Basic hast, spielt ja grundsätzlich keine Rolle für das Problem. Wenn das ganze in Assembler funktionieren würde, bekomme ich es hier auch hin.
Ruppi
Also in dem Code sehe ich keinen Fehler, und es funktioniert auch so.
Ich hab es schon mal zum laufen bekommen (ATMega32).
Es kommt nun noch drauf an wie du deinen Timer initialisiert hast!?
Kannst du das mal kurz schreiben?
Moin!
Ok, hier mal die Initialisierung des Timers:
Hier würde jetzt noch das Setzen der Register ICR kommen, was ich ja aber im Programm machen möchte. Auf diese Weise erzeugt man Fast-PWM mit einer Frequenz von 250kHz (bei 16MHz Quarz und 6Bit Auflösung).Code:Config Timer1 = Pwm , Prescale = 1 , Pwm = 8 , Compare A Pwm = Clear Up , Compare B Pwm = Clear Up Tccr1a = &B10100010 Tccr1b = &B00011001
Könnte es sein, dass der aktuelle Zählwert des Timers uzrückgesetzt wird, wenn man die ICR-Register neu beschreibt?
Vielen Dank, Ruppi
Versuch mal das PWM Signal nicht mit Bascom Befehlen zu initialisieren, sondern indem du die Bits in den Registern direkt setzt. Das geht auch in Bascom.
Du sagst auf der einen Seite, dass du eine variable Auflösung haben möchtest und setzt das Register, aber auf der anderen Seite initialisierst du das PWM mit 8Bit.
So wird das nicht funktionieren.
Schau einfach mal im Datenblatt in der Tabelle nach, und setzte die Bits "manuell".
Du täuscht Dich, das funktioniert. Es läuft ja wunderbar. Ich erzeuge exakt 150kHz Frequenz, wenn ich es so schreibe. Wenn ich die ICR-Register zu Programmbeginn beschreibe, ist auch alles in Ordnung. Das Ändern im Interrupt ist das einzige, was nicht geht.
Danke, Ruppi
Also laut deinem Code schriebst du zu Beginn die Register
Tccr1a = &B10100010
Tccr1b = &B00011001
Oder hast du da dann gleich mal auch das Register ICR1 beschrieben???
Ja, hatte ja geschrieben, dass ich anfangs zu Programmbeginn ICR1 beschrieben habe. Es taucht im Beispielcode nur nicht auf, weil ich die Register ja später im Interrupt beschreibe.
Dann versuch mal vor dem Beschreiben "Disable Timer1" und nach dem Beschreiben wieder "Enable Timer1".
Wenn das nicht geht, dann weiß ich leider auch nicht weiter...
Lesezeichen