mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PWM will nicht


Autor: Björn R. (sushi)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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:
#include <avr/io.h>
#include <avr/pgmspace.h>
#include <util/delay.h>


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

int main()
{
  uint8_t r=0;  //rot-wert, 0-31
  uint8_t g=0;  //grün-wert, 0-31
  uint8_t b=0;  //blau-wert, 0-31
  
  //Timer 0
  TCCR0A=(1<<COM0A1)|(1<<COM0B1)|(1<<WGM01)|(1<<WGM00);    //Verhalten der OC0A und OC0B Pins=>nicht invertierend, Fast-PWM
  TCCR0B=(1<<CS00)|(1<<CS02);    //Prescaler = 1024
  OCR0A=0;              //roter Kanal, Pin OC0A
  OCR0B=0;              //grüner Kanal, Pin OC0B
  
  //Timer 1
  TCCR1=(1<<CS10)|(1<<CS11)|(1<<CS13);          //Prescaler=1024
  GTCCR=(1<<PWM1B)|(1<<COM1B1);        //nicht invertierende PWM an OC1B
  OCR1C=255;              
  OCR1B=0;              //blauer Kanal, Pin OC1B
  DDRB=(1<<PB0)|(1<<PB1)|(1<<PB4);  //Pins OC0A, OC0B und OC1B =>Ausgänge, Rest Eingänge
  
  //Hauptschleife
  while(1)
  {
    OCR0A=pwmtable[r];
    OCR0B=pwmtable[g];
    OCR1B=pwmtable[ b];
    r=r+1;
    if(r==32)r=0;
    
    
    _delay_ms(20);
    
  }
}

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.

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> aber es funktioniert nichts.
Was genau tut nicht? Alles dunkel, alles hell? Nur Rot?
Das hast du leider nicht beschrieben.

Autor: Björn R. (sushi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Björn R. (sushi)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nur mal so: die Interrupts muss man doch wohl im PWM-Modus nicht 
einschalten, oder?

Autor: Christian L. (lorio)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ohne den Code nachvollzogen zu haben:
OCR0A=pwmtable[r];
OCR0B=pwmtable[g];
OCR1B=pwmtable[ b];

ändern in
OCR0A=pgm_read_byte(&pwmtable[r]);
OCR0B=pgm_read_byte(&pwmtable[g]);
OCR1B=pgm_read_byte(&pwmtable[ b]);

Autor: Björn R. (sushi)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.