Autor Tema: Control de intensidad de luz de un led blanco  (Leído 19089 veces)

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

adolfoadc

  • Visitante
Control de intensidad de luz de un led blanco
« en: 06 de Febrero de 2004, 12:40:00 »
Buenas amig@s,
Necesito hacer lo siguiente con un pic12c508, debo dar en una de sus salidas una señal pwm de 500HZ y ir variando el duty cicle desde el 0% al 100% en un espacio de tiempo determinado (3 segundos desde 0% al 100%), os preguntareis para que?
Con esto pretendo encender y apagar un diodo led blanco de forma suave, es decir se va encendiendo poco a poco hasta llegar a tope, espero un par de segundos y comienza a apagarse poco a poco hasta que se apaga totalmente, y luego a encenderse y asi sucesivamente.
Hay por ahi algo para conseguir esa señal pwm en un micro sin pwm (12c508).

Gracias colegas,

Desconectado manex_1987

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1127
RE: Control de intensidad de luz de un led blanco
« Respuesta #1 en: 06 de Febrero de 2004, 13:31:00 »
Lo primero que se me ocurre, aunque por lo poco que sé , es el uso de un 555 , y variar la resistencia (eso ya no se como). No se si te habre ayudado, tal vez te he comido la cabeza, pero bueno...

saludos

Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Control de intensidad de luz de un led blanco
« Respuesta #2 en: 06 de Febrero de 2004, 15:01:00 »
Creo que lo mejor es que hagas un PWM por programa... enciendes (duty cicle) y apagas con un período fijo... el que te dan los 500hz que dices... o sea 2ms... si fuera en una onda cuadrada normal serían 1ms por semiciclo... o sea encendido al 50%.
varías el duty cicle (dc) en tiempo desde 0.1ms a 1.9ms (0 a 100%), por lo tanto el ciclo bajo deberá ser 2ms - dc....

Eso lo repites y modificas a variable en el tiempo como para provocar el encendido y apagado gradual en forma secuencial.

Espero haberte ayudado.
Si quieres que te orientemos con el código.. deberás decirnos en que lenguaje programas.

Un abrazo...
marmatar
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado cucaracha

  • PIC24H
  • ******
  • Mensajes: 1409
    • CUCAWEB
RE: Control de intensidad de luz de un led blanco
« Respuesta #3 en: 06 de Febrero de 2004, 18:02:00 »
También puedes mirar esto y ver si puedes sacar algo en claro:
http://www.microchip.com/1010/suppdoc/appnote/all/an654/index.htm

Además, así por encima, si sólo va a hacer eso o mientras haga eso no hace otra cosa, pues yo lo haría en C. Un bucle con un par de delays cada uno con una variable. Incrementas una y la otra la decrementas. Esto hasta que llegue a cero la segunda variable. Luego un delay con el tiempo que quieres que esté encendido (2seg)  y ahora el mismo bucle pero ahora el proceso inverso.
Lógicamente la suma de ambos delays es 2ms (500Hz).
Habría que ajustar esto un poco para que se note el encendido y el apagado. Vamos para que no vaya tan rápido que no se note. Pero para eso tenemos el proteus no...

saludos!!

Saludos desde Huelva (ESPAÑA)

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Control de intensidad de luz de un led blanco
« Respuesta #4 en: 07 de Febrero de 2004, 03:39:00 »
Si lo que quieres es un simple regulador de luminosidad lo puedes hacer metiendo esa frecuencia como entrada de pulsos por RB0 y hacer un escalado con el TMR1, te saldrá un aumento y disminución de luminosidad muy fina.

Un saludo

adolfoadc

  • Visitante
RE: Control de intensidad de luz de un led blanco
« Respuesta #5 en: 07 de Febrero de 2004, 05:53:00 »
Gracias por la prontitud en las respuestas.

Pretendo hacerlo con solo el pic y el led blanco enganchado a un transistor que es controlado por el pic.
No tengo mucha idea de C, ni de BAsic, asi que deberia hacerlo en ensamblador. Aunque si tengo los programas gracias al foro.

En C hay alguna intruccion para conseguir una salida PWM por cualquier pin digital. Cual es? Como se hace?

La idea es utilizar PWM, y un PIC para poder cambiar facilmente los ciclos de apagado y encendido en el programa.

Si me podeis echar una mano con el codigo, aunque sea en C, algo entiendo.

Gracias compañeros

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Control de intensidad de luz de un led blanco
« Respuesta #6 en: 08 de Febrero de 2004, 10:15:00 »
¿Es fundamental que sea el 12c508? te lo digo porque en C sí que hay instrucciones que controlan directamente los módulos de captura-comparación-pwm, pero claro el PIC los tiene que tener, y ese no es el caso del 508.

Respecto a que si se puede generar pwm por otros pines que no sean RC1 ni RC2, con instrucciones directas en C, la respuesta es no.

Eso sí por software puedes generar con temporizaciones el pwm por el pin que quieras.

Si quieres adolfo te hago un programita sencillo para controlar tu led por pwm, con instrucciones C directas, usando un módulo CCP, eso sí tendría que ser para otro PIC.

Un saludo


PD. Con el TMR1 también se puede, metiendo la salida del detector de cruce por cero por RB0. Por cierto la onda ha de ser de 500Hz, no puede ser la de la red, 50Hz?

adolfoadc

  • Visitante
