TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: juanes79 en 20 de Abril de 2017, 00:14:22

Título: Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: juanes79 en 20 de Abril de 2017, 00:14:22
Cordial saludo amigos. Les consulto como puedo realizar un dimerizado (variar la intensidad de brillo de un led) de cada una de las salidas de los puertos A, B, y C de manera independiente, utilizando el pic 16F883. Necesito realizar un programa que por cada salida del puerto  A, puerto B y puerto C, conecte un led a cada salida y varíe la intensidad de brillo al mismo tiempo. Como puedo estructurar este programa o que me recomiendas para empezar a realizarlo.

Saludes
Título: Re:Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: juanes79 en 20 de Abril de 2017, 00:33:15
Se me olvidaba decirles que este programa lo debo realizar en MPLABX.
Saludos.
Título: Re:Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: KILLERJC en 20 de Abril de 2017, 08:31:38
Lo que te estan pidiendo que realizes es un PWM ( cualqueir cosa busca que es en internet )

¿Como lo realizaria?

Fijo un frecuencia/periodo, suponete que 100Hz es decir 10ms Y quiero que el brillo tenga 10 escalones. Asi que tendria que ser 10ms/10 = 1ms

Procedo a crear una interrupcion con un timer de 1ms. Y crear 3 variables globales ( 1 para cada salida) de 8 bits que van a tener el numero de 0 a 10.

Entonces en la interrupcion cuento cuantas veces entro a la misma, con una simple variable nuevamente. Si alguna de las variables de salida es igual a mi contador procedo a encender la salida. Cuando llega a 10 la cuenta de mi interrupcion, lo cambio por 0 y apago todas las salidas. Algo asi:

Código: C
  1. if(contador >= 10)
  2. {
  3.        contador = 0;
  4.        SalidaA = 0;
  5.        SalidaB = 0;
  6.        SalidaC = 0;
  7. }
  8. if( contador >= SalidaA ) { SalidaA = 1;}
  9. if( contador >= SalidaB ) { SalidaB = 1;}
  10. if( contador >= SalidaC ) { SalidaC = 1;}
  11. contador++;

El codigo en la interrupcion va a ejecutarse constantemente, sin tu interaccion, lo que vos vas a poder cambiar es el brillo desde tu main, para cambiar el brillo, solamente necesitas poner de 0 a 10 en las variable SalidaX.
Si el brillo lo hace muy lento que se ve el parpadeo, deberias buscar una frecuencia mayor.
Título: Re:Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: juanes79 en 20 de Abril de 2017, 23:22:11
Gracias amigo Killerc por tu respuesta. Te consulto si por medio del PWM, es posible variar la intensidad de brillo de 10 salidas al mismo tiempo en el microcontrolador.

Saludes.
Título: Re:Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: KILLERJC en 20 de Abril de 2017, 23:41:26
Si, todo es posible.. solo tendrias que agregar mas varaibles, una para cada salida si es que son independientes.

Aunque si queres algo mejor deberias variar la corriente, y para eso ya deberias usar algun driver de leds los cuales con una comunicacion serial podes definir el brillo de cada salida..
Pero pensando que esto parece ser mas un trabajo de alguna escuela, te diria que lo hagas y pienses solo de esa forma
Título: Re:Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: Picuino en 22 de Abril de 2017, 05:27:15
Cuando quieres controlar tantas salidas PWM lo mejor es cambiar a otro microcontrolador que tenga muchas salidas PWM por hardware (que yo sepa Microchip no lo tiene) o añadir un circuito que controle múltiples PWM como este de Texas Instruments:

http://www.ti.com/product/tlc59116-q1

Controla 16 leds con salida PWM de 256 pasos en cada led de forma independiente. Son relativamente baratos y dejan libre al microcontrolador para hacer otras cosas.

Es importante que el PWM tenga muchos pasos porque en caso contrario casi no vale para nada. La luz la vemos de forma logarítmica, de manera que si tu PWM tiene un ratio de 1 a 10, es muy pequeño. Casi no habrá diferencia de iluminación entre el nivel más pequeño y el más grande y se verán "saltos" grandes entre un nivel y otro.
Con 256 pasos el cambio de luz se ve más gradual.

Un saludo.
Título: Re:Como variar la intensidad de brillo de varios led al mismo tiempo
Publicado por: remi04 en 20 de Mayo de 2017, 03:06:19
Podria conectar los anodos de los led a cada puerto con su resistor en serie por led y los catodos comunes a un transistor en source comun"mosfet para estas cosas" . Ese transistor seria disparado por el pwm del pic.  El pwm lo configuraria con frecuencia de salida fija siempre.

  En el programa crearias una variable byte por cada led para asignar luego su valor al dutty cicle del pwm asi tienes 256 pasos de brillo.

  La forma de actuar seria multiplexando los leds, algo asi.

 - Pwm dutty a 0%
   High_led1
 - Pwm dutty a X %. (de 0 a 255 seleccionas el brillo aqui).
 - low_led1

   Lo mismo con el siguiente led.  Y luego el otro y el otro etc. 

  Y si te lo montas bien se puede usar un solo puerto para conectar los anodos de todos los led, luego otro puerto para direccionarlos por grupos " necesitarias un mosfet por cada grupo de 8 leds. Asi si tienes por ejemplo 50 leds, no tienes que crear 50 variables sino solo 5.

  Luego se trata de direccionar primero el led a encender entre los dos puertos " una matrix vamos" y luego dispararlo con el pwm al duty elegido "brillo".