Soft-PWM auf Attiny461

Gast #4003494
Lesenswert?

Hallo,

ich habe gestern schon wenig erfolgreich versucht den Soft-PWM 
Codeschnippsel aus der Artikelsammlung auf einem Attiny461 zum laufen zu 
bringen. 
(http://www.mikrocontroller.net/articles/Soft-PWM#Intelligenter_L.C3.B6sungsansatz)


Das Problem ist, dass die PWM nicht über 255 Werte skaliert, sondern nur 
über etwa 8. (0=Dunkel, 8=100%) Dann geht es weiter 9=0% 18=100%

Dabei habe ich den Code an diesen Stellen verändert:
1
// Defines an den Controller und die Anwendung anpassen
2
 
3
#define F_CPU         8000000L           // Systemtakt in Hz
4
#define F_PWM         100L               // PWM-Frequenz in Hz
5
#define PWM_PRESCALER 8                  // Vorteiler für den Timer
6
#define PWM_STEPS     256                // PWM-Schritte pro Zyklus(1..256)
7
#define PWM_PORT      PORTA              // Port für PWM
8
#define PWM_DDR       DDRA               // Datenrichtungsregister für PWM
9
#define PWM_CHANNELS  5                  // Anzahl der PWM-Kanäle

ich habe den Timer 0 genutzt:
1
// Timer 0 Output COMPARE A Interrupt
2
 
3
ISR(TIMER0_COMPA_vect) {
4
    static uint8_t pwm_cnt;                     // ändern auf uint16_t für mehr als 8 Bit Auflösung
5
    uint8_t tmp;                                // ändern uint16_t oder uint32_t für mehr Kanäle
6
 
7
    OCR0A += isr_ptr_time[pwm_cnt];
8
    tmp    = isr_ptr_mask[pwm_cnt];
9

10
(...)

und noch der Aufruf:
1
int main(void) {
2
 
3
    // PWM Port einstellen
4
    io_init();
5
 
6
    // Timer 0 OCRA0, als variablen Timer nutzen
7
  
8
  
9
   TCCR0B  |= (1 << CS02);
10
  TIMSK   |= (1 << OCIE0A); 
11
  TCNT0L = 0;    
12
 
13
    sei();                  // Interrupts global einschalten
14
 
15
 
16

17
  pwm_setting[1] = 100;
18
  pwm_update();
19

20
  while(1) {
21
    }
22
   return 0;
23
}

Hat jemand ne schnelle Idee? An den Timern habe ich schon etwas gedreht, 
das Fehlerbild bleibt das selbe..


Danke!
Angehängte Dateien:

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