PWM funktioniert nicht (liegt es am Timer-Interrupt)

Gast #27846
Hallo,

ich habe folgende Unterprogramm routine zum initialisieren meines PWM 
geschrieben. Einen neuen PWM-Wert setze ich, indem ich dann in all5 
meinen neuen 8-Bit-Wert gebe und rcall pwm_out aufrufe.

Leider habe ich nie ein Signal an meinem Ausgang OC1B (8535).

Kann es daran liegen, dass ich den gleichen Timer noch dazu nutze um 
beim Ueberlauf einen Interrupt auszufuehren?

Hier das PWM-Programm:

; PWM initialisieren
; ------------------

pwm_init:

  ldi   all0, 0b00100001 ; waehle Ausgang OC1B und nichtinvert. 
8-Bit-PWM
  out   TCCR1A, all0

  ldi   all0, 1 ; setzte HSB des Zaehlers auf 1
  out   OCR1BH, all0

  ldi   all0, 0  ; lade zunaechst PWM = 0 (aus)
  out   OCR1BL, all0

  ldi  all0, 0b00000101 ; Vorteiler 1024 und Start
  out  TCCR1B, all0

  ldi   all0, 0 ; lade zunaechst PWM = 0 (aus) und Start
  out   OCR1BL, all0

ret


; PWM-Ausgabe
; -----------

pwm_out:

  out   OCR1BL, all5 ; gebe Wert all5 in PWM aus

ret

Am Programm-Anfang initiallisiere ich noch den Port mit:

ldi  all0, 0b01010000 ; definiert PD2 als INT-Eingang
out  DDRD, all0 ; und PD0, 1 als RXD, TXT und PD4 als PWM-Ausgang und 
PD6 als TTL-Ausgang

Den Timer-Interrupt mit:

ldi  all0, 0b00000100 ; aktiviere Interrupt mit PWM-Frequenz
out  TIMSK, all0 ; geschieht bei 8-Bit-PWM, Vorteiler 1024

Ich habe nach stundenlanger Fehlersuche den Grund nicht gefunden. Danke 
fuer euere Mithilfe,

Thomas H.
Gast #27847
Hallo,

habe nun endlich doch die Loesung fuer das Problem gefunden und moechte 
euch diese nicht vorenthalten:

Auch im 8-Bit-Modus muss OCR1XH immer vor dem LSB mit Null beschrieben 
werden. Dann funktioniert es.

Thomas H.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 23 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.