Forum: Mikrocontroller und Digitale Elektronik Übergabe Bottom Wert bei PWM Ausgabe


von Chris123 (Gast)


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.

von holger (Gast)


Lesenswert?

if (counter=0x008C)

Die Zeile ist falsch geschrieben. Da fehlt was;)

von Falk B. (falk)


Lesenswert?


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.