Como hacer efecto dimmer

Si te encuentras diseñando, desarrollando o construyendo un proyecto y tienes complicaciones, en este sub-foro podemos ayudarte. Aquí ingresa con los temas que no puedas ubicar dentro de otros sub-foros, por ejemplo, Radio, Microcontroladores, Software, etc. Cuando algo no funciona, de este sub-foro sale en marcha.

Moderador: HJ

Como hacer efecto dimmer

Notapor soymoe » Dom Abr 21, 2013 3:16 pm

Hola necesito hacer un efecto dimmer para una placa, lo que tiene que hacer es variar la tension de una salida (la del pic) para poder variar la intensidad de unos leds, tiene que empezar con poco brillo aumentar al maximo y volver a bajar, no quiero usar interrupciones, asi que denme una mando de como hacer la rutina.
Avatar de Usuario
soymoe
 
Mensajes: 36
Registrado: Dom Abr 21, 2013 3:10 pm
Ubicación: Esperanza

Re: Como hacer efecto dimmer

Notapor Mario » Dom Abr 21, 2013 3:36 pm

Hola Moe!

Bienvenido al foro!
Nunca supe ni tu nombre, ni tu edad. Si no te molesta, me gustaría que lo compartas con nosotros.
Espero que puedas encontrar un buen espacio de trabajo y consulta aquí en el foro.

Respecto a lo que necesitas: Para variar intensidad deberíamos usar una salida de PWM manejada por un potenciómetro o por dos pulsadores. ¿Sobre cuál te inclinas? ¿O tiene que hacerlo solo al movimiento? Otra cosa, ¿en qué lenguaje trabajas? ¿C, BASIC, ASM?

Saludos moe!
Bienvenido!
Mario

PD: Intenta ser más simpático y amable al escribir moe, quienes te conocemos sabemos que es tu estilo, pero otros pueden escaparte. ;)
En Servisystem, hay una sección de Montajes que puede llegar a interesarte. Hay muchas ideas útiles y montajes electrónicos para construir. No te olvides: todo lo que sea importante, también estará en el Blog.
Avatar de Usuario
Mario
Administrador del Sitio
 
Mensajes: 428
Registrado: Vie Ene 28, 2011 7:22 am
Ubicación: Principado de San Nicolás de los Arroyos

Re: Como hacer efecto dimmer

Notapor soymoe » Lun Abr 22, 2013 10:34 am

Mario escribió:Hola Moe!

Bienvenido al foro!
Nunca supe ni tu nombre, ni tu edad. Si no te molesta, me gustaría que lo compartas con nosotros.
Espero que puedas encontrar un buen espacio de trabajo y consulta aquí en el foro.

Respecto a lo que necesitas: Para variar intensidad deberíamos usar una salida de PWM manejada por un potenciómetro o por dos pulsadores. ¿Sobre cuál te inclinas? ¿O tiene que hacerlo solo al movimiento? Otra cosa, ¿en qué lenguaje trabajas? ¿C, BASIC, ASM?

Saludos moe!
Bienvenido!
Mario

PD: Intenta ser más simpático y amable al escribir moe, quienes te conocemos sabemos que es tu estilo, pero otros pueden escaparte. ;)

Hola Mario, gracias por responder, mI nombre es Nestor, soy de Esperanza, provincia de Santa Fe, tengo 36 años, soy aficionado a la electronica y ex estudiante de Bioingenieria. Ahora estoy haciendo placas para carteleria led y te consultaba porque algunos ofrecen en sus placas un efecto lllamado "efecto dimmer" que consiste un bajar y subir la intensidad de los led conectados a las placas, no con un control externo sino solo baja y sube la intensidad automaticamente como si fuera otro efecto de luces, no se si me entiendes. Aqui el enlace al producto de mercadolibre, yo quiero agregar ese efecto a mis placas. http://articulo.mercadolibre.com.ar/MLA-453330749-secuenciador-intermitente-5-vias-para-leds-con-dimmer-_JM
Intentare ser mas simpatico, pero como vos decis, es mi estilo. :D
Avatar de Usuario
soymoe
 
