ATMEGA32 Fast PWM mit Timer 1 läuft nicht

Gast #2665725
Guten Abend!

Ich hab ein Problem mit Timer 1 des Atmega 32.

Ich möchte für eine spätere Anwendung eine PWM mit variabler Frequenz 
erzeugen.
Ich benutze dazu die Fast PWM mit variabler Frequnz und Teiler 1 und 
möchte, dass der Ausgang OC1A den High-Zustand bekommt, wenn ein Match 
eintritt. Im ersten Ansatz möchte ich ein Tastverhältnis von 1:1 haben.

Nach meinem Verständnis wird in diesem Modus bis zum Wert von ICR1 
gezählt. Dann beginnt der Timer von vorne. Über ICR1 wird demnach die 
Frequenz der PWM eingestellt.

Und so habe ich das konfiguriert:
1
int main (void)
2
{
3
  DDRD |= (1 << PD5);
4

5
  TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
6
  TCCR1B |= (1 << WGM13) | (1 << WGM12);
7

8
  ICR1 = 444;
9

10
  OCR1A = 222;
11

12
  TCCR1B |= (1 << CS10);
13

14
  while (1)
15
  {
16
    asm volatile ("nop");
17
  }
18
}

Ergebnis ist: Der Portpin gibt dauerhaft High-Signal.

In einer anderen Version habe ich das zu Testzwecken mit Interrupt 
gemacht, um zu prüfen ob der Timer überhaupt läuft. In der ISR sollte er 
nur PORTB hochzählen. Das hat er getan, woraus ich schließe, dass der 
Timer funktioniert.

Was habe ich falsch gemacht?

Grüße

Dennis
Dennis schrieb:

> Was habe ich falsch gemacht?

Hmm. Dein Programm sieht korrekt aus.
Auch ein Test mit einem direkten Helligkeitsvergleich mit einer nebenan 
liegenden LED zeigt ganz klar, dass die PWM-LED sauber gedimmt wird. 
Dabei hab ich die Dimmung mal etwas extremer gemacht, damit man den 
Unterschied auch deutlich sieht.
1
#include <avr/io.h>
2

3
int main (void)
4
{
5
  DDRD |= (1 << PD5) | (1 << PD6);
6
  PORTB |= ( 1 << PD6);
7

8
  TCCR1A |= (1 << COM1A1) | (1 << COM1A0) | (1 << WGM11);
9
  TCCR1B |= (1 << WGM13) | (1 << WGM12);
10

11
  ICR1 = 444;
12

13
  OCR1A = 10;
14

15
  TCCR1B |= (1 << CS10);
16

17
  while (1)
18
  {
19
    asm volatile ("nop");
20
  }
21
}

Also: An diesem Programm liegt es nicht.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.