TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: javibautista90 en 20 de Octubre de 2015, 19:40:11
-
Hola como estan??? Escribo porque estoy realizando un proyecto y necesito controlar un led RGB con el Pic 16F628A, y por lo que vi, este pic solo tiene una salida PWM por hardware por lo tanto debo realizar las salidas por software. Como puedo hacer para generar 3 salidas PWM por software al mismo tiempo para controlar los 3 led y variar los colores en lenguaje Basic??? Estoy re trabado con esto y no puedo avanzar. Por favor alguien responda. Desde ya muchisimas gracias!!!!
-
En basic no te puedo dar ejemplos. Pero el concepto es el mismo, vas a tener que usar un timer. Supongamos que queres un PWM con 4 bits de resolucion ( 0 - 15 )
Y la frecuencia del PWM sea de 1Khz, Entonces 1Khz tiene un periodo de 1ms, vos tenes que hacer 16 partes de eso es decir 1ms/16 = 62.5us cada seccion.
Entonces haces que tu timer genere una interrupcion cada 62.5us, utilizas un contador de cuantas veces entra y luego comparas, algo asi:
Interrupcion:
If PwmR > Contador Then SalidaR = 0 Else SalidaR = 1
If PwmG > Contador Then SalidaG = 0 Else SalidaG = 1
If PwmB > Contador Then SalidaB = 0 Else SalidaB = 1
Contador = Contador + 1
If Contador == 16 Then Contador = 0
Luego en tu programa solo cambias PwmR por un valor entre 0 y 15 y lo demas se encarga el timer
Espero que me entiendas :P
Hay mas cosas para mejorar, como que recien actualize PwmX cuando recien esta en 16 Contador, de esa forma no tenes una onda media rara a veces. Pero bueno eso depende de vos, del micro que estes usando ya que la frecuencia va a ser importante, etc.
PD: Es mas que obvio que no vas a hacer a 1Khz, por que las secciones te quedan muy chichas (62 us los cuales 1us es cada instruccion a 4Mhz y se la va a pasar en la interrupcion ) y eso que solo tenes 4 bits de resolucion. Si queres mas bits, supongamos de 8, debes pensar en una mayor frecuencia en tu micro y ademas una menor frecuencia de tu PWM ( Supongamos unos 200Hz o 100Hz )