Übergabe Bottom Wert bei PWM Ausgabe

Gast #3196779
Lesenswert?

Servus erstmal,

ich bin gerade dabei mich mit dem Thema PWM zu beschäftigen, doch leider
klappt es nicht so gut.
Die PWM selbst funktioniert einwandfrei jedoch hab ich das Problem das
ich gerne würde, dass das Programm wie eine Art Dimmer die ganze Zeit
zuerst ein kleines Tastverhältnis von beispielsweise 25% ausgibt und
dann langsam auf z.B. 75% Prozent hochregelt.
Doch irgendwie steh ich auf dem Schlauch was die Übergabe des
Bottomwertes betrifft.
Programm sieht wie folgt aus:

#include <avr/io.h>
#define F_CPU 8000000UL
#include <util/delay.h>


int main()
{
  volatile uint16_t counter=0x0028;
  while(1){
  // OC1A auf Ausgang
  DDRB = (1 << PB1 );  //ATMega88
  //
  // Timer 1 einstellen
  //
  // Modus 14:
  //    Fast PWM, Top von ICR1
  //
  //    WGM13    WGM12   WGM11    WGM10
  //      1        1       1        0
  //
  //    Timer Vorteiler: 1
  //     CS12     CS11    CS10
  //       0        0       1
  //
  //  Steuerung des Ausgangsport: Set at BOTTOM, Clear at match
  //     COM1A1   COM1A0
  //       1        0

  TCCR1A = (1<<COM1A1) | (1<<WGM11);
  TCCR1B = (1<<WGM13) | (1<<WGM12) | (1<<CS10);

  //  den Endwert (TOP) für den Zähler setzen
  //  der Zähler zählt bis zu diesem Wert

  ICR1 = 0x00A0;

  // der Compare Wert
  // Wenn der Zähler diesen Wert erreicht, wird mit
  // obiger Konfiguration der OC1A Ausgang abgeschaltet
  // Sobald der Zähler wieder bei 0 startet, wird der
  // Ausgang wieder auf 1 gesetzt
  //
  // Durch Verändern dieses Wertes, werden die unterschiedlichen
  // PWM Werte eingestellt.

  OCR1A = counter;
  _delay_ms(50);
  counter=counter+1;
  if (counter=0x008C)
    {
      counter=0x0028;
    }
  }

}

Schonmal vielen Dank an alle.

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