Vlastností modulu CCP v režimu PWM by měl být tzv. double buffering, tzn. že zápis hodnoty duty cycle do registru CCPR1L může být proveden kdykoliv (alespoň jak jsem pochopil), jeho přepis do CCPR1H se provede až na konci periody cyklu PWM.
Ovšem v simulátoru Proteus se při zápisu do CCPR1L ihned nuluje stav výstupního pinu CCP1, pokud již byl nastaven.
Narazil jsem na to při testování programu od p. Belzy, který je jistě vyzkoušený a funkční.
Ale v Proteusu nefunguje s žádným z uvedených MCU.
Při simulaci podobného řízení s jinými MCU (např. PIC16F628) k uvedenému jevu nedochází a zápis do CCPR1L se provede bez vlivu na stav výstupního pinu.
Otázka je prostá: Je chyba ve mně nebo v Proteusu?
Díky za každou odpověď.
![Wink :wink:](./images/smilies/icon_wink.gif)
Ještě pro úplnost část kódu (ASM), kde je problém:
Kód: Vybrat vše
; AD převod
bsf ADCON0,GO ;start AD převodu - trvá 48 Tcy
btfsc ADCON0,GO ;done/hotovo?
goto $-1
clrwdt
movfw ADRESH ;
; Linear - Quadratic mode test
btfsc LINQ ;lin/q pin test
goto quadratic
; Lineary mode
linear
movwf CCPR1L ;set MSB bits PWM (duty-cycle = ADRESH)
Kód: Vybrat vše
movlw 00ch
movwf CCP1CON ;clear LSB bits
goto testend