Autor Tema: Dimmer con infrarojos y pic 16f887  (Leído 3058 veces)

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

Desconectado Kajurome

  • PIC10
  • *
  • Mensajes: 1
Dimmer con infrarojos y pic 16f887
« en: 21 de Abril de 2013, 05:46:11 »
Hola, bueno, esta es la primera vez que publico algo, asi que no se si este sea el subforo correcto; ahora mi pregunta...
Estoy haciendo un dimmer AC utilizando infrarojos; el receptor va a recibir 2 señales diferentes de 2 emisores diferentes, que, pasando del receptor, los va a convertir a votajes, entonces lo que necesito es que cada vez que se presione un boton y envie la señal y reciba dicho voltaje, baje o suba el ciclo de trabajo del pwm, tengo este programa pero solo funciona con potenciometro y nos prohibieron totalmente utilizar potenciometro

Código: [Seleccionar]
unsigned int kuro;
void main(){
ANSEL = 0xFF;         //entrada analogica
PWM1_Init(1000);      //inicia el modulo pwm a XHz
TRISA = 0x0F;         //Puertos A entrada
PORTA = 0x00;
PORTC = 0x00;
TRISC = 0x00;

PWM1_Start();         //inicia PWM

while (1){
kuro = ADC_Read(1);   //lee ADC y lo guard
PWM1_Set_Duty(kuro);  //de 0 a 255, 0 es 0% , 127 es 50% y 255 es 100% del ciclo de trabajo.
}
delay_ms(200);
}

No estoy muy segura si esta bien que use el ADC, y no se como hacer para que cuando reciba un voltaje bajo (entre 0.3v y 2.3v), baje el ciclo de trabajo, y cuando reciba un voltaje alto (entre 2.7v y 4.8v) suba el ciclo de trabajo si me pudieran indicar mas o menos como hacerlo se los agradecere mucho
estoy utilizando un pic 16f887, un cristal de 4MHz y el programa lo estoy haciendo en mikroC pro for pic

Desconectado fuente

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 571
Re: Dimmer con infrarojos y pic 16f887
« Respuesta #1 en: 23 de Abril de 2013, 12:56:52 »
Busca por el foro porque hay mucha información al respecto.
¿Tienes que hacer un dimmer AC con PWM? me suena algo raro. Para controlar cargas AC se suele utilizar control de fase. Para una bombilla, con un triac sería lo adecuado.

También hay información sobre los infrarrojos.

Yo no empezaría con el 16f84a. Es antiguo (obsoleto) y caro.  Si con el 887 te apañas, adelante.

Busca en el foro que encontrarás (y aprenderás).

Desconectado sirias52

  • PIC10
  • *
  • Mensajes: 40
Re: Dimmer con infrarojos y pic 16f887
« Respuesta #2 en: 23 de Abril de 2013, 12:58:15 »
Hola Kajurome, la idea es básicamente la misma, nada mas que en vez de usar un POT para variar el PWM utilizaras un control remoto (IR) y un receptor (IR).

Ya que trabajas en microC pues bastara con buscar un librería que use algún protocolo IR (RC5, Sony, etc), que quiero decir con esto: bueno pues con con el control que gobiernas los mandos de tu televisor puedes gobernar el pwm de tu pic. Simplemente teniendo un control philips o un sony(dependiendo del protocolo IR que vayas a utilizar, pero estos dos son los mas conocidos) y un TSOP (es el receptor IR, correspondiente a la frecuencia de cada protocolo)..

Por ejemplo si te fijas en este link (http://www.pic_examples.byethost3.com/SIRC.html) , aqui veras una libreria en microc para la decodificacion sony sirc. Luego si te fijas en el programas principal veras esta parte de codigo:

Citar
while(1){
          if(got_data){
            Command_code = input_data & 0x7F;
            Device_code = input_data >> 7;
            got_data = 0;
            if(Device_code == 1){
               switch (Command_code){
                  case 0: LED1 = ~LED1; break;
                  case 1: LED2 = ~LED2; break;
                  case 2: LED3 = ~LED3; break;
                  case 3: LED4 = ~LED4; break;
                  case 4: LED5 = ~LED5; break;
                  case 5: LED6 = ~LED6; break;
                  case 6: LED7 = ~LED7; break;
               }

aquí lo que sucede es que si de tu control remoto tu presionas el botón 1 se encenderán o se apagara algún led, pero tu puedes utilizar eso mismo,pero según tus necesidades. por ejemplo tu tienes esto:

Citar
while (1){
kuro = ADC_Read(1);   //lee ADC y lo guard
PWM1_Set_Duty(kuro);  //de 0 a 255, 0 es 0% , 127 es 50% y 255 es 100% del ciclo de trabajo.
}
delay_ms(200);
}

pero lo puedes acomodar de esta manera

Citar
while(1){
          if(got_data){
            Command_code = input_data & 0x7F;
            Device_code = input_data >> 7;
            got_data = 0;
            if(Device_code == 1){
switch (Command_code){
           case 1:   kuro++;                              //incrementa variable
                         PWM1_Set_Duty(kuro);
}         break;
               }

Esa es la idea, pero recuerda que tu variable no puede incrementar mas de 255, tendrias que condicionarlo y luego para decrementar la variable kuro pues utilizas algún otro botón de tu control (puede ser el botón 2 ) y decrementas a kuro hasta cero.

saludos y cualquier duda aqui estamos para  ayudarte

aqui hay info que pude ayudarte http://tech-freaks.net/experimentos/dimmer-digital-pic-control-remoto-sony/
« Última modificación: 23 de Abril de 2013, 16:38:16 por sirias52 »