Stránka 1 z 1

PWM v PIC12F683 & Proteus - chybná funkce?

Napsal: 22 úno 2019, 19:08
od masar
Potřeboval bych vysvětlit problém, se kterým jsem se setkal při simulaci PWM s použitím CCP modulu v PIC12F683 nebo PIC12F615 v simulátoru Proteus.
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:
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)
V tomto okamžiku se nuluje nastavený výstup PWM

Kód: Vybrat vše

   movlw   00ch
   movwf   CCP1CON         ;clear LSB bits
   goto   testend

Napsal: 22 úno 2019, 22:39
od frpr666
Je otázka jak flexibilně reaguje výrobce softwarového simulátoru na to, že Microchip vydá nový PIC s novou periferií.
Dříve nebo později stejně dojde na to, že je třeba vytáhnout osciloskop a podívat se na realitu.

Napsal: 22 úno 2019, 22:53
od masar
Nemyslím, že je to otázka flexibility. Jen tohle fórum zná PIC12F683 minimálně od r.2007.
Kromě toho, jaký by mělo smysl software, který nelze simulovat, testovat v reálu? Je možné, že pan Belza odsimuloval soft v jiném simulátoru, než Proteus. Nejde mi o funkčnost programu, ale o funkčnost simulátoru, pokud ovšem není chyba někde na mé straně.
:wink:

Napsal: 23 úno 2019, 22:13
od teufel
Napsal jsem to v asembleru v MPLab IDE (ještě v tom bez X), nahrál do mikrokontroléru, vyzkoušel, opravil program a znova nahrál... Už si nepamatuji, na kolik iterací se to povedlo. Moc jich nebylo, tak do desítky. Víc jsem se "vyblbnul" na digitální filtraci výstupu AD převodníku, kterou jsem do PWM regulátoru dodatečně dodělal - ta ale není součástí programu, co mám na webu.

Napsal: 23 úno 2019, 22:53
od masar
Znamená to tedy, že je chyba v simulátoru? Nemůže být "zakopaný pes" v nějakém konfiguračním nastavení? MPLAB jsem nezkoušel, ale znovu říkám - nejde mi o funkčnost (odladění) programu, ale o odhalení, proč mi to v Proteusu nefunguje.
:wink:
Pro názornost přikládám animaci krokování:
Obrázek