Forum: Mikrocontroller und Digitale Elektronik Atmega 16 Timer1 OC1A Problem


von Harald B. (haribo)


Lesenswert?

Hallo !

Ich experimentiere mit BASCOM und und einem Atmega 16 und deren Timer1 
rum und bin da eher ein Anfänger.
Dazu habe ich den Timer1 so konfiguriert, das bei einem Compare A der 
Ausgang OC1A (pin19) auf 1 gesetzt wird. Das funktioniert soweit auch, 
aber wie kann ich diesen Pin denn nun wieder (per Programmcode) zurück 
auf 0 setzen ? Ich check das nicht...

Vielen Dank schon mal für die Hilfe,

Gruss,
haribo

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Frage nach dem Wie hängt von dem Wann ab. Wann soll der Pin zurück 
auf 0 gesetzt werden?

von lightninglord (Gast)


Lesenswert?

Es gibt die Möglichkeit den Pin bei einem CompareMatch zu togglen ( also 
das er immer den zustand ändert von 0->1 und bei 1->0 ) oder aber du 
kannst den Timer so einstellen das er wenn er bei Timer = 0 zu zählen 
anfängt den Pin ebenfalls löscht. Dazu rate ich dir das Datenblatt zu 
lesen ( ab Seite 100 ), dort stehen alle möglichkeiten beschrieben.

von Harald B. (haribo)


Lesenswert?

Danke für die Antworten.

Toggeln kommt nicht in frage.
Der Zeitpunkt des zurücksetzens wird im Programm bestimmt.
Der OC1A wird also im timer1 per Compare A gesetzt, bleibt gesetzt 
(funktioniert auch) und soll dann im Programm irgend wann zurückgesetzt 
werden (kein fixer Zeitpunkt). In weiterer Folge soll der Timer1 den 
dann auch wieder setzen können.
(Timer1 soll immer laufen).

Gruss und Dank
Haribo

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Harald B. schrieb:

> Toggeln kommt nicht in frage.
> Der Zeitpunkt des zurücksetzens wird im Programm bestimmt.
> Der OC1A wird also im timer1 per Compare A gesetzt, bleibt gesetzt
> (funktioniert auch) und soll dann im Programm irgend wann zurückgesetzt
> werden (kein fixer Zeitpunkt). In weiterer Folge soll der Timer1 den
> dann auch wieder setzen können.
> (Timer1 soll immer laufen).

Willkürliches Ausschalten von OC1A:

a. Bei Timer/Counter1 Control Register A – TCCR1A Normal port operation, 
OC1A/OC1B disconnected einstellen.
b. Pin 19 ggf. über DDR als Output einstellen (sollte bereits geschehen 
sein) und "manuell" LOW ausgeben.

Willkürliches Wiedereinschalten von OC1A:

Änderung von a. wieder rückgängig machen

von Marcus M. (marcus67)


Lesenswert?

Auch das ist natürlich möglich:

- Timer Control Register auf "Clear Pin on Match" einstellen
- Per FOC1A Bit das Bit setzen
- Timer Control Register wieder auf "Set Pin on Match" zurückstellen

Gruß, Marcus

von Harald B. (haribo)


Lesenswert?

Danke für die Vorschläge.
Der Pin ist natürlich schon im DDR als Ausgang per Programmcode 
eigestellt. Aber selbst wenn ich das nicht mache, schaltet der Timer den 
pin trotzdem. Die richtige DDR einstellung dürfte hier wohl der Bascom 
selbst villeicht mitmachen.

Ich werd das ganze morgen mal testen und hier die Ergebnisse berichten. 
Heute habe ich keinen bock mehr...
;-)
Ürsprünglich dachte ich, das dies einfacher gehen müsste, also mit 
löschen bzw. setzen eines entsprechenden Bits in einem Register. Muss 
scheinbar doch "über Umwege" gemacht werden.

Gruss, Haribo

von spess53 (Gast)


Lesenswert?

Hi

>Die richtige DDR einstellung dürfte hier wohl der Bascom
>selbst villeicht mitmachen.

Nein. Das hängt davon ab, wie das Pin konfiguriert ist -> COM-Bits im 
TCC-Register. Wenn die Bits nicht beide 0 sind (disconnected) kannst du 
DDRx setzen bis du schwarz wirst.
Die Variante von Marcus ist die einzig mögliche. Nimm dir mal das 
Datenblatt vor und lies dir das Kapitel über den Timer durch. Der Rest 
schadet auch nicht.

MfG Spess

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.