AVR ATMega32 Timer 1 Normal Mode

Gast #3245018
Lesenswert?

Hallo Leute,
es geht um die Folgende Funktion:
1
int pwm(void)
2
  {
3
                //Data Direction
4
    DDRD = 0xff;
5
    //Normal Mode
6
    TCCR1B  &=  ~((1<<WGM13)|(1<<WGM12));
7
    TCCR1A  &=  ~((1<<WGM11)|(1<<WGM10));
8
    //Set Bit on compare match
9
    TCCR1A  |=  ((1<<COM1A0)|(1<<COM1A1));
10
    //Timer No Prescale
11
    TCCR1B  &=  ~((1<<CS12)|(1<<CS11));
12
    TCCR1B  |=  (1<<CS10);
13
    //Set Counter Value
14
    
15
    OCR1AH = 0x7f;
16
    OCR1AL = 0x00;
17
    
18
  }

Mit dieser Funktion möchte ich eine LED an OC1A dimmen.
Allerdings leuchtet egal bei welchem Compare Wert die LED immer mit 
voller Helligkeit.

Setze ich allerdings den Compare Output Mode auf Toggle so blinkt die 
LED sehr langsam.

Kann mir jemand mit meinem Problem helfen?

Vielen Dank schonmal im vorraus.

Gruß
Sven
Gast #3245060
Lesenswert?

> Kann mir jemand mit meinem Problem helfen?

Klar. Da..

> //Normal Mode
..
> //Set Bit on compare match

..steht schon alles annotiert: Du aktivierst den 'normalo-Modus' mit 
'Bitte einschalten'. Nix ausschalten, nix Hardware-PWM.

Einfachste Lösung: Einen der zahlreichen Hardware-PWM-Modi nutzen (-> 
Datenplatt lesen).

HTH
Gast #3245105
Lesenswert?

Alles klar, vielen Dank :)

Dann hatte ich wohl einfach den Modus falsch verstanden.
Dachte beim Normal Modus zählt er von 0 bis 0xFFFF hoch und bei
compare match setzt er das bit 1 und sobald er bei 0xFFFF angekommen ist 
wieder auf 0.

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