Forum: Mikrocontroller und Digitale Elektronik Tiny 13 - PWM Bitraten herabsetzen


von Ra S. (mcfloppy)


Lesenswert?

Hallo Leute,
hab hier einen Tiny 13 und möchte einen 12 kHz Sinus erzeugen. Dazu 
möchte ich die Bitraten / Stützstellen anpassen. Da ich bei 9,6MHz 
arbeite, und Fast PWM mit CLK/1 nutze, gillt folgende Formel:
f_PWM = f_CPU/((2^Zählerbreite)-1)
was bei 8 Bit etwa 37,7 kHz Abtastrate ergibt. Bei einem 12kHz Signal 
sind das 3 Stützstellen. Nun muss der Filter bei 3 Stützstellen sehr 
steil sein und einen wirklichen Vorteil habe ich von 8Bit bei so wenig 
Stützstellen auch nicht. Setze ich nun die Bitrate runter, habe ich pro 
Bit die doppelten Stützstellen.. also 7 Bit -> 6 Stützstellen und 6 Bit 
-> 12 Stützstellen. Da ich nun einige Versuche damit anstellen möchte, 
wäre es mir sehr gelegen wenn ich den Hardwaretimer begrenzen könnte. Im 
Datenblatt gibt es dazu einen "Modus 7", dies ist eine FastPWM Abart mit 
TOP bei OCRA (laut DB). Nun gibt es kein OCRA, also nehme ich an dass 
hiermit OCR0A gemeint ist. Mit folgendem Quellcode kommt immer noch eine 
PWM Frequenz von 37,7kHz, egal was ich in OCR0A schreibe. Habt ihr eine 
Idee?

Vielen Dank im Vorraus
Raphael

#include <avr/io.h>

#ifndef F_CPU
#define  F_CPU   9600000UL
#endif

#include <util/delay.h>


int main() {
  // Ports:
  DDRB|=(1<<PB1);

  // Timer:
  TCCR0A = (1<<COM0B1) | (1<<WGM02) | (1<<WGM01) | (1<<WGM00) ;
  TCCR0B = (1<<CS00);
  OCR0A = (1<<6)-1;
  OCR0B = 0x4F;

  while(1) {
  }
  // wird nie erreicht:
  return 0;
}

von holger (Gast)


Lesenswert?

> TCCR0A = (1<<COM0B1) | (1<<WGM02) | (1<<WGM01) | (1<<WGM00) ;

Es gibt kein WGM02 Bit in TCCR0A.

von Ra S. (mcfloppy)


Lesenswert?

100 Gummipunkte :p Habe ich total übersehen, das war so verführerisch 
die Flags in eine Variable zu schreiben... Hab das 02er Flag es nun in 
die Zeile darunter zu dem 2ten Register gerückt und alles geht. Dann 
kann ich die Tage mit meinen Testmessungen anfangen.

Vielen Dank

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.