Autor Tema: Problemas para controlar led RGB con PWM y ahora también ADC [Solucionado]  (Leído 8441 veces)

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

Desconectado Bregy

  • PIC12
  • **
  • Mensajes: 51
Amigos ahora se me presento otro problema, ya había solucionado el del PWM ya casi soluciono el ADC pero ahora estoy frente a otra dificultad y es sobre hardware mi puñetero led RGB es de ánodo común!!!
Osea que el positivo es uno para los 3 colores y cuando quiero usar el PWM en un color individual no puedo me estoy frustrando... :8} :8} :8} :8}
Ayúdenme por favor como puedo hacer para variar el PWM de cada color individualmente!?
« Última modificación: 08 de Febrero de 2013, 23:58:30 por Bregy »

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Otro problema mas! xD
« Respuesta #1 en: 28 de Enero de 2013, 00:18:04 »
La mayoría de los LEDs RGB son ánodo común.

Podrías invertir el valor de cada PWM, logrando invertir el % de duty encendido.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado Bregy

  • PIC12
  • **
  • Mensajes: 51
Re: Otro problema mas! xD
« Respuesta #2 en: 28 de Enero de 2013, 00:25:18 »
Primero gracias por contestar, amigo lo intente asea lo que 255 es 100% de encendido 0 deveria ser lo mas bajo entonces con un poquito de razonamiento supuse que si 205 es digamos el 85%  50 seria el 15 %. Invirtiendo tendríamos que 205 es el 15 % y 50 el 85 % pero eso solo me funcionaba con un led común y no con los RGB :8} :8} :8} :8}

Desconectado BrunoF

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3865
Re: Otro problema mas! xD
« Respuesta #3 en: 28 de Enero de 2013, 00:40:11 »
Para LED RGB necesitás generar 3 PWM independientes, uno para cada canal: Rojo, Verde y Azul. Sino no vas a lograr todos los colores.
"All of the books in the world contain no more information than is broadcast as video in a single large American city in a single year. Not all bits have equal value."  -- Carl Sagan

Sólo responderé a mensajes personales, por asuntos personales. El resto de las consultas DEBEN ser escritas en el foro público. Gracias.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Otro problema mas! xD
« Respuesta #4 en: 28 de Enero de 2013, 02:45:29 »
hola amigo Bregy  yo nunca e utilizado leds rgb pero biendo mas o menos como es su configuracion aqui te dejo un dibujo no te burles lo hice en paint y mas dormido que despierto creo que con eso resuelves el problema de los colores.

el funcionamiento es simple le aplicas pwm al anodo que es comuen el los 3 colores y activas el transistor que se encuentra configurado como emisor comun y asi podras activar los 3 leds independientes cada uno.  por ejemplo si activas el 1 transistor podria variar el rojo estos transistores los activas con 0 y 1 osea 0 y 5v y asi endras el control independiente de cada led si quieres leer un poco mas de transistores y configuraciones el libro de teoria de circuitos de boylestard esta muy bueno te lo recomiendo si tienes mas dudas preguntar

saludos

aaa una cosa mas te recomiendo otro transistor configurado igual que los 3 transistores solo que el colector a positivo de la fuente el emisor al anodo de el led rgb y la base le aplicas la señal pwm con sus respectivas resistencias ya que el pic solo puede suministrar 25 ma por salida y si no pones este transistor 1 pin del pic podria pasar a mejor vida ya me paso con un motorsito dc
asi que sobre abiso no hay engaño
« Última modificación: 28 de Enero de 2013, 02:56:07 por RockLee_89 »

Desconectado Bregy

  • PIC12
  • **
  • Mensajes: 51
