Forum: Mikrocontroller und Digitale Elektronik PWM funktioniert nicht (liegt es am Timer-Interrupt)


von Thomas H. (Gast)


Lesenswert?

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.

von Thomas H. (Gast)


Lesenswert?

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.

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.