Hi, ich benutze beim ATtiny2313 den Timer1 um per Compare Match nach 4096 Timer-Takten den Ausgang OC1A pünktlich setzen zu lassen. In einer weniger zeitkritischen Routine arbeite ich darauf hin ein paar Dinge ab und möchte den Ausgang wieder rücksetzen und den Timer neu starten. D.h. COM1A1 und COM1A0 sind 1. Set OC1A/OC1B on Compare Match (Set output to high level). Das funktioniert auch. Nur einmal gesetzt scheint der Ausgang ewig high zu bleiben. Wenn ich TCNT1 = 0 setze wird er jedenfalls nicht resettet. Mit aktivierem Compare Match Output kann ich aber auch auf die normale Portfunktion nicht mehr zugreifen. Ehrlich gesagt finde ich keine Stelle im Datenblatt, aus der klar hervorgeht, wann genau der Compare Match Output überhaupt wieder zurückgesetzt wird. Wo finde ich das? lg
COM-Bits auf "Clear on Compare Match", dann ein "Force Output Compare".
Paul H. schrieb: > Das funktioniert auch. Nur einmal gesetzt scheint der Ausgang ewig high > zu bleiben. Wenn ich TCNT1 = 0 setze wird er jedenfalls nicht resettet. Logisch. Warum sollte er auch? > Ehrlich gesagt finde ich keine Stelle im Datenblatt, aus der klar > hervorgeht, wann genau der Compare Match Output überhaupt wieder > zurückgesetzt wird. > > Wo finde ich das? Ganz einfach. Entweder du benutzt einen PWM Modus, dann steuert der Timer den Pin komplett. In allen anderen Modi, steht im Datenblatt welche Pinaktion du mit einem Compare Match erreichen kannst. Und genau die passiert auch. Wichtig: Wenn du die Kontrolle über den Pin an den Compare Match abgegeben hast, dann hat auch der Compare Match die Kontrolle. Um die Kontrolle zurückzuerlangen, musst du mittels COM Bits dem Timer wieder die Kontrolle über den Pin entziehen. > um per Compare Match nach 4096 Timer-Takten den Ausgang OC1A pünktlich > setzen zu lassen. In einer weniger zeitkritischen Routine arbeite > ich darauf hin ein paar Dinge ab und möchte den Ausgang wieder > rücksetzen und den Timer neu starten. 'neu starten' ist meistens ein Zeichen dafür, dass da irgendwas nicht stimmt. Auf der einen Seite soll ein Timing eingehalten werden, auf der anderen Seite ist "Timer abschalten", "Timer neu starten" Gift für jegliches genaues Timing. Genaues Timing kriegt man normalerweise nur, wenn man den Timer einfach durchlaufen lässt. Bist du sicher, dass du nicht eigentlich einen PWM Modus haben möchtest? Oder dass du den Timer nicht einfach durchlaufen lassen willst und dir dann eben einen entsprechenden neuen OCR Wert ausrechnen lassen willst?
:
Bearbeitet durch User
Schau dir mal die FOC Bits an. FOC = Force Output Compare. Damit setzt du die Ausgänge nach OCRx Wert.
Stefan Ernst schrieb: > COM-Bits auf "Clear on Compare Match", dann ein "Force Output Compare". OK das macht Sinn. Wenn man "Toggle OC1A/OC1B on Compare Match." einstellt, kann man dann noch per Port-Register auf den Ausgang zugreifen? Kann es grad nicht ausprobieren, erst morgen. (Wenn ich mir die Compare Match Output Unit, Schematic anschaue, gehe ich mal von einem Nein aus) Karl Heinz schrieb: > 'neu starten' ist meistens ein Zeichen dafür, dass da irgendwas nicht > stimmt. Auf der einen Seite soll ein Timing eingehalten werden, auf der > anderen Seite ist "Timer abschalten", "Timer neu starten" Gift für > jegliches genaues Timing. Genaues Timing kriegt man normalerweise nur, > wenn man den Timer einfach durchlaufen lässt. Bist du sicher, dass du > nicht eigentlich einen PWM Modus haben möchtest? Oder dass du den Timer > nicht einfach durchlaufen lassen willst und dir dann eben einen > entsprechenden neuen OCR Wert ausrechnen lassen willst? Hehe, berechtigte Frage. Ist für die Ansteuerung eines TLC5940 (16-Fach 12-Bit PWM IC). Der braucht alle 4096 Takte ein BLANK-Signal. Danach beginnt wieder ein neuer Zyklus mit 4096 Takten. Was dazwischen passiert darf ruhig so lange dauern wie es eben braucht.
Hallo Paul, und da sieht man mal wieder, mit der Angabe des TLC5940 wäre dir direkt geholfen worden. Denn mit PWM-Signalen hat die Ansteuerung, laut Datenblatt Seite 12ff, nichts zu tun !
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.