Problemas para controlar led RGB con PWM
« Respuesta #5 en: 28 de Enero de 2013, 04:06:12 »
Hola amigo rocklee, gracias por tu tiempo invertido.
Ya habia pensado esa solucion pero no funciona por que si es anodo comun y le doy 30% pwm al anodo y luego digamos quiero el color rosa que es 70% de rojo y 30% de azul pero el pwm solo esta en 30%.
Quedara 30 % de rojo y 30% de azul lo que dara morado y no rosa
« Última modificación: 28 de Enero de 2013, 11:31:16 por Bregy »

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Problemas para controlar led RGB con PWM
« Respuesta #6 en: 28 de Enero de 2013, 05:38:28 »
Puedes utilizar un PWM por hardware para controlar un color y dos PWM  por software para controlar el resto de colores, o bien, puedes utilizar 3 PWM por software.
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Problemas para controlar led RGB con PWM
« Respuesta #7 en: 28 de Enero de 2013, 10:20:28 »
ok Bregy  no savia ups
bueno el amigo dogflu66 te dio una solucion haciendolo por sofware el pwm asi tendras varios pwm por sofware y  hardware
me acorde que me dijiste que usas el pic16f877a el tiene 2 pwm por hardware podrias utilizarlos o por sofware
saludos

Desconectado Bregy

  • PIC12
  • **
  • Mensajes: 51
Re: Problemas para controlar led RGB con PWM
« Respuesta #8 en: 28 de Enero de 2013, 11:24:13 »
Buenas a todos, mi problema no es el numero PWM sino que el pwm se conecta al positivo del  led RGB pero mi led RGB es de positivo común osea que es un positivo para los 3 y si le pongo digamos n% de PWM (al positivo) y luego activo el negativo del rojo sera n% de rojo y luego activo el azul sera n% de azul igual pasa con el verde.
En conclucion no tendré mas que 6 colores (el rojo, azul,morado,verde, amarillo, marrón y cyan, creo que me equivoco xD)

Ah por cierto el mensaje de arriba lo escribí con mi celular y no pude terminarlo así que ese mensaje no vale.

PSDT: Dogflu como hago que el PWM por software sea variable, ahí te dejo un código haber dime si vale.

Código: [Seleccionar]
Define CONF_WORD = 0x3f50

TRISA = 0xff
TRISB = 0
AllDigital
PORTB.0 = 0

inicio:
If RA0 = 0 Then Goto pwm1
If RA0 = 1 Then Goto pwm2
Goto inicio

pwm1:
PORTB.0 = 1
WaitUs 25
PORTB.0 = 0
WaitUs 125
Goto inicio

pwm2:
PORTB.0 = 1
WaitUs 125
PORTB.0 = 0
WaitUs 25
Goto inicio

