Forum: Mikrocontroller und Digitale Elektronik ATtiny2313: Problem mit Fast-PWM an Timer1


von joo (Gast)


Lesenswert?

Hallo,
ich verwende den ATtiny2313 und brauche drei PWM-Kanäle im 
Fast-PWM-Modus zur phasenverschobenen Sinuserzeugung. Die beiden Kanäle 
des Timer0 funktionieren wie sie sollen bei ca. 30kHz. Der eine Kanal 
des Timer1 bleibt allerdings bei 15-16kHz, sprich: der Hälfte. Dabei 
sind doch eigentlich beide korrekt eingestellt. Wo liegt der Fehler? Ich 
habe jetzt stundenlang gesucht und weiß nicht weiter.

Hier ein Auszug aus dem Quellcode:
1
#ifndef F_CPU
2
  #warning "F_CPU not defined"
3
  #define F_CPU 8000000UL
4
#endif
5
#include <inttypes.h> 
6
#include <avr/io.h>
7
#include <stdlib.h>
8
#include <util/delay.h>
9
10
int main() {
11
  DDRA = 0b11111111;
12
  DDRB = 0b11111111;  
13
  DDRD = 0b11111111;    
14
  
15
  TCCR0A |= (1<<COM0A1) | (1<<COM0B1) | (1<<WGM01) | (1<<WGM00);      //einstellungen für die PWM
16
  TCCR0B |= (1<<CS00);
17
18
19
  TCCR1A |= (1<<WGM12) | (1<<WGM10) | (1<<COM1A1) | (1<<COM1B1);      //einstellungen für die PWM
20
  TCCR1B |= (1<<CS10);
21
22
  
23
  int s = 0;                //zaehlvariable fuer sinus  
24
  unsigned char sinus[61] = {127,149,170,191,209,224,237,246,252,254,252,246,237,224,209,191,170,149,127,105,84,64,45,30,17,8,2,0,2,8,17,30,45,63,84,105,127,149,170,191,209,224,237,246,252,254,252,246,237,224,209,191,170,149,127,105,84,63,45,30,17};
25
26
  unsigned long int zeit = 20000;
27
28
  while(1){
29
    for(unsigned long int i = 0; i < zeit; i++) {
30
      _delay_us(1);
31
    }
32
    if(s == 36){
33
      s = 1;
34
    }
35
    else{
36
      s ++;
37
    }
38
     OCR0A = sinus[s];
39
     OCR0B = sinus[s + 12];
40
    OCR1B = sinus[s + 24];
41
  }
42
  return(0);
43
}

Das delay kommt in der finalen Version natürlich raus.
Ich hoffe, ihr könnt mir helfen! Schöne Grüße Joo

von ziegenpeter (Gast)


Lesenswert?

1
 TCCR1A |= (1<<WGM12) | (1<<WGM10) | (1<<COM1A1) | (1<<COM1B1);      //einstellungen für die PWM
WGM12 ist im TCCR1B register.

von Joo (Gast)


Lesenswert?

Vielen Dank, hat funktioniert, war ein doofer Fehler.

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.