www.mikrocontroller.net

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


Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi:
ich steh grad auf dem schlauch und finde den fehler nicht, warum 
folgendes nicht funktioniert:
takt ist 1Mhz
  DDRB = 3;
  //init_timer;          
  // timer 0:
  TCCR0A = (1<COM0A1)|(1<<COM0A0)  // inverted PWM
          |(1<COM0B1)|(1<<COM0B0) // inverted PWM
          |(1<WGM01)|(1<<WGM00);

  TCCR0B =  (0<<WGM02)                // fast pwm
           |(0<<CS02)|(1<<CS01)|(0<<CS00);  // prescaler 8
 
  uint8 i =0;
  while(1){
     OCR0A =  i;
     OCR0B = ~i;
     ++i;
    _delay_ms(50);
  }

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
sorry,
hab ich doch glatt den µC typ vergessen:
tiny25

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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
 TCCR0A =   ( 1 < COM0A1 ) | ( 1 << COM0A0 )  // inverted PWM
          | ( 1 < COM0B1 ) | ( 1 << COM0B0 ) // inverted PWM
          | ( 1 < WGM01  ) | ( 1 << WGM00  );

so fällt es optisch ein wenig besser auf.

Autor: Vlad Tepesch (vlad_tepesch)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.