Autor Tema: Dimmer con mando  (Leído 117987 veces)

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

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Dimmer con mando
« Respuesta #195 en: 29 de Mayo de 2010, 02:18:14 »
Yes, el pin 1 es a 5V.
El interruptor de la pared se conecta entre pin 8 y masa, sí.
Pero el pulsador de programación no se conecta en el pin 3, sino entre el pin 2 y masa.

Desconectado stk500

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4923
Re: Dimmer con mando
« Respuesta #196 en: 29 de Mayo de 2010, 04:17:52 »
yo lo quiero usar sin el detector de Cruce osea que tendre que cambiar algo del programa, me puede dar una pista de eso? yo solo quiero que sea sin Triac, poner un led, para decoracion de un planta interiores :mrgreen:
Gracias Genio por aclararme el esquema.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: Dimmer con mando
« Respuesta #197 en: 29 de Mayo de 2010, 06:24:55 »
Para eso creo que te vendrá mejor este otro:
Generación de 3 PWM, probamos led RGB

Desconectado setshomaru

  • PIC12
  • **
  • Mensajes: 66
Re: Dimmer con mando
« Respuesta #198 en: 10 de Junio de 2010, 16:49:02 »
Buenos dias compañeros,

De nuevo acudo a los grandes para la solucion de mis problemas, llevo 8 dias tratando de hacer un dimmer gobernado por puerto serie, me he basado en el minidimmer de Nocturno, utilizo un micro 16f688, las interrupciones externas de este micro estan en el pin RA2, de alli conecto una resistencia de 1 mega como hace Nocturno para detectar el cruce por cero, como no tengo osciloscopio para verificar que se realice correctamente pongo un contador y cuando llega a 120 cambia de estado un led cada segundo, 120 porque en Colombia manejamos redes electricas de 120 Voltios a 60Hz, considerando que se detecta el cruce por cero 2 veces en una onda por eso se debe contar 120 veces y tendremos 1 segundo, esto lo hace perfectamente, segun mis calculos para controlar la intesidad de la lampara si a 50Hz, debo cortar la onda en no mas de 10mS en 60Hz será 1/60= 16mS aprox.  tiempo que toma una onda completa por lo tanto cada semiciclo toma alrededor de 8ms. he probado de mil formas y no me funciona, lo hago cada vez que entra a la interrupcion desactivo el triac, espero menos de 8ms y lo activo. La unica forma en que me funciona a medias es con Delays en microsegundos como lo muestro en el sgte programa pero asi solo logro 3 intensidades alta, media y nada, ademas que no tiene ningun sentido, pensé que era un problema con los delay del CCS, y lo probé con el timer0 arrojando lo mismo, ya no se que mas hacer, si alguien me puede ayudar se los agradeceria mucho. les adjunto el programa en CCS y el esquema.




/*
Dimmer gobernado por puerto serie
Setshomaru 2010_05_09
*/


#include <16F688.h>
#fuses XT,NOWDT,NOPROTECT,PUT,BROWNOUT   
#device ADC=10
#use delay(clock=4000000)
#use rs232(baud=4800, xmit=PIN_C4, rcv=PIN_C5)
#use standard_io(c)


#define  salida1_on        output_high(pin_c0)
#define  salida1_off       output_low(pin_c0)
#define  salida2_on        output_high(pin_c1)
#define  salida2_off       output_low(pin_c1)
#define  in1               input(pin_c2)
#define  in2               input(pin_c3)

int      i=1,cont=0;
int1     flag1=0;
byte     intensidad=0,intensidad2=0;
char     dato_pc;
int16    cuenta=0;
byte     recibe[64];                  //declaramos variables
byte     envia[64];

/////////////////////////////////////////////////////////////////////
//  subrutina que recibe datos del pc////////////////////////////////
////////////////////////////////////////////////////////////////////

#int_rda   
void rda_isr() {
 
  output_toggle(pin_c0);
  dato_pc=0x00;   
  if(kbhit()){   
     dato_pc=getc();
     intensidad=dato_pc;   //lo que reciba sera la intensidad de la luz
     printf("ok ");        //confirmacion dato recibido
  }
   
}

/////////////////////////////////////////////////////////////////////
//  interruciones externas///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////

#int_ext

void interrup_RA2() { 

      cuenta=cuenta+1; //cuenta ingresos a la interrupcion
      switch (flag1){
      case 0: flag1=1; ext_int_edge(L_TO_H);break;// cambio los flacos de interrupcion
             
      case 1: flag1=0; ext_int_edge(H_TO_L);break;   
      }
     
     
      if(cuenta==120){  //entró 120 veces?
         output_toggle(pin_c0);// el led cambia de estado cada segundo
         cuenta=0;
      }
     
      salida2_off;            //desactivo triac
      delay_us(intensidad);   //espero para activacion                           
      salida2_on;             //activo triac
}

