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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.