Autor Tema: 3 salidas PWM con PIC 16F628A para led RGB  (Leído 2281 veces)

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

Desconectado javibautista90

  • PIC10
  • *
  • Mensajes: 25
3 salidas PWM con PIC 16F628A para led RGB
« 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!!!!

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:3 salidas PWM con PIC 16F628A para led RGB
« Respuesta #1 en: 20 de Octubre de 2015, 19:53:37 »
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:


Código: [Seleccionar]
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 )


 

anything