/////////////////////////////////////////////////////////////////////
//  bloque principal/////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////

void main(void) {

 
 
   intensidad=0;
   flag1 =0;
   set_tris_c(0xfc); //defino entradas y salidas
   salida1_on;       //pruebo salida 1
   delay_ms(500);
   salida1_off;
   delay_ms(500);
   salida2_on;       //pruebo salida2
   delay_ms(500);
   salida2_off;
   delay_ms(500);
   enable_interrupts(int_rda);   //habilito interrupciones puerto serial
   enable_interrupts(int_ext);   //habilito interrupciones externas
   ext_int_edge(H_TO_L);         //defino primer flaco interruciones
   setup_adc_ports (NO_ANALOGS); //no analogos
   enable_interrupts(global);    //habilito interruciones
   
   while (1)
   {
   delay_us(50);  //ciclo infito a la espera de interrupciones
   
   }
}
entre mas se, me doy cuenta que no se nada

Desconectado setshomaru

  • PIC12
  • **
  • Mensajes: 66
Re: Dimmer con mando
« Respuesta #199 en: 10 de Junio de 2010, 16:54:27 »
Se me olvidaba los valores que funcionan en microsegundos son de 0 a 255  cambiando de estado en 160 y 200, 0= todo, 160=medio, 255= bajo. Lo he probado tambien con la minifuente de Nocturno y es lo mismo.
entre mas se, me doy cuenta que no se nada

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dimmer con mando
« Respuesta #200 en: 11 de Junio de 2010, 16:42:14 »
Hola.

Yo quitaría ese printf de la interrupción serial, ya que en algunas versiones del CCS, se suelen desactivar las interrupciones (te aparece algun warning en la compilacion?).

Saludos
El papel lo aguanta todo

Desconectado setshomaru

  • PIC12
  • **
  • Mensajes: 66
Re: Dimmer con mando
« Respuesta #201 en: 09 de Diciembre de 2010, 21:09:00 »
Muchas gracias por la repuesta, el problema era el optoacoplador al parecer si tienen detección de cruce por cero no funcionan.
entre mas se, me doy cuenta que no se nada

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Dimmer con mando
« Respuesta #202 en: 10 de Diciembre de 2010, 15:19:20 »
Que optoacoplador terminaste usando?? :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado setshomaru

  • PIC12
  • **
  • Mensajes: 66
Re: Dimmer con mando
« Respuesta #203 en: 11 de Diciembre de 2010, 00:13:05 »
MOC3021, no tiene detector de cruce por cero y me trabaja a la perfección.
entre mas se, me doy cuenta que no se nada

Desconectado Suky

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 6758
Re: Dimmer con mando
« Respuesta #204 en: 11 de Diciembre de 2010, 00:37:54 »
Muchas gracias por la repuesta, el problema era el optoacoplador al parecer si tienen detección de cruce por cero no funcionan.

Exactamente  ;-)
No contesto mensajes privados, las consultas en el foro

Desconectado setshomaru

  • PIC12
  • **
  • Mensajes: 66
Re: Dimmer con mando
« Respuesta #205 en: 21 de Diciembre de 2010, 12:15:19 »
Buenos días compañeros,

Ahora tengo otra pregunta, se podrán controlar varios dimmers con un solo pic?, lo he tratado de hacer y me hace efectos no deseados les dejo el codigo:



/*
Dimmer gobernado por puerto serie rs485   
2010_12_03
*/


#include <18F452.h>
#fuses HS,NOWDT,NOPROTECT,NOLVP
#use delay(clock=20000000)
#use i2c(master,sda=PIN_C4, scl=PIN_C3)       // Definición I2C estándar
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)

#define  ON        output_high
#define  OFF       output_low
#define  tx_rs485  output_high(pin_c5)
#define  rx_rs485  output_low(pin_c5)
#define  dir_local 0xA2
#define  ejecutar  'X'
#define  pregunta  '?'
#define  enter     0X0D

//aqui se pueden cambiar los pines de los actuadores
int  act[16]   =  {pin_d2,pin_d3,pin_d4,pin_d1,pin_d0,pin_c2,pin_c1,pin_c0,
                   pin_b5,pin_b4,pin_b3,pin_b2,pin_b1,pin_d7,pin_d6,pin_d5};
                     
byte      i=1,cont2=0,i_buffer=0,i_act=0;
int16    cuenta=0;
byte     intensidad[16], i_cont=0, cont[16];
byte     buffer_in[32];
byte     buffer_out[32];
int1     buffer_rs485_lleno=0, z=0,flag_dim[16];

