[Aporte] Mezclador de luz RGB

Ahi descargue 2 archivos con 16f877 y otro con 16f84. La simulacion del 16f84 me dice que el parpadeo de los leds es de 10Hz. Creo que algo anda mal. La simulacion del 16f877 parece que anda bien mandando pulsos de 38Hz.
Un par de ideas que tengo en mente es armar una rutina al estilo:

pwm_max_resolution(1~255)

pwm_set_percent_dutycycle(0~100)

Lo que noto es que si se aumenta la resolucion, baja la frecuencia, y eso con un cristal de menor velocidad que 20Mhz seria un problema. Yo le agregaria una funcion para sacrificar resolucion y ganar frecuencia.
Tambien que el ajuste del ancho se pueda hacer tambien por porcentaje. Para mi es mas comodo usando % y de paso uno se olvida de la resolucion maxima.

---EDIT
Pude sacar 200Hz con resolucion de 255 a 20Mhz. El codigo en Jalv2 es este por ahora.

Código:
const timer0_isr_rate = 80000
const DELAY_SLOTS = 2

var byte pwm_soft_duty0=0

var byte contador=255

alias   led      is pin_A0
pin_A0_direction =  output

include timer0_isr_interval
timer0_isr_init()

procedure timer0() is
pragma interrupt
	
	if (contador==pwm_soft_duty0) then
	pin_a0=0
	end if
	
	if (contador==0) then
	contador=255
	porta=255
	end if
	
	contador=contador-1
	
end procedure

	pwm_soft_duty0=0

forever loop
		
	if (pin_b0==1) then
	pwm_soft_duty0=pwm_soft_duty0+10

	   while(pin_b0==1) loop
	   end loop

	end if
	
end loop

Me da un par de warning pero igual parece que anda. Apreto el pulsador y me va bajando el duty. Esto se esta poniendo bueno, mas tarde voy a probar con un par de LEDs RGB que tengo por ahi para hacer pruebas.
 
Última edición:
Lo que noto es que si se aumenta la resolucion, baja la frecuencia, y eso con un cristal de menor velocidad que 20Mhz seria un problema. Yo le agregaria una funcion para sacrificar resolucion y ganar frecuencia.

Hola nestoriano, sabes que estube analizando, y no fue necesario sacrificar la resolucion para aumentar la frecuencia. Lo que hice fue cargar un valor al timer0 para que se desborde mas rapido y obtube una frecuencia de 170Hz con la misma resolucion de 8 bits.

es buena idea eso de controlar el ciclo util mediante porcentaje de 0-100%. en la proxima version de la libreria talvez incluya esa opcion. :apreton:

----------------------------------------------------------------------------------------

Aporto con este Mezclador RGB , utiliza tres potenciometros para controlar el brillo de cada LED. ademaqs un pequeño tutorial de como utilizar la libreria PWM.h que esta bastante optimizada. espero sus comentarios y sujerencias
 

Adjuntos

  • 11.PWM con POTS.rar
    365.8 KB · Visitas: 182
aporto este mezcaldor de luz, controlado por computador , metodo de comunicacion USB HID.. la simulacion con Proteus no funciona.. pero al armarlo todo anda bien..


adjunto tambien un programa en visual basic que envia tres valores entre 0 y 255, que controlan el brillo cada LED Rojo, verde y azul..


saludos!!
 

Adjuntos

  • 5.hidRGB.rar
    468.4 KB · Visitas: 142
  • hidRGB.rar
    782.9 KB · Visitas: 138
hola olinqui, respondiendo a tu pregunta,

si quieres 150Hz................................................ PWM_init(200);
para alcanzar 170Hz.......................................... PWM_init(225);
si quieres 180Hz................................................ PWM_init(250);

etc,... con esta libreria alcanzaras frecuencia maxima 180Hz.. puedes revisar el archivo en pdf donde explico como utilizar las libreria PWM.h.. se encuentra en el archivo PWM con POTS.rar



la instruccion set_timer0(offset).. , te permite cargar al timer0, mientras mayor es el valor de öffset¨ mas rapido se desbordara el timer0
 
Última edición:
hola dino, estuve revisando el proyecto y me parece excelente, pero tengo una duda: quiero añadirle un canal adicional para trabajar cuatro canales, y aumentar de 3 a 10 leds por canal, que programas utilizaste para compilar y simular? quedo atento, ya que quiero implementarlo para la decoración navideña, tan pronto lo haga (con tu ayuda en respuesta a este mensaje) postearé fotos y video, gracias y saludos!
 
holA KIYERO, CON TRANsistores 2n3904 Y Una fuente de +12V podras conectar hasta 6 LEDs por canal, con una de fuente de 24V conectarías hasta unos diez calculo yo...

solo con tres canales puedes obtener toda la gama de colores RGB, espero postees tu trabajo, saludos!
 
holA KIYERO, CON TRANsistores 2n3904 Y Una fuente de +12V podras conectar hasta 6 LEDs por canal, con una de fuente de 24V conectarías hasta unos diez calculo yo...

