TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: pplu1963 en 05 de Abril de 2005, 13:13:00
-
¿Puede alguien revisar éste código?

Simulado en proteus va perfecto, pero en "real" no corre bien.
¿Sujerencias?. Muchas gracias.
// 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);
}
-
¿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.
-
Hola nocturno, gracias por tu respuesta.
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???.
-
Si quieres envíamelo por mail y así le puedo echar un vistazo. Tienes mi dirección en mi perfil.
-
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
-
Hola usuario_registrado.
Utilizo la v6.5-SP5 y en ellla aparece el 12f675.
Un saludo