Atmega32 PWM Ausgabe 4 kHz

OP #1759446
Lesenswert?

Hallo,

mit dem Timer hatte ich eine Frequenz von ca. 4 kHz erzeugt. Der Ton ist 
allerdings nicht sauber (Jitter).

Deshalb habe ich mich an den PWM gewagt. Ich kriege aber nur eine 
Frequenz zustande mit Hilfe einer while-Schleife. Das geht doch bestimmt 
auch ohne, da der PWM eine eigene Einheit im µC ist, oder?

Der Atmega32 hat einen internen Takt von 1 MHz, bei einem 8-Bit-Timer 
und einem Prescaler von 1 wäre das eine Frquenz von 3,9 kHz.
Soweit, so gut. Ich habe aber gelesen, dass man kein ISR braucht(??) und 
die while-Schleife in der Hauptroutine der Anwendung ist auch nicht sehr 
toll.

Kann mir bitte jemand helfen, wo fehlt da ein Parameter. Ihr seht schon 
an meiner Beschreibung, dass ich noch Anfänger bin und mich mit Mühe 
durch den Bit-Dschungel des Atmega taste.

Hier mein Code:
1
// Timer Testprogramm für PWM
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <stdint.h>
6

7
  int main(void)
8
  {  
9
  TCCR2 |= (1<<CS20);       // Prescaler 1
10
  TCCR2 |= (1<<WGM21) | (1<<WGM20);  // Timer aktivieren, 8-Bit, Fast PWM
11
  TCCR2 |= (1<<COM21) | (0<<COM20) ;  // Compare match, Fast PWM, nicht invertiert
12
  OCR2 =  255;  // Vergleichswert setzen
13

14
  DDRD |= (1<<PD7); // Port D Pin 7 als Ausgang
15

16
  uint8_t wert;
17
  while(1)
18
  {
19
    for (wert=0; wert<255; wert++)
20
    {
21
    OCR2 = wert;
22
    }
23
  }
24
  }//main
Gast #1759484
Lesenswert?

Das sollte dein Signal sein ;)
1
// Timer Testprogramm für Rechteck ca. 4 kHz
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <stdint.h>
6

7
  int main(void)
8
  {  
9
  DDRD |= (1<<PD7);     // Port D Pin 7 als Ausgang
10

11
  TCCR2 |= (1<<WGM21);  // Timer CTC
12
  TCCR2 |= (1<<COM20);  // Pin (PD7) toggle
13
  OCR2 =  0x7b;         // Vergleichswert setzen
14
  TCCR2 |= (1<<CS20);   // Prescaler 1 Timer startet
15

16
  while(1); // Ich drehe Däumchen
17

18
  }//main

avr
Gast #1759513
Lesenswert?

Hi

>Das werde ich mit dem Datenblatt nochmals auflösen und dann hoffentlich
>verstehen, was ich da verkehrt gemacht habe.

Wozu eigentlich PWM? Das ist eigentlich nichts anderes als CTC.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren