Forum: Mikrocontroller und Digitale Elektronik Soft-PWM auf Attiny461


von Deltal (Gast)


Angehängte Dateien:

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!

von m.n. (Gast)


Lesenswert?

Ich weiß ja nicht, was Du an der komplizierten Lösung so verlockend 
findest.
Ein einfaches Beispiel mit einfachem Code: 
http://www.mino-elektronik.de/soft-pwm/pwm_software.htm#l1

Die nachfolgenden Beispiele sind dann schneller und noch schneller und 
dennoch verständlich, wie ich meine.

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.