/////////////////////////////////////////////////////////////////////
//  subrutina que recibe datos del pc////////////////////////////////
////////////////////////////////////////////////////////////////////

#int_rda   
void rda_isr() {
 
  if(kbhit()){
 
     buffer_in[i_buffer] =getc();
   
     
     if( buffer_in[i_buffer]==0x7e){
         
         i_buffer=0;
       
     }
     if( buffer_in[i_buffer]==enter){
         buffer_rs485_lleno=1;
         i_buffer=0;
         tx_rs485;
         putc('R');
         rx_rs485;
     }
     i_buffer = i_buffer+1;
  }
   
}

/////////////////////////////////////////////////////////////////////
//  interruciones externas///////////////////////////////////////////
/////////////////////////////////////////////////////////////////////

#int_ext

void interrup_RB0() { 
       
      enable_interrupts(INT_TIMER0);         //activo int por timer0
      set_timer0(0);//11-40-----   
     
}

////////////////////////////////////////////////////////////////////////////////
//interrupciones por desborde de timer0
////////////////////////////////////////////////////////////////////////////////

#int_RTCC
void reloj_isr(){
 
   
   for(i_cont=0;i_cont<=15;++i_cont){
   
      cont[i_cont]++;                 //cuenta las veces que se entra a la int           
   
   if (cont[i_cont]==intensidad[i_cont]){ // de 1 a 80
      cont[i_cont]=0;                 //borro contador
     
      if(flag_dim[i_cont]==1){
      disable_interrupts(INT_TIMER0);
      ON (act[i_cont]) ;// el led cambia de estado cada segundo
      //delay_us(100);
      OFF(act[i_cont]);
      }
   }
   
   }     
}           
/////////////////////////////////////////////////////////////////////
//  bloque principal/////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////
void analiza_buffer_rs485(){
   
   if(buffer_in[1]==dir_local){
      if(buffer_in[3]==ejecutar){
         intensidad[buffer_in[4]]=buffer_in[6];
         flag_dim[buffer_in[4]]=buffer_in[5];
         
      }
   }
   
   buffer_rs485_lleno=0;
   
}

void main(void) {

   //intensidad[i_cont]=5;
   for(i_cont=0;i_cont<=15;++i_cont){
      intensidad[i_cont]=30;
      flag_dim[i_cont]=0;
      cont[i_cont]=0;
   }
   
   rx_rs485;
   enable_interrupts(int_rda);   //habilito interrupciones puerto serial
   enable_interrupts(int_ext);   //habilito interrupciones externas
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_2|RTCC_8_BIT); //ver cabecera                                                                                                                                         
   enable_interrupts(INT_TIMER0);         //activo int por timer0
   ext_int_edge(L_TO_H);         //defino primer flaco interruciones
   setup_adc_ports (NO_ANALOGS); //no analogos
   enable_interrupts(global);    //habilito interruciones
   flag_dim[0]=1;
   //intensidad[2]=40;
   //intensidad[3]=15;
   while (1)
   {
   rx_rs485;
   
   
   if(buffer_rs485_lleno==1){
      analiza_buffer_rs485();
     
   
   }
   
   
   }
}



Mientras utilice una sola salida todo bien, o todos tengan la misma intensidad funciona bien, pero si las intensidades son diferente se porta de forma irregular, será que no es posible?
entre mas se, me doy cuenta que no se nada

Desconectado MLO__

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4581
Re: Dimmer con mando
« Respuesta #206 en: 21 de Diciembre de 2010, 13:34:42 »
Hola.

Si se puede. Mira aqui. También hice uno de 5 canales y va bien hasta ahora.

Saludos.
El papel lo aguanta todo

Desconectado MexaTronko

  • PIC10
  • *
  • Mensajes: 38
Re: Dimmer con mando
« Respuesta #207 en: 24 de Noviembre de 2014, 23:26:34 »
Hola que tal estoy haciendo un dimmer pero tengo dudas acerca con la fuente de alimentación. Quiero alimentarlo con una fuente sin transformador que alimente el micro controlador que consume 1.65mAmp, un led que consume 10mAmp, Un moc3020 que consume 10mAmp, un TSOP1738TB1 que consume 5mAmp, un 4N33 que creo que consume 50mAmp. Tengo entendido que estas fuentes solo proporcionan alrededor de 20mA, entonces quisiera saber si es bueno alimentar con una fuente sin transformador o si a una de este tipo se puede diseñar para que proporcione más corriente o es mejor utilizar un transformador para la fuente. Espero que me puedan ayudar y corregir si me equivoque en los consumos de corriente de cada elemento, dejo un diagrama de la fuente.


 

anything