PB1 (OC1A) bleibt dauerhaft auf low

Gast #2387829
Lesenswert?

Hallo,

ich wollte einfach mal die Funktion der Fast - PWM Funktion probieren, 
jedoch funktioniert das so nicht. Laut meinem Verständnis sollte nun der 
PIN ca. zur Hälfte eingeschaltet sein und dann wieder auf low gehen.

#include <avr/io.h>

int main(void)
{

  TCCR1B=(1<<CS11);                //Vorteiler 8
  TCCR1B=(1<<WGM12);               //Fast PWM Modus(8 bit)
  TCCR1A=(1<<WGM10);               //Fast PWM Modus(8 bit)
  TCCR1A=(1<<COM1A1)|(1<<COM1A0);  //Einschalten bei Compare match
  OCR1AH=0;
  OCR1AL=127;

  DDRB=0xff;

while(1)
  {
    ;
  }
}

freue mich über den gefundenen Fehler
Persönliche Seite #2387888
Lesenswert?

Nein:


TCCR1B = (1<<CS11)
Was passiert? TCCR1B wird der Wert 0000_1000 zugewiesen.
Danach kommt
TCCR1B = (1<<WGM12)
Und hier wird dem Register der Wert 0000_0010 zugewiesen. Dabei nimmt es 
dann auch wirklich den Wert 0000_0010 an - und dein vorher gesetztes Bit 
ist wieder gelöscht. Mit "=" weist man nämlich einem Register einen Wert 
zu - und der vorherige Wert wird vollständig überschrieben. Les' dir mal 
den Artikel über Bitmanipulation durch. ODER (OR, als Operator "|" oder 
"|=") ist das Stichwort.


Gruß
Jonathan
Gast #2387894
Lesenswert?

ok also z.B

TCCR1B=(1<<CS11)|(1<<WGM12);

Damit weise ich praktisch den Verknüpften Wert direkt zu

TCCR1B= 0000_1010

hab das jetzt einfach direkt reingeschrieben
TCCR1B=0b00001010;

auf jeden Fall nochmals vielen Dank :)
Gast #2387913
Lesenswert?

igor.h schrieb:
> laut meinem Verständnis wäre dann
>
> TCCR1B=00001010     durch die Verschiebung der Bits auf die Position
> oder?

Nein.

> hm, aber so wies aussieht weißt du das Problem =)

Tut er mit Sicherheit. Aber du sollst selbst drauf kommen.
Dröseln wir's doch noch weiter auf:

Was passiert hier mit TCCR1B:

>   TCCR1B=(1<<CS11);                //Vorteiler 8

und was hier:

>   TCCR1B=(1<<WGM12);               //Fast PWM Modus(8 bit)

?

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