Mensajes: 36
Registrado: Dom Abr 21, 2013 3:10 pm
Ubicación: Esperanza

Re: Como hacer efecto dimmer

Notapor elgarbe » Lun Abr 22, 2013 1:14 pm

Mario escribió:Respecto a lo que necesitas: Para variar intensidad deberíamos usar una salida de PWM manejada por un potenciómetro o por dos pulsadores. ¿Sobre cuál te inclinas? ¿O tiene que hacerlo solo al movimiento? Otra cosa, ¿en qué lenguaje trabajas? ¿C, BASIC, ASM?


Néstor eso es básicamente lo que necesitamos para ayudarte. Lo que tendrías que agregar en el programa de tu uC (usas uC en tus controladoras?) es una o varias salidas PWM (de Modulacion de Ancho de Pulso), es una técnica por la cual podés encender y apagar tu salida a una frecuencia determinada (>50Hz preferentemente) y regulando el tiempo que la salida está encendida, versus el tiempo que esta apagada en cada ciclo, será el valor medio obtenido a la salida. Es muy simple de realizar y hay miles de ejemplos, pero para ayudarte, como dice Mario, hay que saber que uC usas y en que lenguaje programas....

Saludos!
A palabras producidas por mentes inoperantes órganos auditivos en posicion de relax

You can be anything you want to be just turn yourself into anything you think that you could ever be - Freddie Mercury
Avatar de Usuario
elgarbe
 
Mensajes: 261
Registrado: Jue Mar 21, 2013 8:27 pm
Ubicación: Villa Ramallo - Buenos Aires - Argentina

Re: Como hacer efecto dimmer

Notapor soymoe » Lun Abr 22, 2013 2:39 pm

Perdon, es que a veces pienso que el ccs es el lenguaje universal, jaja. Programo en CCS y lo quiero usar en dos tipos de PIC, el 16f628a y el 12f629, asi que el micro a usar no seria importante, porque yo lo podria adaptar, solo necesito una funcion tipo:

void dimmer()

Que pueda llamar para usarla, solo es importante que la variacion de la intensidad de la luz de los led conectados a la salida sea apreciable a la vista, el tiempo entre la subida de la intensidad y la vuelta a bajar, no es critico, pero podria ser de unos 5 segundo, mas o menos.
Avatar de Usuario
soymoe
 
Mensajes: 36
Registrado: Dom Abr 21, 2013 3:10 pm
Ubicación: Esperanza

Re: Como hacer efecto dimmer

Notapor elgarbe » Lun Abr 22, 2013 3:23 pm

Ok, aquí tengo código de 3 PWM con el 12F629 (rutinas de PWM robadas a Mario, no digas nada...). Es para controlar unos LED RGB:

No le hagas caso a los comentarios, algunos dicen cualquier cosa, fijate si te huvicas más o menos y dejame las dudas. A la noche cuando vuelvo te respondo.

Código: Seleccionar todo
#include <12F629.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES INTRC_IO                 //Internal RC Osc NO I/O
#FUSES NOMCLR                   //Master Clear pin disabled

#use delay(clock=4000000)

#define PWM_R   PIN_A0
#define PWM_G   PIN_A1
#define PWM_B   PIN_A2

#use fast_io(A)

#byte PORTA = 0x5
#byte TRISA=0x85

int TEMP;

int ACC0;   //ACUMULADORES DE VALORES PWM
int ACC1;
int ACC2;

int DUTY_B;   //PWM DUTY CYCLES DE CADA SALIDA DEL PUERTO B
int DUTY_R;
int DUTY_G;


#int_TIMER0
void TIMER0_isr(void)
{
   ACC0 = ACC0 + DUTY_G;   //ACTUALIZAMOS PWM0
   #ASM RLF TEMP,F #ENDASM
   ACC1 = ACC1 + DUTY_R;   //ACTUALIZAMOS PWM1
   #ASM RLF TEMP,F #ENDASM
   ACC2 = ACC2 + DUTY_B;   //ACTUALIZAMOS PWM2
   #ASM RLF TEMP,W #ENDASM
   #ASM MOVWF PORTA #ENDASM      //PASAMOS LOS ESTADOS DE LOS PWM A LAS SALIDAS
}


