desktop

[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 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!
 
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!
 
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
 
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!!
 
Gracias ahora mismo estoy bajando los correspondientes archivos, la verdad lo que requiero esque mediante una tarjeta de adquisición de datos controlar un brazo robotico, pensaba en utilizar moto reductores pero la verdad da mucha lata tener que poner etapas de potencia puentes h el doble de salidas, tu sabes un relajo total, así que me decidí por servos pero nunca e manejado servos con el método que tu haces es decir PWM por software y me tenia que limitar a los 2 módulos que traen los pic comunes pero este método que tu realizaste me parece magnifico, te cuento que la tarjeta ya la tengo, maneja el estándar de comunicación USB- BULK mediante labview la dote con 8 OUT digitales 5 IN digitales 3 In análogas y 2 PWM como veras las 8 salidas quedan mas que perfectas para controlar servos, el diseño del brazo robotico lo are en solid edge ya que es el que me están enseñando en la escuela y si para ese tiempo averiguo como incluir la animación en labview la incluire para que se asimile al brazo en al vida real, o tal-vez una cámara la verdad este proyecto es a largo plazo ya que planeo entregarlo como proyecto final para ingeniería en mecatrónica... iré posteando los avances que tenga contigo ya que me serviría de mucha ayuda tu asesoria ya que por lo que veo eres un genio con pic c y labview, y pues no sabre mucho de esto pero si algun dia requieres mi ayuda o nesesitas algo ya sabes en lo que podamos ayudar aquí estamos.
 
Última edición por un moderador:
Hola amigo otra vez por aquí estuve analizando tu código de la librería lo probé con unos leds y un motor ya en la vida real con el pic 18f2550 y funciona perfecta pero me metí a la hoja de datos de los servos y veo que funcionan con un tiempo de 20 ms es decir utilizando la formula f=1/t nos daría como resultado 50 hz crees que tu librería sea capas de generar esos 50 para controlar servos?? algo mas veo que tu librería PWM controla 3 salidas es posible modificarla para controlar 5 salidas es decir 5 servos? un saludo amigo y disculpa las molestias. de antemano gracias

http://www.roboticapy.com/servo.asp

ahí es donde revise la información de los servos y sus posiciones
 
Última edición por un moderador:
Hola amigo otra vez por aki estube analizando tu codigo de la libreria lo probe con unos leds y un motor ya en la vida real con el pic 18f2550 y funciona perfecta pero me meti a la hoja de datos de los servos y veo que funcionan con un tiempo de 20 ms es decir utilizando la formula f=1/t nos daria como resultado 50 hz cres q tu libreria sea capas de generar esos 50 para controlar servos?? algo mas veo q tu libreria PWM controla 3 salidas es posible modificarla para controlar 5 salidas es decir 5 servos?? un saludo amigo y disculpa las molestias.... de antemano gracias

http://www.roboticapy.com/servo.asp

ahi es donde revise la info de los servos y sus pociciones

Hola GNM, la libreria puede ser configurada para generar ondas cuya frecuencia esta entre 0 y 180Hz, asi que trabajara perfecto con lo servos de 50Hz.
desde luego puedes modificar para que funcione con mas ondas PWM... uno de estos días me pongo a la tarea, cuidate
 

Adjuntos

  • USO DE LA LIBRERIA PWM.pdf
    319.7 KB · Visitas: 111
Última edición:
si amigo me di cuenta de eso y logre modificar la libreria para que me diera 50hz en proteus anda de maravilla pongo el indicador de hz y me da de 47 a 46 hz y el servo se mueve de maravilla el problema es cuando lo paso al circuito mi servo no responde no hace nada y pues le conecte un led.... pero no me hace el efecto de cambio de brillo tan solo parpadea muy lentamente..... y es raro ya que con frecuencias mas altas como el primer ejemplo que tu pusiste me jalaba perfecto el cambio de brillo pero era una frecuencia muy alta para el servo.... Saludos amigos y gracias por tus consejos y apoyos con estos programas me han sido de gran utilidad
 

Adjuntos

  • PWMSERVOS.rar
    51.4 KB · Visitas: 70
Última edición:
si amigo me di cuenta de eso y logre modificar la libreria para que me diera 50hz en proteus anda de maravilla pongo el indicador de hz y me da de 47 a 46 hz y el servo se mueve de maravilla el problema es cuando lo paso al circuito mi servo no responde no hace nada y pues le conecte un led.... pero no me hace el efecto de cambio de brillo tan solo parpadea muy lentamente..... y es raro ya que con frecuencias mas altas como el primer ejemplo que tu pusiste me jalaba perfecto el cambio de brillo pero era una frecuencia muy alta para el servo.... Saludos amigos y gracias por tus consejos y apoyos con estos programas me han sido de gran utilidad


Para no percibir el parpadeo del led debes generar una onda PWM con frecuencia minima de 60Hz. Frecuencias menores a 60Hz el ojo humano ya es capas de percibir.

si el fabricante de los servos que tu compraste te recomienda trabajar con 40hz , hazlo, aunque el led sea intermitente...
 
Atrás
Arriba