Forum: Mikrocontroller und Digitale Elektronik Set OC1A on Compare Match beim ATtiny2313, wie wieder rücksetzen?


von Paul H. (powl)


Lesenswert?

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

von Stefan E. (sternst)


Lesenswert?

COM-Bits auf "Clear on Compare Match", dann ein "Force Output Compare".

von Karl H. (kbuchegg)


Lesenswert?

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
von judas (Gast)


Lesenswert?

Schau dir mal die FOC Bits an. FOC = Force Output Compare. Damit setzt 
du die Ausgänge nach OCRx Wert.

von Paul H. (powl)


Lesenswert?

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.

von Uwe (de0508)


Lesenswert?

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
Noch kein Account? Hier anmelden.