//*****************************************************************************
//                            COMIENZA EL PROGRAMA PRINCIPAL
//*****************************************************************************
void main()
{
   int i=0;
   int delay=150;

   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   //setup_oscillator(False);
   TEMP = 0;                              //PONEMOS TODAS LAS VARIABLES A CERO
   ACC0 = 0; ACC1 = 0; ACC2 = 0;
   DUTY_G = 0; DUTY_R = 0; DUTY_B = 0;

   TRISA=0b11111000;      //RA0 a RA2 como Salidas del PWM

   enable_interrupts(INT_TIMER0);
   enable_interrupts(GLOBAL);

   delay_ms(3000);

   do{
      DUTY_G = 0;
      DUTY_R = 0;
      DUTY_B = 0;
      for(i=0;i<255;i+=15){
         DUTY_R = i;
         //DUTY1 = 255-i;
         if(input(PIN_A3)==0){            //Si apretamos el boton Unidad Minuto
            delay_ms(50);                //Espero 100ms para rebote
            if(input(PIN_A3)==0){         //Si sigue apretado (ya no es rebote)
               while(input(PIN_A3)==0);   //Espero a que lo suelte
               delay+=50;                     //Sumo uno a la variable minuto
            }
         }
         delay_ms(delay);
      }
      DUTY_R = 0;
      for(i=0;i<255;i+=15){
         DUTY_G = i;
         //DUTY1 = 255-i;
         if(input(PIN_A3)==0){            //Si apretamos el boton Unidad Minuto
            delay_ms(50);                //Espero 100ms para rebote
            if(input(PIN_A3)==0){         //Si sigue apretado (ya no es rebote)
               while(input(PIN_A3)==0);   //Espero a que lo suelte
               delay+=50;                     //Sumo uno a la variable minuto
            }
         }
         delay_ms(delay);
      }
      DUTY_G = 0;
      for(i=0;i<255;i+=15){
         DUTY_B = i;
         //DUTY1 = 255-i;
         if(input(PIN_A3)==0){            //Si apretamos el boton Unidad Minuto
            delay_ms(50);                //Espero 100ms para rebote
            if(input(PIN_A3)==0){         //Si sigue apretado (ya no es rebote)
               while(input(PIN_A3)==0);   //Espero a que lo suelte
               delay+=50;                     //Sumo uno a la variable minuto
            }
         }
         delay_ms(delay);
      }
     
      DUTY_B = 0;
      DUTY_R = 255;
      for(i=0;i<255;i+=15){
         DUTY_B = i;
         //DUTY1 = 255-i;
         if(input(PIN_A3)==0){            //Si apretamos el boton Unidad Minuto
            delay_ms(50);                //Espero 100ms para rebote
            if(input(PIN_A3)==0){         //Si sigue apretado (ya no es rebote)
               while(input(PIN_A3)==0);   //Espero a que lo suelte
               delay+=50;                     //Sumo uno a la variable minuto
            }
         }
         delay_ms(delay);
      }
      DUTY_R = 0;
      for(i=0;i<255;i+=15){
         DUTY_G = i;
         //DUTY1 = 255-i;
         if(input(PIN_A3)==0){            //Si apretamos el boton Unidad Minuto
            delay_ms(50);                //Espero 100ms para rebote
            if(input(PIN_A3)==0){         //Si sigue apretado (ya no es rebote)
               while(input(PIN_A3)==0);   //Espero a que lo suelte
               delay+=50;                     //Sumo uno a la variable minuto
            }
         }
         delay_ms(delay);
      }
      DUTY_B = 0;
      for(i=0;i<255;i+=15){
         DUTY_R = i;
         //DUTY1 = 255-i;
         if(input(PIN_A3)==0){            //Si apretamos el boton Unidad Minuto
            delay_ms(50);                //Espero 100ms para rebote
            if(input(PIN_A3)==0){         //Si sigue apretado (ya no es rebote)
               while(input(PIN_A3)==0);   //Espero a que lo suelte
               delay+=50;                     //Sumo uno a la variable minuto
            }
         }
         delay_ms(delay);
      }
   }while(TRUE);
}


