Forum: Mikrocontroller und Digitale Elektronik Timer für Interrupt und PWM verwenden


von Klaus (Gast)


Lesenswert?

Hallo,
ich habe einen Atmega328 im Einsatz und verwende den Timer1 um mir einen 
Interrupt alle 1s zu erzeugen. Jetzt möchte ich an PB1 noch ein PWM 
Signal anlegen. Dieser Pin wird aber von Timer1 gesteuert. So wie ich 
das verstanden habe steuert jeder Timer 2 PWM-Kanäle.
Kann ich den Timer1 jetzt neben dem Erzeugen des 1s-Taktes auch noch für 
das Erzeugen eines PWM Signals verwenden? Funktioniert das Erzeugen 
eines PWM Signals auch wenn die Interrupt zwischenzeitlich global 
deaktiviert werden?

Danke schon einmal für eure Hilfe

von Falk B. (falk)


Lesenswert?

@ Klaus (Gast)

>ich habe einen Atmega328 im Einsatz und verwende den Timer1 um mir einen
>Interrupt alle 1s zu erzeugen.

Direkt? Also mit Prescaler und Timer1. Das ist zu lange, 1s ist für 
einen MIkrocontroller eine Ewigkeit.

> Jetzt möchte ich an PB1 noch ein PWM
>Signal anlegen. Dieser Pin wird aber von Timer1 gesteuert. So wie ich
>das verstanden habe steuert jeder Timer 2 PWM-Kanäle.

JA, OCR1A und ORC1B.

>Kann ich den Timer1 jetzt neben dem Erzeugen des 1s-Taktes auch noch für
>das Erzeugen eines PWM Signals verwenden?

Sicher.

> Funktioniert das Erzeugen
>eines PWM Signals auch wenn die Interrupt zwischenzeitlich global
>deaktiviert werden?

Ja. Die PWM-Generierung hat mir Interrupts nichts zu tun, das ist reine 
Hardware. Aber du must Timer1 auf deine PWM-Frequenz einstellen. Die 
wird sicher nicht 1 Hz sein, eher 100Hz oder mehr. Darum musst du im 
passenden Interrupt dort eine Variable hochzählen und erst nach der 
passenden Anzahl von X Hz ein Steuersignal generieren, welches den 
Ablauf einer Sekunde anzeigt. Siehe Interrupt

von Klaus (Gast)


Lesenswert?

Danke für die ausführliche Antwort.
Genau das war meine Frage, ob ich den Timer mit dem Prescaler für eine 
Sekunde eingestellt lassen kann und gleichzeitig mit einer anderen 
Frequenz die PWM erzeugen kann- geht wohl leider nicht.
Ich dachte ich erzeuge die Sekunde mit dem 16bit Timer damit ich nicht 
unnötig Interrupts habe um die Variable für den Sekundentakt 
hochzuzählen.
Dann kann ich aber auch einfach Timer0 für meinen Interrupt verwenden.

von Falk B. (falk)


Lesenswert?

@ Klaus (Gast)

>Ich dachte ich erzeuge die Sekunde mit dem 16bit Timer damit ich nicht
>unnötig Interrupts habe um die Variable für den Sekundentakt
>hochzuzählen.

100-1000 Interrupts pro Sekunde sind ein Witz für einen Mikrocontroller.

>Dann kann ich aber auch einfach Timer0 für meinen Interrupt verwenden.

Kann man machen, wenn er sowieso ungenutzt ist.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Du bist beim Mega48/88/168/328 nicht auf Timer 1 mit PWM beschränkt. 
Alle drei Timer können bei diesem MC PWM erzeugen, bei voller Nutzung 
also 6 PWM Kanäle.

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.