Timer für Interrupt und PWM verwenden

Gast #3113641
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
#3113661
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
Gast #3115585
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.
#3115911
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.

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.