Saludos!
A palabras producidas por mentes inoperantes órganos auditivos en posicion de relax

You can be anything you want to be just turn yourself into anything you think that you could ever be - Freddie Mercury
Avatar de Usuario
elgarbe
 
Mensajes: 261
Registrado: Jue Mar 21, 2013 8:27 pm
Ubicación: Villa Ramallo - Buenos Aires - Argentina

Re: Como hacer efecto dimmer

Notapor soymoe » Lun Abr 22, 2013 11:06 pm

Hola, como te va, gracias por tu interes, mire tu codigo y lo adapte segun mi logica y esto es lo que obtuve:

Quisiera que la variacion sea un poco mas lenta y que baje mas hasta cero, este es mi cogigo:
Código: Seleccionar todo
void dimmer()
{
int i=0,j=0,DUTY_H=0,DUTYL=0;
   for(i=0;i<255;i+=5)
   {
         DUTY_H = i;
         DUTYL = 255-i;
         for(j=1;j<100;++j)
         {
            output_high(PIN_A0);    // PIN_A0 ó GPIO0 = '1'
            output_high(PIN_A1);     // PIN_A0 ó GPIO0 = '0'
            output_high(PIN_A2);
            output_high(PIN_A4);
            delay_us(DUTY_H);
            output_low(PIN_A0);
            output_low(PIN_A1);
            output_low(PIN_A2);
            output_low(PIN_A4);
            delay_us(DUTYL);
         }
   }
   for(i=0;i<255;i+=5)
   {
         DUTY_H = i;
         DUTYL = 255-i;
         for(j=1;j<100;++j)
         {
            output_high(PIN_A0);    // PIN_A0 ó GPIO0 = '1'
            output_high(PIN_A1);     // PIN_A0 ó GPIO0 = '0'
            output_high(PIN_A2);
            output_high(PIN_A4);
            delay_us(DUTYL);
            output_low(PIN_A0);
            output_low(PIN_A1);
            output_low(PIN_A2);
            output_low(PIN_A4);
            delay_us(DUTY_H);
         }
   }
}

Que opinas?
Avatar de Usuario
soymoe
 
Mensajes: 36
Registrado: Dom Abr 21, 2013 3:10 pm
Ubicación: Esperanza

Re: Como hacer efecto dimmer

Notapor HJ » Lun Abr 22, 2013 11:14 pm

Hola Nestor.
El vídeo aparece como privado... no se puede ver.

Saludos
HJ
"Cuando llegue la inspiración, que me encuentre trabajando"
Picasso, Pablo
Avatar de Usuario
HJ
 
Mensajes: 477
Registrado: Jue Mar 21, 2013 3:16 pm
Ubicación: Tanti - Córdoba - Argentina

Re: Como hacer efecto dimmer

Notapor soymoe » Mar Abr 23, 2013 12:33 am

Gracias por avisar, ya lo cambie.
Avatar de Usuario
soymoe
 
Mensajes: 36
Registrado: Dom Abr 21, 2013 3:10 pm
Ubicación: Esperanza

Re: Como hacer efecto dimmer

Notapor elgarbe » Mar Abr 23, 2013 8:34 am

Por lo que veo, vas disminuyendo el tiempo en OFF a la misma vez que aumentas el tiempo en ON y por lo tanto el período de tu PWM es 255uS o sea 3,9Khz.... solo por hacer una prueba, cambia delay_us por delay_ms haver si mejora el apagado. que resistencia tienes en serie con el led?

saludos!
A palabras producidas por mentes inoperantes órganos auditivos en posicion de relax

You can be anything you want to be just turn yourself into anything you think that you could ever be - Freddie Mercury
Avatar de Usuario
elgarbe
 
Mensajes: 261
Registrado: Jue Mar 21, 2013 8:27 pm
Ubicación: Villa Ramallo - Buenos Aires - Argentina

Siguiente

Volver a Problemas con mis Desarrollos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado