TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: andpic en 13 de Diciembre de 2005, 05:35:00
-
Hola Chicos: Por favor quería ver si me pueden dar una mano con un problema que tengo con PWM. No logro hacerlo andar. Tengo todo configurado y calculado para la frecuencia que necesito, pero no me anda. Abajo cuelgo el programa. Por favor veanló y diganmé en que puedo estar fallando. Muchas Gracias
Datos:
PIC 16F819, frecuencia interna on la que lo hago trabajar=8Mhz
Frecuencia que necesito: 153.600 Hz
Calculo que saco del PR2=12
Me gustaría que me respondan:
1) Puede que no me esté andando porque tengo algo mal configurado del oscilador interno del PIC? es decir la linea:
#fuses INTRC_IO, NOWDT, NOPROTECT, PUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
2) Tengo que agregarle algo mas a esta linea para usar en oscilador interno y esa frecuencia? Tengo que colocar HS, XT, etc o alguno de estos parametros o estos son para cuando se usa un oscilador externo?
3) Tengo que configurar algo mas: Los puertos como salida?
Aca va el programa:
#include <16f819.h>
#fuses INTRC_IO, NOWDT, NOPROTECT, PUT, MCLR, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG
#use delay(clock=8000000)
void main(void){
long duty_PWM1;
// Para la frecuencia del pic de 8 mhz, frecuencia de 153600 hz ,
// T2DIV set to 1
// Para calcular la frecuencia:
// (4/frecuencia cristal)*T2_DIV*(periodo+1)
// seleccionamos PWM para los dos módulos CCP
setup_ccp1 (CCP_PWM);
// (4/8000000)*1*(12+1)=0.00000651seg
setup_timer_2(T2_DIV_BY_1, 12, 1);
duty_PWM1 = 52; // 0.00000651seg/(1*(1/8000000))=52.08, que es el valor a
//cargar. Duty 50%
set_pwm1_duty(duty_PWM1);
while(1){ //bucle infinito.
}
}
Muchas Gracias
-
Me vienen a la mente 2 soluciones
- Como tú dices, delcarar puerto C como salida (si ptoC en ese PIC tiene el PWM)
- La resolución PWM de tu PIC no es capaz de sacar un duty time al 50%.
La fórmula de la resolución en bits del PWM es:

Y si no es ninguna de las anteriores, tal vez deberías revisar lo del oscilador interno. Ahí no puedo ayudarte porque nunca he usado un PIC así.
-
hola
Tienes que configurar difentes parametros como por ejemplo el CCP1CON
Aqui debes activar el PWM
PWM Period = [(PR2) + 1] • 4 • TOSC •(TMR2 Prescale Value)
PWM Duty Cycle = (CCPR1L:CCP1CON<5:4>
•TOSC • (TMR2 Prescale Value)
Espero que te ayude.