TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado 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
-
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):
#INT_TIMER1
void timer_1(void)
{
pulso++;
if(pulso == 1)
{
output_low(salida);
set_timer1(seteo_low);
}
if(pulso > 1)
{
output_high(salida);
set_timer1(seteo_high);
pulso = 0;
}
}
Te recomiendo te descargues el Redraven Pic Timer Calculator (http://picmania.garcia-cuervo.net/recursos.php) para facilitar tus calculos. :)
Saludos
-
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