TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: andpic en 13 de Diciembre de 2005, 05:35:00

Título: Problemita con PWM
Publicado 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
Título: RE: Problemita con PWM
Publicado por: migsantiago en 14 de Diciembre de 2005, 16:17:00
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í. Muchas risas
Título: RE: Problemita con PWM
Publicado por: fecudo en 29 de Diciembre de 2005, 01:57:00
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>Giño •TOSC • (TMR2 Prescale Value)

Espero que te ayude.