TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: jadacuor en 09 de Julio de 2010, 00:00:27

Título: divisor de frecuencia para obtener pwm<=60Hz
Publicado por: jadacuor en 09 de Julio de 2010, 00:00:27
hola a todos, ya he leido bastante acerca del pwm del pic16f877a y se que con un cristal de 4 MHz la frecuencia minima que se puede obtener es 244Hz y resulta que necesito un pwm con una frecuencia mucho mas baja (10 - 60Hz), tambien les cuento que pense utilizar un cristal de 1MHz y lo minimo que obtuve fue 61Hz pero por estos lares no encuentro ese tipo de cristal, asi que vuelvo al cristal de 4MHz y ahora tengo la idea de utilizar un contador como divisor de frecuencia. ya intente con la simulacion en proteus pero no anda bien (utilice un 74ls93) y pues no se que pasa (creo que teoricamente esta bien), asi que acudo a ustedes en busca de soluciones o ideas que seran bienvenidas.

de antemano muchas gracias
Título: Re: divisor de frecuencia para obtener pwm<=60Hz
Publicado por: KALLITOS en 09 de Julio de 2010, 00:30:39
Hola, puedes usar el timer1 + interrupcion para lograr los 16,666ms, yo tengo un codigo que genera 60Hz y pwm variable con cristal de 20Mhz prescaler de 2 y un set de 23871, te dejo de tarea calcular los valores que deberan llevar las variable seteo_low y seteo high ;-) (ambos deben generar tiempos que sumados den 16,666ms):

Código: C
  1. #INT_TIMER1
  2. void timer_1(void)
  3. {
  4. pulso++;
  5. if(pulso == 1)
  6.    {
  7.    output_low(salida);
  8.    set_timer1(seteo_low);
  9.    }
  10. if(pulso > 1)
  11.    {
  12.    output_high(salida);
  13.    set_timer1(seteo_high);
  14.    pulso = 0;
  15.    }  
  16. }

Te recomiendo te descargues el Redraven Pic Timer Calculator (http://picmania.garcia-cuervo.net/recursos.php) para facilitar tus calculos.  :)

Saludos

Título: Re: divisor de frecuencia para obtener pwm<=60Hz
Publicado por: jadacuor en 09 de Julio de 2010, 00:40:47
hey muchisimas gracias por responder, en realidad habia pensado hacer algo asi solo que mi mente lo visualizaba mas complicado, tedioso y extenso, y ahora veo el codigo que me pasas y sorpresa es muy corto, todavia no comprendo como variar el ancho del pulso por ejemplo con la entrada del adc (con un potenciometro en ra0), te agradeceria me explicaras