ATtiny 2313 PWM-Frequenz zu langsam

OP #3154238
Lesenswert?
• ▲
▼
Hallo Zusammen,

ich weiss dieses Thema wurde schon des öfteren diskutiert.

-Beim mir läuft der Timer0 im Fast PWM Mode, Prescaler 1.
-Die Fuse DIV8 ist ausgeschaltet.
-8MHz int. RC Osc.

Aber die PWM-Frequenz beträgt ca. 126Hz, mit dem KO gemessen.
->Nach Formel im Datenblatt sollte diese ja (fclk_io/N*256) ca. 31.25kHz 
betragen.

Kann mir jemand ein Tipp geben?

Danke!
#3154255
Lesenswert?
• ▲
▼
Remo Gilgen schrieb:
>
> Aber die PWM-Frequenz beträgt ca. 126Hz, mit dem KO gemessen.
> ->Nach Formel im Datenblatt sollte diese ja (fclk_io/N*256) ca. 31.25kHz
> betragen.
>
Die 31kHz ist die Frequenz, mit der der Timer läuft, der die PWM 
erzeugt. Wenn du jetzt eine 8-bit-PWM hast, braucht der Timer 256 
Zyklen, um eine Periode der PWM abzuarbeiten.
Wenn du jetzt die 31kHz durch 256 teilst, kommst auf 122Hz. Ist also 
alles richtig.
OP #3154265
Lesenswert?
• ▲
▼
Danke für die schnellen Antworten.

Auf den Faktor 256 bin ich auch schon gekommen. Nur keine Idee wo ich 
diesen suchen soll!

Code:
void timer0_fast_pwm_init(void)
{
DDRB=DDRB|(1<<PB2);
TCCR0A=(1<<COM0A1)|(1<<WGM01)|(1<<WGM00);
TCCR0B=(0<<CS00)|(0<<CS01)|(1<<CS02);
OCR0A=0x00;
}

void timer0_PWM(void)
{
if(zaehler0==0x000f)
  {
   zaehler0=0;
   OCR0A=reload0++;
  }
if(reload0==0x8f) reload0=0;

if((TIFR&(1<<TOV0))==0x02)
  {
   zaehler0++;
   TIFR=TIFR&(1<<TOV0);
   }
}

Gruss
#3154271
Lesenswert?
• ▲
▼
Remo Gilgen schrieb:
> Danke für die schnellen Antworten.
>
> Auf den Faktor 256 bin ich auch schon gekommen. Nur keine Idee wo ich
> diesen suchen soll!
>
> Code:
> void timer0_fast_pwm_init(void)
> {
> DDRB=DDRB|(1<<PB2);
> TCCR0A=(1<<COM0A1)|(1<<WGM01)|(1<<WGM00);
> TCCR0B=(0<<CS00)|(0<<CS01)|(1<<CS02);

was ist das für ein Prescaler?

-> Noch mal rechnen

voprher das hier lesen:
FAQ: Timer
dann verstehst du auch wo und wie die Formel entsteht und ... brauchst 
sie gar nicht mehr.
#3154272
Lesenswert?
• ▲
▼
Bernd S. schrieb:
> Die 31kHz ist die Frequenz, mit der der Timer läuft, der die PWM
> erzeugt. Wenn du jetzt eine 8-bit-PWM hast, braucht der Timer 256
> Zyklen, um eine Periode der PWM abzuarbeiten.
> Wenn du jetzt die 31kHz durch 256 teilst, kommst auf 122Hz. Ist also
> alles richtig.

Nee, da hast Du einen Denkfehler drin.

Mit Prescaler 1 läuft der Timer mit 8MHz (sofern Clock-Source etc. 
richtig sind), d.h. die resultierende PWM-Frequenz ist 8MHz/(1 * 256) = 
31.25kHz. Da muss man nicht zweimal durch 256 teilen...

--> OP: Bitte Quellcode bereitstellen. (EDIT: Ah, ist inzwischen da...)

Grüße,
         Simon
#3154280
Lesenswert?
• ▲
▼
Remo Gilgen schrieb:
> Danke für die schnellen Antworten.
>
> Auf den Faktor 256 bin ich auch schon gekommen. Nur keine Idee wo ich
> diesen suchen soll!

Ich habs mir jetzt nicht im Detail angesehen, aber geh mal davon aus, 
daß dein Timer0 mit 31kHz läuft. Wie kann dann die PWM auch 31kHz haben? 
Innerhalb von 256 Schritten entscheidet sich doch, ob der Ausgangs-Pin 
high oder low gesetzt wird. Zum Beispiel bei Zählerstand Null wird er 
eingeschaltet und bei 128 wieder aus. Den Rest bis 255 bleibt er aus, 
dann geht das Spiel wieder von vorn los.

Übrigens kannst du das ganze einfacher machen, wenn du dem Timer die 
Arbeit überläßt. Dann braucht es keine Software für die PWM. Außer du 
willst andere Pins für die PWM verwenden, die nicht zum Timer gehören. 
Kannst dir ja mal das Kapitel Timer durchlesen:

http://www.mikrocontroller.net/articles/AVR-Tutorial:_Timer

Gruß Bernd
#3154437
Lesenswert?
• ▲
▼
troll schrieb:
> Zum eigentlichen Problem kann ich ohne Datenblatt gerade nichts sagen,
> aber das hier
> Remo Gilgen schrieb:
>>TIFR=TIFR&(1<<TOV0);
>
> ist zu 99% Käse. Entweder TIFR|(1<<TOV0) oder TIFR&~(1<<TOV0).

Weder noch. Für das manuelle Löschen von Interrupt-Flags gelten 
besondere Regeln:

http://www.mikrocontroller.net/articles/AVR_Checkliste#Flag_richtig_gel.C3.B6scht.3F

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.