Gracias a todos! :-/ :-/ :-/

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Problemas para controlar led RGB con PWM
« Respuesta #9 en: 28 de Enero de 2013, 11:42:04 »
Código: FreeBasic
  1. '***********************************************************
  2. 'Pruebas para inciarse en el control de iluminación led por PWM
  3. 'Tres PWM por software
  4. 'Placa Pic EBasic con Pic16F88
  5. '***********************************************************
  6. 'Configuración de fuses y reloj
  7. Define CONF_WORD = 0x2f50
  8. Define CONF_WORD_2 = 0x3ffc
  9. Define CLOCK_FREQUENCY = 8
  10. 'Define SIMULATION_WAITMS_VALUE = 1  'Aumenta la velocidad de las pausas
  11. 'Configuración de módulos
  12. AllDigital  'Los pin analogicos/digitales trabajaran como digitales
  13. CMCON = 0x07  'Comparador a off
  14. OSCCON = 0x7e  'Set intrc To 8mhz, se usara reloj interno a 8Mhz
  15. TRISA = 0  'Puerto A configurado como salidas, execto RA5 que solo trabaja como entrada
  16. TRISB = 0  'Puero B configurado como salidas
  17. PORTB = 0  'Puerto B puesto a cero todos sus pin
  18. 'Rutina principal
  19. main:
  20.         Dim cont As Word 'Contador incremento potencia de los PWMs
  21.         Dim pwm0 As Byte 'Potencia PWM 0
  22.         Dim pwm1 As Byte 'Potencia PWM 1
  23.         Dim pwm2 As Byte 'Potencia PWM 2
  24.         Const cont_s = 5 'Intervalo incremento Potencias
  25.         Dim x As Bit 'Variable auxiliar
  26.         pwm0 = 0 'Potencia inicial 0% PWM0
  27.         pwm1 = 255 'Potencia inicial 100€ PWM1
  28.         pwm2 = 127 'Potencia inicial 50% PWM2
  29.         x = 0
  30.  
  31.         While x = 0  'Bucle principal
  32.        
  33.                 Call _pwm_rb(pwm0, pwm1, pwm2) 'Controla y actualiza los PWMs
  34.                 If cont >= cont_s Then 'Intervalo del incremento de potencias
  35.                         pwm0 = pwm0 + 1
  36.                         pwm1 = pwm1 - 1
  37.                         cont = 0
  38.                 Endif
  39.                 cont = cont + 1
  40.  
  41.         Wend
  42.  
  43. End                                              
  44. 'Funcion para practicas con control de potencia con 3 PWM (software)
  45. 'Para control con positivo comun
  46. 'Pin utilizado RB0 a RB2 del puerto B
  47. 'Frecuencia aproximada 230Hz a 8Mhz de CLK.
  48. 'Tres valores de entrada mediante _pwm0 a _pwm2
  49. 'Con valores comprendidos entre 0 a 255 pasos de potencia
  50. Proc _pwm_rb(_pwm0 As Byte, _pwm1 As Byte, _pwm2 As Byte)
  51.         Const periodo = 255  'Periodo de la señal
  52.         Dim ctrl As Byte  'Lleva el tiempo transcurrido del periodo
  53.         If _pwm0 > 0 Then RB0 = 0  'Pin a OFF
  54.         If _pwm1 > 0 Then RB1 = 0  'Pin a OFF
  55.         If _pwm2 > 0 Then RB2 = 0  'Pin a OFF
  56.         ctrl = 0  'Comienza ciclo
  57.         While ctrl < periodo  'Mientras no se complete el periodo
  58.                 If ctrl >= _pwm0 Then RB0 = 1  'Pin a ON
  59.                 If ctrl >= _pwm1 Then RB1 = 1  'Pin a ON
  60.                 If ctrl >= _pwm2 Then RB2 = 1  'Pin a ON
  61.                 ctrl = ctrl + 1  'Tiempo transcurrido del periodo
  62.         Wend
  63. End Proc
« Última modificación: 28 de Enero de 2013, 14:54:30 por dogflu66 »
Saludos desde Granada, España.

Desconectado Bregy

  • PIC12
  • **
  • Mensajes: 51
Re: Problemas para controlar led RGB con PWM
« Respuesta #10 en: 28 de Enero de 2013, 17:09:29 »
Tengo una idea ya que tengo 3 pics 16f877a y un 16f628 creo que ya se como hare, quiero saber como se pueden enviar datos de un pic a otro osea que el 16f877a envie 3 datos a los 3 pics a la ves y que cada pic use un dato, adjunto una imagen (Tecnica robada del amigo rocklee xD)

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Problemas para controlar led RGB con PWM
« Respuesta #11 en: 28 de Enero de 2013, 18:59:43 »
hola amigo Bregy como tu lo planteas esta bien, solo que para mi gusto no. como lo quieres hacer te puedes comunicar por varias formas creo 1 podria ser 12c pero creo que es muy complicado otra seria por comunicacion serial ya sea el 877 se comunique  serialmente por sofware y los demas por hardare pero usar 4 pic para generar colores. no me gusta mejor usa este nuevo circuito que posteo asi con el programa que el amigo dogflu66 te posteo en el cual generas 3 señales pwm por sofware se los aplicas tranquilamente las bases de los transistores y podras generar los colores

por ejemplo si le generas señal de pwm1 de un % al azul y una señal pwm2 al rojo de un % generas el morado del led y claro la señal pwm3 se desactiva para que no se mescle otro color el cual no es deseado y asi es la idea espero y me entiendas checa la imagen y hecha a volar la imaginacion
saludos

