TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: joscar66 en 01 de Noviembre de 2004, 06:13:00
-
Escribi el siguiente codigo para utilizar el ccp del 628 conmo PWM, en el proteus funciona perfectamente, pero en el montaje del protoboard no hace nada
Necesito su opinion Por favor
#include<16f628.h>
#use delay(clock=4000000)
void main()
{
setup_ccp1(CCP_PWM_PLUS_1); // Configure CCP1 as a PWM
setup_timer_2(T2_DIV_BY_1, 11, 1);
}
Los fuses son XT, NOWDT, PWRT, MCLR, BODEN
GRACIAS
-
No sé como funciona la opción "plus" ya que la versión de mi compilador no la contempla, de todas formas ¿no te faltaría el set_pwm1_duty(x) ? ... seguramente será por el "plus" que no lo has puesto.
-
No POcher, ya lo he intentado con el
set_pmw1_duty()
la verdad creo que es un bug con el 628 porque probe el mismo codigo para el 873 y funciono perfecto!
ademas lo he compilado con la version 3.190, 3.203 y 3.211
-
¿Podrías indicarme en qué página del manual explica con la opción plus, lo de setup_ccp1(CCP_PWM_PLUS_1);? . Lo he mirado y no lo veo (se me habrá pasado)
De hecho compilar, compila sin errores, pero no sé como funciona esta opción "plus"¿lo podrías explicar?
-
El plus se utiliza cuando no se necesitan los 10 bits para la resolusion del Ancho de pulso. Con Plus solo se utilizarran 8 bits de resolusion.
Adjunto ademas un codigo que me funciono. Es para que el 628 genere una frecuencia de 40kHz al 50%
#use delay(clock=4000000)
#fuses NOWDT,INTRC_IO, PUT, NOPROTECT, BROWNOUT, MCLR, NOLVP, NOCPD
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DIV_BY_1,24,1);
setup_ccp1(CCP_PWM);
setup_comparator(NC_NC_NC_NC);
setup_vref(FALSE);
set_pwm1_duty(12);
while(1);
}
Como veras Pocher tenias razon. Hacia falta el Set_pwm1_duty(), que anteriormente habia utilizado pero con un valor erroneo, por eso no generaba nada.
Lo que si me parece raro es que la simulacion en el proteus si generaba la frecuencia.
Sera que el bug es del proteus... Casi me salen canas verdes!!
Gracias Amigo!
-
Vale, así sí.
Respecto a lo del plus me parece que es al revés:
setup_ccp1(CCP_PWM); -------------------> 8 bits de resolución
setup_ccp1(CCP_PWM_PLUS_1); --------> 10 bits de resolución
Lo he comprobado a partir del fichero .lst y viendo el ensamblador que se genera para una opción y para otra. En el primer caso se programan los bits CCPxX y CCPxY del registro CCPxCON con 00, sin embargo en el segundo caso se programan con 01.
Un saludo