torres.electronico
Well-known-Alfil
Yo creo que si estás haciendo algo mal, porque con un cristal de 4 MHz, se puede llagar hasta unos 83 KHz.
No en todos los casos vas a conseguir frecuencias exactas, pero si aproximadas.
Si lo estás haciendo con HPWM o por software, te recomiendo que mejor uses los registros.
mira, ahi encontre un par de cosas que se me habian pasado por alto y ya las corregi, pero sigo con la misma falla...algo se me esta escapando y seguro que debe de ser una tontera
Código:
DEFINE OSC 4
define ADC_BITS 10
Define ADC_CLOCK 3 ;
DEFINE ADC_SAMPLEUS 50
DEFINE CCP1_REG PORTC
DEFINE CCP1_BIT 2
DEFINE CCP2_REG PORTC
DEFINE CCP2_BIT 1
;****************************************************************
Dato1 var word ; variable pot.duty ccp1
Dato2 var word ; variable pot.duty ccp1
Dato3 var word ; variable aux
Dato4 var word ; variable pot.frecuencia
FRECUENCIA var word ; variable aux.frecuencia
FREC1 var word
DUTY1 VAR WORD ; variable aux.duty ccp1
DUTY2 VAR WORD ; variable aux.duty ccp2
Dvar var word
Fvar var word
dato0 = 0
dato1 = 0
dato2 = 0
dato3 = 0
dato4 = 250
TRISA = %11111111 ;configuro todo el portA como entrada
TRISB = %00000011 ;configuro portB.0 portB.1 como entrada, el resto como salidas
TRISC = %00000000 ;configuro todo el portC como salidas
portc = %00000000 ;pongo en estado bajo todo el portC
ADCON1 =%10000000 ;configuro A/D
;****************************************************************
MENU:
IF PORTB.0 = 0 THEN
high portc.7
goto PWM_ON ;pulsador de encendido
endif
pause 50
GOTO MENU
Inicio:
IF PORTB.1 = 0 THEN PWM_OFF ;pulsador de apagado
adcin 1, dato1 ;leemos el potenciometro del ADC2 para establecer duty CCP2-CCP1
dato1 =( dato1 / 4) ;arreglo matematico del valor obtenido por el ADC1
adcin 2, dato2 ;leemos el potenciometro del ADC2 para establecer duty CCP2-CCP1
dato2 =( dato2 / 4) ;arreglo matematico del valor obtenido por el ADC1
adcin 3, dato4 ;leemos el potenciometro del ADC3 para establecer frecuencia
dato4 = (dato4 / 4) ;arreglo matematico del valor obtenido por el ADC3
FRECUENCIA=62500/(dato4+1)
hpwm 2,DATO2,frecuencia
hpwm 1,DATO2,frecuencia
goto inicio
;****************************************************************
PWM_ON:
CCP1CON.2=1 ;ACTIVAMOS EL MODULO CCP1 (BIT2)
CCP1CON.3=1 ;ACTIVAMOS EL MODULO CCP1 (BIT3)
CCP2CON.2=1 ;ACTIVAMOS EL MODULO CCP2 (BIT2)
CCP2CON.3=1 ;ACTIVAMOS EL MODULO CCP2 (BIT3)
goto Inicio
;****************************************************************
PWM_OFF:
CCP1CON.2=0 ;DESACTIVAMOS EL MODULO CCP1 (BIT2)
CCP1CON.3=0 ;DESACTIVAMOS EL MODULO CCP1 (BIT3)
CCP2CON.2=0 ;DESACTIVAMOS EL MODULO CCP2 (BIT2)
CCP2CON.3=0 ;DESACTIVAMOS EL MODULO CCP2 (BIT3)
low portc.7
goto menu
;****************************************************************
end