attiny 861 pwm probleme

Gast #3402612
Lesenswert?

Irgendwie bekomme ich die PWM Initialisierung bei dem Attiny861 nicht 
hin. Nur OC1D liefert ein Ausgangssignal im Fast PWM Modus.
Wär super wenn wer über meinen Code drüber schaun kann und den Fehler 
findet :). So langsam wirds frustrierend :/

1
void timer1_init(void)
2
{
3
  //Mode + Output einstellung
4
  //Fast PWM mode 8 Bit Timer 1, OC1A, OC1B und OC1D auf non-inverting output setzen  
5

6
  TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<PWM1A) | (1<<PWM1B);
7

8
  TCCR1C = (1<<COM1D1) | (1<<PWM1D);
9
  
10
  TCCR1D = (0<<FPIE1) | (0<<FPEN1) | (0<<FPNC1) | (0<<FPES1) | 
11
       (0<<FPAC1) | (0<<FPF1) | (0<<WGM11) | (0<<WGM10);
12

13
    //Top setzen
14
    OCR1C = 0xFF;
15
  
16
  //PLL init und starten
17
  PLLCSR = (0<<LSM) | (1<<PCKE) | (1<<PLLE);
18
  _delay_us(40);
19
  _delay_us(40);
20
  _delay_us(40);
21
  
22
  while(!(PLLCSR&0x01)) {} //stabilisierung der PLL abwarten
23

24
  OCR1A = 100; 
25
  OCR1B = 100; //Bestimmt den mittleren Strom durch die Spulen.
26
  OCR1D = 100; 
27

28
  //Timer aktivieren
29
  TCCR1B |= (1<<CS10);
30
}
Gast #3403510
Lesenswert?

Genau das wars, danke.
Hier noch mal die funktionierende Initialisierung:
1
void timer1_init(void)
2
{
3
  //Mode + Output einstellung
4
  //Fast PWM mode 8 Bit Timer 1, OC1A, OC1B und OC1D auf non-inverting output setzen  
5

6
  TCCR1A = (1<<COM1A1) | (1<<COM1B1) | (1<<PWM1A) | (1<<PWM1B);
7

8
  TCCR1C = (1<<COM1D1) | (1<<PWM1D) | (1<<COM1A1S) | (1<<COM1B1S);
9
  
10
  TCCR1D = (0<<FPIE1) | (0<<FPEN1) | (0<<FPNC1) | (0<<FPES1) | 
11
       (0<<FPAC1) | (0<<FPF1) | (0<<WGM11) | (0<<WGM10);
12

13
    //Top setzen
14
    OCR1C = 0xFF;
15
  
16
  //PLL init und starten
17
  PLLCSR = (0<<LSM) | (1<<PCKE) | (1<<PLLE);
18
  _delay_us(40);
19
  _delay_us(40);
20
  _delay_us(40);
21
  
22
  while(!(PLLCSR&0x01)) {} //stabilisierung der PLL abwarten
23

24
  OCR1A = 100; 
25
  OCR1B = 100; //Bestimmt den mittleren Strom durch die Spulen.
26
  OCR1D = 100; 
27

28
  //Timer aktivieren
29
  TCCR1B |= (1<<CS10);
30
}

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