Forum: Mikrocontroller und Digitale Elektronik finde problem bei simpler pwm nicht


von Vlad T. (vlad_tepesch)


Lesenswert?

Hi:
ich steh grad auf dem schlauch und finde den fehler nicht, warum 
folgendes nicht funktioniert:
takt ist 1Mhz
1
  DDRB = 3;
2
  //init_timer;          
3
  // timer 0:
4
  TCCR0A = (1<COM0A1)|(1<<COM0A0)  // inverted PWM
5
          |(1<COM0B1)|(1<<COM0B0) // inverted PWM
6
          |(1<WGM01)|(1<<WGM00);
7
8
  TCCR0B =  (0<<WGM02)                // fast pwm
9
           |(0<<CS02)|(1<<CS01)|(0<<CS00);  // prescaler 8
10
 
11
  uint8 i =0;
12
  while(1){
13
     OCR0A =  i;
14
     OCR0B = ~i;
15
     ++i;
16
    _delay_ms(50);
17
  }

von Karl H. (kbuchegg)


Lesenswert?

Dafür gibt es eine einfache Lösung:
Timer 0 kann gar keine PWM

Zumindest nicht im Mega8, oder benutzt du einen anderen Prozessor?

von Vlad T. (vlad_tepesch)


Lesenswert?

sorry,
hab ich doch glatt den µC typ vergessen:
tiny25

von Vlad T. (vlad_tepesch)


Lesenswert?

keine ne idee, ich bin den Code gefühlte hundert mal durchgegangen hab 
jedes bit überprüft und zig mal im im Datenblatt nachgelesen.

sogar den tiny hab ich ausgetauscht.

Die schlatung stimmt.
Wenn ich per PortB an den Pins wackel tut sich auch was.

von Karl H. (kbuchegg)


Lesenswert?

LOL

 TCCR0A = (1<COM0A1)|(1<<COM0A0)  // inverted PWM
          |(1<COM0B1)|(1<<COM0B0) // inverted PWM
          |(1<WGM01)|(1<<WGM00);

Auszug daraus:  (1<COM0A1)

sind da 1 oder 2 < ?

(mit ein Grund, warum ich da immer Leerzeichen davor und danach mache
1
 TCCR0A =   ( 1 < COM0A1 ) | ( 1 << COM0A0 )  // inverted PWM
2
          | ( 1 < COM0B1 ) | ( 1 << COM0B0 ) // inverted PWM
3
          | ( 1 < WGM01  ) | ( 1 << WGM00  );

so fällt es optisch ein wenig besser auf.

von Vlad T. (vlad_tepesch)


Lesenswert?

heul

man verdammt, machmal ist man echt voll betriebsblind.

Warum warnt bei sowas der compiler nicht?
logische Ausdrücke mit bit operationen zu verrechnen macht doch nun mal 
überhaupt keinen Sinn.

jetzt gehts natürlich

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.