RE: Control de intensidad de luz de un led blanco
« Respuesta #7 en: 08 de Febrero de 2004, 13:28:00 »
Os explico la razon, es que tengo que mirar por el precio y los 12C508 me salen por 0,57€. Y como el micro es lo unico que tiene que hacer tengo que hacerlo con este, da igual el tamaño del programa siempre que quepa dentro de los 512bytes que tengo de memoria, da igual la tecnica para hacerlo, aunque no tenga el programa quiero aunque sea la idea de como hacer una salida pwm en un pin cualquiera dentro de un micro que no tenga esa caracteristica.
El sacar una frecuencia de 500Hz por un pin no tiene problema ninguno, pero lo que no tengo claro es como variar el supuesto duty cycle de dicha señal pwm.
Gracias de antemano por vuestra ayuda.

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Control de intensidad de luz de un led blanco
« Respuesta #8 en: 08 de Febrero de 2004, 23:46:00 »
Vale Adolfoadc.

Voy a ver si lo hago en C, me ha picado.

Desconectado marmatar

  • Moderadores
  • PIC24H
  • *****
  • Mensajes: 1220
    • MSTools
RE: Control de intensidad de luz de un led blanco
« Respuesta #9 en: 09 de Febrero de 2004, 15:42:00 »
Hola Adolfo...
Si miras en el sitio de todopic... verás que hay un programita para un controlador de servos de modelismo, en asm... éste produce precisamente un PWM en un 16F84 (que no tiene ésa característica), variando el duty cicle...
Si mal no recuerdo, los servos tienen un rango entre 0.1ms y 1.9ms... o sea que el coclo completo es de 2ms... por lo tanto la frecuencia si mis cálculos mo fallan es de 500hz.
Quizá ésto te sirva para darte una idea de como se hace.

Un abrazo...
marmatar

Nota: sinó, mira en el apartado de robótica, en una oportunidad he puesto algo de control de servos... y era para PICs pequeños sin PWM.
Lo posible ya está hecho, entonces hagamos lo imposible - Platón

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: Control de intensidad de luz de un led blanco
« Respuesta #10 en: 09 de Febrero de 2004, 19:51:00 »
Hola, aqui tienes un programita que escribi hace tiempo, y justamente controlaba el brillo de un display...  te puede servir para sacar ideas

http://www.todopic.com.ar/asm/PWM/pwm.txt

Suerte!
Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
RE: Control de intensidad de luz de un led blanco
« Respuesta #11 en: 09 de Febrero de 2004, 23:40:00 »
Ya está.

El uso de delay_us() en temporizaciones que necesitan ser precisas, no es muy recomendable. Aunque si lo único que se pretende es encender un LED suavemente y que a los dos segundos se apague suavemente, esté 2s parado y vuelta a empezar, pués este es el programa:

//                              Ejer30_5A.C
// El LED se enciende suavemente hasta el máximo y luego se apaga suavemente hasta cero

#include <16F84A.h>

#use delay(Clock=4000000)

main()
{
   int16 b,c;
   output_B(0x00);
   set_tris_b(0x00);
   setup_counters(RTCC_INTERNAL,RTCC_DIV_16);
   
    while(1)
    {
       delay_ms(2000);
      while(b<255)
      {
         set_timer0(50);            
         while(get_timer0()<220)
         {
            output_high(pin_B0);               
            for(c=b;c!=0;c--)
               delay_us(5);
               
            output_low(pin_B0);               
            for(c=255-b;c!=0;c--)
               delay_us(5);   
         }               
         b++;                  
      }

      output_bit(PIN_B0,1);
      delay_ms(2000);      
      while(b>0)
      {
         set_timer0(50);            
         while(get_timer0()<220)
         {
            output_high(pin_B0);               
            for(c=b;c!=0;c--)
               delay_us(5);
               
            output_low(pin_B0);               
            for(c=255-b;c!=0;c--)
               delay_us(5);   
         }               
         b--;                  
      }
    }
}    

Si quieres más velocidad en el proceso cambia int16 por int8

Un saludo

PD. No tenía para probarlo físicamente, el 12C508 y lo hice con el 16F84. Cambia el #include <16F84A.h> por #include <12C508.h> y ya está (salida al LED por pin B0). Funcionamiento comprobado del circuito con el 12C508 en PROTEUS.

adolfoadc

  • Visitante
RE: Control de intensidad de luz de un led blanco
« Respuesta #12 en: 10 de Febrero de 2004, 02:00:00 »
Gracias por vuestras respuestas, voy a digerir un poco la informacion que me habeis mandado, en cuanto tenga novedades os lo hago saber. ( a lo mejor mas que novedades tengo dudas pero bueno ya se resolveran )

Desconectado xootraoox

  • Colaborador
  • PIC16
  • *****
  • Mensajes: 248
RE: Control de intensidad de luz de un led blanco
« Respuesta #13 en: 13 de Febrero de 2004, 16:58:00 »
UNA PREGUNTA AMIGOS Y SI YO NECESITARA LO MISMO PERO CON DOS LED"S PERO A LA VEZ QUE UNO VAYA ENCENDIENDO EL OTRO VAYA APAGANDO MMMM... SE ENTIENDE

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
RE: Control de intensidad de luz de un led blanco
« Respuesta #14 en: 13 de Febrero de 2004, 17:29:00 »
Hola, no se nada de C, pero se me ocurre que es muy simple, donde esta
output_high(pin_B0);

debajo escribes lo contrario para otro pin
output_low(pin_B1);


y viceversa....


Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...