TODOPIC

Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pplu1963 en 05 de Abril de 2005, 13:13:00

Título: dimmer 12f675
Publicado por: pplu1963 en 05 de Abril de 2005, 13:13:00
¿Puede alguien revisar éste código?Rebotado
Simulado en proteus va perfecto, pero en "real" no corre bien.
¿Sujerencias?. Muchas gracias.Sonrisa

//    PROYECTO DIMMER DIGITAL para DESPERTADOR  ////////////////////////////////

#include <12F675.h>
#device ADC=10
#fuses INTRC_IO,WDT,PUT,NOPROTECT,NOCPD,NOMCLR,BROWNOUT
#use delay(clock=4000000,restart_wdt)
#ROM 0x3ff = {0x3478}


#define GP0 PIN_A0
#define GP1 PIN_A1      // Triac
#define GP2 PIN_A2
#define GP3 PIN_A3
#define GP4 PIN_A4
#define GP5 PIN_A5

#ZERO_RAM

set_tris_a( 0b000010001 );

int j=1; int valor=110; long i=0; long k=0;

void init()
{
    disable_interrupts(GLOBAL);
   disable_interrupts(INT_EXT);
   disable_interrupts(INT_TIMER0);
   disable_interrupts(INT_TIMER1);
   output_low(GP1);
   setup_comparator(NC_NC_NC_NC);
   setup_adc_ports( NO_ANALOGS );      // disable analog inputs
   delay_ms(750);
}

/// Interrupción del TIMER0, provoca el retardo deseado antes de la excitación
#INT_TIMER0
void tempo()
   {
   output_high(GP1); // Ha transcurrido el tiempo, activo la salida
   }

// Interrupción Externa, provocada por el paso por 0V de la señal de entrada
#INT_EXT
void externa()
   {
    set_timer0(valor);
    enable_interrupts(INT_TIMER0);
   output_low(GP1);

   if (j==0)
   {
    output_high(GP4);
     j=1;
      ext_int_edge(H_TO_L);       // Cambio la detección del flanco, para que la
   }                               // proxima sea de bajada
   else if(j==1)
   {
    output_low(GP4);
     j=0;
      ext_int_edge(L_TO_H);       // La próxima interrupción será de subida
   }

   }
void main()
{

   init();
   enable_interrupts(INT_EXT);
   ext_int_edge(L_TO_H);
   setup_timer_0(RTCC_INTERNAL | RTCC_DIV_64);
   enable_interrupts(GLOBAL);

  do{
   if (input (GP3))
    {
      for(i=0;i<1999;i++)
      {
       delay_ms(1);
        k=k+1;
         If(k>=1999)
         {
          k=0;
           valor=valor+1;
         }
          if (valor >= 252) valor=252;
           if(!input(GP3)) break;
      }

    }
   else
    {
      disable_interrupts(INT_TIMER0);
       valor=110;
        output_low(GP1);
         output_low(GP4);
          i=0;
           k=0;
    }

  }while(true);

}
Título: RE: dimmer 12f675
Publicado por: Nocturno en 07 de Abril de 2005, 05:52:00
¿A qué te refieres con que no funciona bien "en real"?, ¿cuál es el fallo?
¿Y el esquema de tu circuito?

Sería necesario ver todo eso para investigar en tu problema.
Título: RE: dimmer 12f675
Publicado por: pplu1963 en 07 de Abril de 2005, 12:22:00


Hola nocturno, gracias por tu respuesta.Rebotado
Cuando digo que en "real" no funciona quiero decir que una vez montada la placa,
comprobando que el detector de cruce hace su trabajo, que el triac funciona corectamenta y la lámpara no está fundida pues no funciona como se supone.

El encendido debiera ser de forma progresiva, de menos a más brillo, sin funcionamientos abruptos y sin destellos espureos. No puedo adjuntar el archivo de Proteus porque dice que no hay espacio???.Enfurruñado
Título: RE: dimmer 12f675
Publicado por: Nocturno en 08 de Abril de 2005, 03:10:00
Si quieres envíamelo por mail y así le puedo echar un vistazo. Tienes mi dirección en mi perfil.
Título: RE: dimmer 12f675
Publicado por: modelo75 en 08 de Abril de 2005, 09:54:00
una pregunta pplu1963,
que version te proteus tienes??, porque la que yo tengo(6.1) no tengo el 12f675, o que pic usas para simularlo.
Saludos
Título: RE: dimmer 12f675
Publicado por: pplu1963 en 09 de Abril de 2005, 01:20:00

Hola usuario_registrado.
Utilizo la v6.5-SP5 y en ellla aparece el 12f675.

Un saludoRebotado