PWM de varios segundos

Estoy haciendo un proyecto y encesito poder configurar el PWM con el tiempo en estado alto y bajo de varios segundos, no de ms ni us, ayuda porfavor ... estoy usando el pic 16f877a y programo en picc
 
Última edición:
estoy haciendp un electroestimulador muscular, en el que puedes seleccionar tiempo de la sesion, tiempo de contraccion, de relajacion y la frecuencia de los pulsos, hasta ahora, solo puedo enviar por un pin la frecuencia seleccionada, pero no mas :(, y quisiera saber, como usar el PWM teniendo por ejemplo en estado alto unos 4 segundos y en estado bajo unos 2 segundos, y durante e lestado alto, mandar pulsos a la frecuencia seleccionada, adjunto mi proyecto
 

Adjuntos

  • New WinRAR ZIP archive.zip
    95.8 KB · Visitas: 14
Hacer PWM con esa frecuencia en un micro es algo complicado por la parte de los preescaler, postcaler, etc para dividir frecuencia y agrandar el periodo de reloj. Para ello te recomiendo utilices los módulos temporizadores y divisores de frecuencia por software.

Deja busco un programa que tengo de un proyecto similar para que te explique como lograr tal efecto.
Saludos
 
Estoy semanas y semanas que llevo rompiéndome la cabeza pensando como puedo hacer y es para dentro de poco este proyecto.
Cabe mencionar que soy un novato en la programación de pic en C.
 
Última edición por un moderador:
Para simplificar las cosas es mejor usar un cristal externo de 32.768KHz en el TMR1 del 877 aparte del de 4MHz principal. Con ésto será fácil conseguir grandes periodos de temporización. Lee la sección de TMR1 en la hoja de datos del 877 para que te hagas una idea de su funcionamiento. Mientras hago un bosquejo de diagrama de flujo de la idea que te sugiero
 
mmm en el PWM creo que no se puede hacer esos tiempos que dices, mas bien tendrías que usar el Timer y hacerlo funcionar las veces que sea necesario para cumplir los tiempos que necesitas.
Una pregunta, que transformador estas usando para los pulsos??

Saludos
 
¿Transformador? En el programa que subí hay un pequeño error en una ecuación de los pulsos pero más allá de eso, nada. No entiendo a q te refieres.
 
Última edición por un moderador:
Obvio sí, esa parte está de mas, porque ya hice uno utilizando dos 555, pero ahora necesito hacerlo con pic. Parecía más sencillo de lo que es.
 
Última edición por un moderador:
Hola.

Primero, puede que te estés complicando mucho más de lo que necesites.

Necesitás precisión? Cambia mucho si el pulso es de 1,1s o de 0,9?

Si querés hacer un circuito básico básico, te recomiendo 2 LM555, uno astable y el otro monostable, para generar el PWM más básico (y pedorro...) de todos.

Como mencionaste segundos, y el 555 no opera bien a bajas frecuencias, podés usar un oscilador de cristal, y eso mandarlo a un divisor de frecuencias que te active un monostable, el cual generaría el ancho de pulso deseado.

Otra, es usar bastante memoria del micro, generando un contador. El módulo PWM depende del clock del cristal, entonces, podés usar una interrupción que cada ciclo (con prescaler al máximo, obvio) aumente en 1 una variable de 8 o 16 bits.

Si querés usar menos memoria, y la aplicación que necesitás no maneja displays ni nada que requiera velocidad, podés usar el oscilador interno, o uno de la mínima velocidad que el micro acepta.

Y para lo regulable, por ahí necesites el ADC del micro, controlado por el pote...
 
podrias usar el timer 0 para el tiempo de encendido del pwm y el 1 para del apagado de esa manera tenes 2 tiempos regulabes independientes uno del otro, cabe destacar que para lograr segundos deberias usar en los temporizadores algun bucle , ejemplo:cada 200ms interrumpis e incrementas una variable hasta 20 y de ese modo tenes los 4 segundos y cuando termina el ciclo habilita al otro temporizador, me explique bien?
 
Que les puedo decir, programar en C es lo peor, tuve que generar retardos a base de contadores cual ensamblador.
G
racias a todos por su paciencia. :apreton:
 
Última edición por un moderador:
Habiendo timers...
Con un solo timer basta, cuando dispare la interrupción lo recargas con el siguiente valor y listo. Se ajusta un poquito por lo que tardas en recargar y así tienes tooooooodoooo el tiempo para hacer todo lo demás . Ahora tienes un sistema zombie.
 
Atrás
Arriba