PWM will nicht

OP #1396516
Lesenswert?

Ich versuche seit Stunden 3 PWM-Kanäle an einem ATTiny45 zum Laufen zu 
bringen, aber es funktioniert nichts. Das Ganze soll eine RGB-LED 
ansteuern, der Schaltplan ist im Anhang. Das Programm was ich im Moment 
habe soll erstmal nur einen Kanal, nämlich den roten, immer heller 
werden lassen, bis die maximale Helligkeit erreicht ist, und danach 
wieder von vorne anfangen. Die Tabelle mit den exponentiellen Werten ist 
aus dem LED-Fade Artikel hier von der Seite.

Hier mein Code:
1
#include <avr/io.h>
2
#include <avr/pgmspace.h>
3
#include <util/delay.h>
4

5

6
uint8_t pwmtable[32] PROGMEM = {0, 1, 2, 2, 2, 3, 3, 4, 5, 6, 7, 8, 10, 11,
7
                                    13, 16, 19, 23, 27, 32, 38, 45, 54, 64, 76,
8
                                    91, 108, 128, 152, 181, 215, 255};
9

10
int main()
11
{
12
  uint8_t r=0;  //rot-wert, 0-31
13
  uint8_t g=0;  //grün-wert, 0-31
14
  uint8_t b=0;  //blau-wert, 0-31
15
  
16
  //Timer 0
17
  TCCR0A=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);    //Verhalten der OC0A und OC0B Pins=>nicht invertierend, Fast-PWM
18
  TCCR0B=(1<<CS00)|(1<<CS02);    //Prescaler = 1024
19
  OCR0A=0;              //roter Kanal, Pin OC0A
20
  OCR0B=0;              //grüner Kanal, Pin OC0B
21
  
22
  //Timer 1
23
  TCCR1=(1<<CS10)|(1<<CS11)|(1<<CS13);          //Prescaler=1024
24
  GTCCR=(1<<PWM1B)|(1<<COM1B1);        //nicht invertierende PWM an OC1B
25
  OCR1C=255;              
26
  OCR1B=0;              //blauer Kanal, Pin OC1B
27
  DDRB=(1<<PB0)|(1<<PB1)|(1<<PB4);  //Pins OC0A, OC0B und OC1B =>Ausgänge, Rest Eingänge
28
  
29
  //Hauptschleife
30
  while(1)
31
  {
32
    OCR0A=pwmtable[r];
33
    OCR0B=pwmtable[g];
34
    OCR1B=pwmtable[ b];
35
    r=r+1;
36
    if(r==32)r=0;
37
    
38
    
39
    _delay_ms(20);
40
    
41
  }
42
}

Weiß jemand, was ich da vergessen habe?
Vielen Dank im Voraus, Björn

PS: das Leerzeichen vor dem  b als Index habe ich eingefügt, da die 
Forensoftware sonst meint ich spamme.
Angehängte Dateien:
OP #1396542
Lesenswert?

Oh Entschuldingung...
Das ist das, was ich mir am wenigsten erklären kann: nur die Blaue LED 
leuchtet, und das dauerhaft. Ich bin gerade auch schon in der FH 
gewesen, um mit dem Oszilloskop nachzumessen: Da kommt gar nichts, nur 
bei der blauen. Aber auch da ist nichts getaktet oder so.

LG, Björn
OP #1396968
Lesenswert?

Das ist schonmal ein guter Tipp. Kommt vom Copy&paste, da ich noch nie 
mit dem Programmspeicher in der Form gearbeitet habe.
Der Rest ist allerdings von mir ersonnen, und wahrscheinlich auch der 
Grund, warum es nicht tut. Die Änderungen brachten jedenfalls keine 
Verbesserung.
Wäre nett wenn ihr euch das nochmal anschauen könntet. kann ja 
eigentlich nur an der Timer-Initialisierung liegen...

LG, Björn

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