PWM will nicht

OP #1396516
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
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
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

Eine eigene Frage? Dieser Thread ist über 17 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.