solo con tres canales puedes obtener toda la gama de colores RGB, espero postees tu trabajo, saludos!

ok Dino, pero con que programa puedo simularlos? me gustaría hacerlo de cuatro canales para ubicar un canal por cada lado del salón donde tengo pensado instalarlos, gracias, saludos
:)
 
esta simulado con Proteus 7.10; puedes utilizar PIC C Compiller para compilar el programa.

para aumentar un canal necesitaras hacer cambios en la libreria pwm.H

Hola dinoelectro, hice las modificaciones según tus recomendaciones y me tira error de compilación, podrías ayudarme echando una ojeada? me defiendo mucho con picbasic, de c, muy poco, agradezco tu ayuda, subo los archivos esperanhttp://c3.forosdeelectronica.net/attach.gifdo tu ayuda al revisarlos, gracias
 

Adjuntos

  • leds_pwm.zip
    1.5 KB · Visitas: 59
estas utilizando la libreria PWM.h antigua.. descargate la ultima version esta en el archivo: PWMconPOTS.rar
inteta con esa que es mucho mejor y mas optimizada, ademas incluye un manual de como utilizarla, saludos!
 
estas utilizando la libreria PWM.h antigua.. descargate la ultima version esta en el archivo: PWMconPOTS.rar
inteta con esa que es mucho mejor y mas optimizada, ademas incluye un manual de como utilizarla, saludos!

Hola Dino, hice lo que me dijiste, bajé la nueva librería (la cual dejé tal cual) y modifiqué el código, pero al compilar me bota el error del archivo adjunto, podrías por favor indicarme en que he fallado? recuerda que soy novel con programación en c, gracias por tu ayuda y paciencia :apreton:
 

Adjuntos

  • code.jpg
    code.jpg
    238.8 KB · Visitas: 37
al compilar me bota el error

El error que te aparece es porque para inicializar la libreria PWM debes utilizar Pwm_init y el otro error se debe a que para asignar el valor del ciclo util debes utilizar Write_Duty0(i); Write_Duty1(j); Write_Duty2(k); segun sea el caso. Espero haberte ayudado, este proyecto se me hizo interesante y lo he estado estudiando, tambien soy nuevo en programacion en c
 
El error que te aparece es porque para inicializar la libreria PWM debes utilizar Pwm_init y el otro error se debe a que para asignar el valor del ciclo util debes utilizar Write_Duty0(i); Write_Duty1(j); Write_Duty2(k); segun sea el caso. Espero haberte ayudado, este proyecto se me hizo interesante y lo he estado estudiando, tambien soy nuevo en programacion en c

mi estimado jerry, muchas gracias por tu orientación, he hecho como dijiste y efectivamente compiló al 100% sin errores, y obviamente vas mas aventajado que yo en la programación en C, podrías orientarme si estás estudiando C a través de algún libro o manual específico? creo que me paso a c y dejo basic a un lado, gracias, voy a simular el resultado y postearé como me fué, saludos!!! ;)
 
Pues he estado leyendo algunos articulos en la red, apenas baje un libro que se llama ´"Compilador C CCS y simulador Proteus para controladores pic". No voy para nada aventajado, empece a leer sobre C hace 2 dias
 
tengo una pregunta uno toma como si fueran tres leds diferentes, entonces uno puede encenderlos al mismo tiempo (mirar imágenes adjuntas)? o tiene que esperar apagar uno para encender otro? con respecto a las corrientes de el led, se tiene que manejar una corriente para cada led o la corriente máxima de todos los led es la misma?
 

Adjuntos

  • diag1.jpg
    diag1.jpg
    27.3 KB · Visitas: 14
  • diag2.jpg
    diag2.jpg
    23.6 KB · Visitas: 12
tengo una pregunta uno toma como si fueran tres leds diferentes, entonces uno puede encenderlos al mismo tiempo (mirar imágenes adjuntas)? o tiene que esperar apagar uno para encender otro? con respecto a las corrientes de el led, se tiene que manejar una corriente para cada led o la corriente máxima de todos los led es la misma?


puedes encender todos los leds al mismo tiempo. toda la corriente se divide para tres.
yo maneje tres metros de cinta rgb con 12V, 800mA utilizando transistores MOSFET y trabaja fenomenal!:D
 
me gusto mucho tu aporte la pregunta es esta, veo que estas manejando el pwm sin utilizar este modulo del pic es decir utilizas una salida digital, requiero acer algo parecido pero para controlar unos servos desde labview me podrias orientar al respecto porfavor.........
 
mira en el archivo PWMconPOTS.rar que subi anteriormente, ahi esta explicado como utilizar la libreria PWM.. te cuento que ahora estoy trabajando en esa libreria para poder generar has 12PWM simultaneamente, de seguro te servira para controlar al servo.

tratare de ayudarte en lo que este mi alcance GNM, saludos!!
 
Atrás
Arriba