ATtiny2313: Problem mit Fast-PWM an Timer1

Gast #2389308
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

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