Autor Tema: PWM lento con el 12F629?  (Leído 3005 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Tosbar

  • PIC10
  • *
  • Mensajes: 17
PWM lento con el 12F629?
« en: 30 de Agosto de 2008, 13:35:55 »
Que tal gente del Foro, esta ves para una duda sobre el Timer0 del 12F629.

Resulta que quiero generar un PWM por software a una frecuencia de 100Hz, por lo que el periodo debe ser 10ms, estoy poniendo una resolución de 256 asi que 10ms/256 = 0.039ms ese es el tiempo en que se debe desbordar el timer0, sacando calculos para la precarga me da un valor de 219, usando el oscilador interno de 4Mhz y el prescaler de 1, hasta aqui todo bien. :lol:

Realizo el programa como se los pongo a continuacion

Código: [Seleccionar]
#include <12F629.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc, no CLKOUT
#FUSES NOCPD                    //No EE protection
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOMCLR                   //Master Clear pin used for I/O
#FUSES NOPUT                    //No Power Up Timer

#use fast_io (A)

#use delay(clock=4000000)

int8 conteo=0, duty_arriba=128;

#int_TIMER0
void  RTCC_isr(void)
{
conteo++;
if(conteo==0)
    output_high(PIN_A0);
else if (conteo==duty_arriba)
    output_low(PIN_A0);
set_timer0(254);
}


void main()
{
   set_tris_a(0b111100); //Configuramos entradas-salidas del puerto
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_comparator(NC_NC);
   setup_vref(FALSE);
   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);

   // TODO: USER CODE!!
do{
  

}while(true);


}

Se genera el PWM bien, el problema es que al ver la simulacion el periodo en lugar de 10ms, me da 20ms :(, al programar el PIC se nota un tenue pero molesto de parpadeo, probe incrementando la precarga del timer hasta 254 y lo mejor que logre fue un periodo de 17ms aprox. Porque será que no me esta dando la frecuencia que en teoria deberia dar? :? como podria lograrlo? :shock:

Gracias de antemano, Saludos. :mrgreen:

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PWM lento con el 12F629?
« Respuesta #1 en: 30 de Agosto de 2008, 15:52:40 »
Hola.

El tiempo de desborde del timer es la mitad del periodo, tal como lo calculas, esta 10mS prendido y 10mS apagado ... asi que el periodo total es de 20mS, por lo que la frecuencia no sera de 100Hz. Si quieres esa frecuencia el periodo es de 10mS, asi que la señal debe estar 5mS prendida y 5mS apagada!!!  :mrgreen:

Saludos
El papel lo aguanta todo

Desconectado Tosbar

  • PIC10
  • *
  • Mensajes: 17
Re: PWM lento con el 12F629?
« Respuesta #2 en: 01 de Septiembre de 2008, 12:57:08 »
Gracias por la atencion MLO, no me queda muy claro porque me comentas que el tiempo de desborde es la mitad. Si necesito 100Hz el periodo sera 10ms y si le pongo una resolución de 256 seria 10ms/256 = 0.039ms, es decir el timer tiene que desbordarse cada 0.039ms para que al contar las 256 veces resulten los 10ms, y dentro de esos 256 vario el duty, no es así o en donde estoy cometiendo el error?

Saludos  :)

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: PWM lento con el 12F629?
« Respuesta #3 en: 01 de Septiembre de 2008, 17:45:18 »
Hola.

Los calculos estan bien hechos el enredo esta en el concepto de periodo, la idea es la siguiente: supongamos que configuro el timer0 con lo siguiente (4MHz):
Código: [Seleccionar]
setup_timer_0(RTCC_8_BIT | RTCC_DIV_4 | RTCC_INTERNAL);
[code]
por lo tanto tendre la base de tiempo de 1.024ms, es decir, el micro entrara a la interrupcion cada 1.024ms; si dentro de la interrupcion tengo la funcion de cambiar de estado el pin de salida, tendre 1.024ms en estado ON y 1.024ms en estado OFF, por lo que el periodo de la senal sera de 2.048ms. En tu caso estas tomando el tiempo de interrupcion cada 10ms y haces los calculos y esa parte esta bien, pero estas calculando el tiempo en el que el micro entra a la interrupcion es decir la mitad del periodo, es decir, tendras 10ms en estado ON y 10ms en estado OFF. Recuerda que el periodo de una senal es el tiempo en el que la onda completa un ciclo, en este caso Ton + Toff.

Saludos
[/code]
El papel lo aguanta todo

Desconectado gabrielrey37

  • PIC10
  • *
  • Mensajes: 1
Re: PWM lento con el 12F629?
« Respuesta #4 en: 10 de Agosto de 2010, 01:51:39 »
supongo ya lo habas solucionado, pero el problema es que tu interrupcion cae dentro del codigo de los calculos, muchas veces (tambien te demora los delays) y los parpadeos son poruqe cambias variables desfasado con el timmer, y a veces se saltea un paso al comparar y tira un pulso de 255 (esto podes solucionarlo con < en lugar de =)


 

anything