Desconectado dogflu66

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 3510
Re: Problemas para controlar led RGB con PWM
« Respuesta #12 en: 28 de Enero de 2013, 21:55:54 »
En realidad si el led no necesita más de 25mAmp. por pin no son necesarios los transistores ya que el pic es capaz de llegar a suministrar alrededor de los 25mAmp. por pin. De todas formas es recomendable colocar resistencias limitadoras tanto si se usan los transistores como si se usa el pic de forma directa o nos arriesgamos a quemar algo.
Saludos desde Granada, España.

Desconectado RockLee_89

  • PIC16
  • ***
  • Mensajes: 140
Re: Problemas para controlar led RGB con PWM
« Respuesta #13 en: 28 de Enero de 2013, 21:57:32 »
tienes rason dogflu66 pero mas vale prevenir que quemar el pic

 ((:-)) ((:-)) ((:-)) ((:-)) ((:-)) ((:-))

Desconectado Bregy

  • PIC12
  • **
  • Mensajes: 51
Re: Problemas para controlar led RGB con PWM
« Respuesta #14 en: 28 de Enero de 2013, 21:59:08 »
Amigos creen que esto esta bien?:
Código: [Seleccionar]
'***********************************************************
'Codigo original de dogflu66
'Tres PWM por software
'No entiendo donde tengo que variar el duty?
'***********************************************************
'Configuración de fuses y reloj
Define CONF_WORD = 0x2f50
Define CLOCK_FREQUENCY = 4
'Configuración de módulos
AllDigital  'Los pin analogicos/digitales trabajaran como digitales
TRISA = 0  'Puerto A configurado como salidas, execto RA5 que solo trabaja como entrada
TRISB = 0  'Puero B configurado como salidas
PORTB = 0  'Puerto B puesto a cero todos sus pin
'Rutina principal
main:
Dim cont As Word  'Contador incremento potencia de los PWMs
Dim pwm0 As Byte  'Potencia PWM 0
Dim pwm1 As Byte  'Potencia PWM 1
Dim pwm2 As Byte  'Potencia PWM 2
Dim x As Bit  'Variable auxiliar
pwm0 = 0  'Potencia inicial 0% PWM0
pwm1 = 0  'Potencia inicial 100€ PWM1
pwm2 = 0  'Potencia inicial 50% PWM2
x = 0

While x = 0  'Bucle principal

Call _pwm_rb(pwm0, pwm1, pwm2)  'Controla y actualiza los PWMs
pwm0 = cont
pwm1 = cont
pwm1 = cont
Endif
cont = cont + 1
If Count > 900 Then cont = 0
Wend

End                                               
'Funcion para practicas con control de potencia con 3 PWM (software)
'Para control con positivo comun
'Pin utilizado RB0 a RB2 del puerto B
'Frecuencia aproximada 230Hz a 8Mhz de CLK.
'Tres valores de entrada mediante _pwm0 a _pwm2
'Con valores comprendidos entre 0 a 255 pasos de potencia
Proc _pwm_rb(_pwm0 As Byte, _pwm1 As Byte, _pwm2 As Byte)
Const periodo = 255  'Periodo de la señal
Dim ctrl As Byte  'Lleva el tiempo transcurrido del periodo
If _pwm0 > 0 Then RB0 = 0  'Pin a OFF
If _pwm1 > 0 Then RB1 = 0  'Pin a OFF
If _pwm2 > 0 Then RB2 = 0  'Pin a OFF
ctrl = 0  'Comienza ciclo
While ctrl < periodo  'Mientras no se complete el periodo
If ctrl >= _pwm0 Then RB0 = 1  'Pin a ON
If ctrl >= _pwm1 Then RB1 = 1  'Pin a ON
If ctrl >= _pwm2 Then RB2 = 1  'Pin a ON
ctrl = ctrl + 1  'Tiempo transcurrido del periodo
Wend
End Proc                             
« Última modificación: 29 de Enero de 2013, 13:45:20 por Bregy »


 

anything