Stránka 1 z 1

PWM 16F628A

Napsal: 11 zář 2010, 21:25
od Davidus
Ahoj
Už 2 dny bojuju s 16F628A, nějak se mi nedaří rozjet PWM, nebo špatně chápu jeho nastavení v MCU. Co dělám špatně? Díky

ORG 000H
MOVLW 064h
BCF STATUS,RP1
BSF STATUS,RP0
MOVWF PR2
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW 032h
MOVWF CCPR1L
BSF T2CON,2
BSF T2CON,1
BSF T2CON,0
;nastavuji BB3 jako výstup
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0F7h
MOVWF TRISB
BCF STATUS,RP1
BCF STATUS,RP0
;konec programu
mys nop
goto mys
end

Napsal: 12 zář 2010, 09:20
od eljaro
asi jsi přeskočil trochu konfiguraci ! v ccp1con je třeba navolit že pojedeš jako pwm !

podle postupu je nutno 1,naplnit registr periody
2, nastavit pwm vregistru ccp1con
3, nastavit výstupní bit jako výstupní
4, a nastavit předdělič
také je dobre dohlédnou na to aby timer 2 byl opravdu vypnut

Napsal: 12 zář 2010, 09:49
od procesor
kapitola 9.3.3 v datasheet PIC16F628a
! 4. nastav preddelicku a SPUSTI Timer2!
5. zapni PWM mode v ccp1

Napsal: 12 zář 2010, 14:29
od Davidus
procesor, eljaro, díky, zkusím to, uvidíme, ale moc šancí tomu nedávám

Napsal: 12 zář 2010, 17:10
od Davidus
měl bych možná ještě dotaz, je funkce PWM vidět na logickém analyzátoru v simulátoru MPLAB?

Napsal: 12 zář 2010, 19:14
od eljaro
v simulátoru to vidět je ale timer 2 nespoštět ! jen nastavit předdělič tím dojde k aktivaci timeru 2 pro práci pwm ! samotné aktivování timeru 2 bitem tmr2on způsobí odstavení pwm mudulu ! ona ta technická angličtina je trochu moc jednoduchá !

Napsal: 13 zář 2010, 09:25
od Davidus
takže se mi podařilo najít přímo ukázku od inženýrů z microchipu... možná to pomůže i někomu dalšímu, kdo by s tím měl problém.

list p=16f628A ; list directive to define processor
#include <p16F628A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT


ORG 000H
CLRF CCP1CON
CLRF TMR2
MOVLW 0x7F
MOVWF PR2
MOVLW 0x1F
MOVWF CCPR1L
CLRF INTCON
BSF STATUS,RP0
BCF TRISB,3
CLRF PIE1
BCF STATUS, RP0
CLRF PIR1
MOVLW 0x2C
MOVWF CCP1CON
BSF T2CON,TMR2ON
;konec programu
mys nop
goto mys
end

Napsal: 13 zář 2010, 13:57
od procesor
No... PR2 je v inom banku, takže miesto PR2 tých 0x7F zapisuješ do T2CON a to nie je najlepšie. Chýba tam nastavenie správneho banku. A potom späť.
Edit:
Podľa frekvencie oscilatota posúď časy. Timer2 takto šlape, ale s preddeličkou 1:16 (postscaler je tu ukradnutý) a v PR2 máš 0xFF ako po resete

Napsal: 13 zář 2010, 19:17
od Davidus
tak poslední pokus, teď už by to mělo být OK
list p=16f628A ; list directive to define processor
#include <p16F628A.inc> ; processor specific variable definitions

__CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _INTOSC_OSC_NOCLKOUT

CITAC0 EQU 20H
CITAC1 EQU 21H
CITAC3 EQU 22H
ORG 000H
CLRF CCP1CON
CLRF TMR2
BCF STATUS,RP1
BSF STATUS,RP0
MOVLW 0x7F
MOVWF PR2
BCF STATUS,RP1
BCF STATUS,RP0
MOVLW 01FH ; nastavení střídy
MOVWF CCPR1L
CLRF INTCON
BSF STATUS,RP0
BCF TRISB,3
CLRF PIE1
BCF STATUS, RP0
CLRF PIR1
MOVLW 0x2C
MOVWF CCP1CON
BSF T2CON,TMR2ON
;registry naplněny hodnotou FF
;cekací smycka
mys nop
goto mys
end

Napsal: 13 zář 2010, 21:40
od procesor
To by mohlo íst, frkv.= 7812,5Hz, impulz=31,5us.
Ukáž oscilogram.

Napsal: 14 zář 2010, 09:04
od Davidus
tady

Napsal: 14 zář 2010, 09:19
od Atlan
dobry oscilooskop :D

Napsal: 14 zář 2010, 10:15
od Davidus
Atlan píše:dobry oscilooskop :D
tak co chceš, za 7700kč 100MHz osciloskop... :lol:

Napsal: 14 zář 2010, 15:18
od procesor
Program je Ok. Tolerancie idú na vrub na oscilátoru a aj niečo na osciloskop. :)