hice la simulacion en proteus pero no funciona como yo creo , como vos decis que ya lo probaste
yo tengo el proteus 8.1 SP1¿que version tienes?
aca pongo la modificacion que le hice de ultima hora:
Código:
#include <12F675.h>
#device adc=10
#FUSES NOWDT, INTRC_IO, NOCPD, NOPROTECT, NOMCLR, NOPUT, NOBROWNOUT, BANDGAP_HIGH, RESERVED
#use delay(clock=4000000)
#bit t1_overflow=0x0C.0
int rpm=false;
const int FMax=50; //frecuencia de operacion en Hz
const int FMin=47; //frecuencia de corte enHz
const int T_Retry=10; //tiempo de espera para reintentar activar campo en Seg
const long Vmax=535; //Voltaje maximo de operacion en escala de 0 a 1024
const long VMin=489; //Voltaje minimo de operacion en escala de 0 a 1024
int32 Freqcount(void){
int cycles8, cycles;
long freqc_high;
long freqc_low;
int32 freq;
cycles8=0x00;
cycles=0x00;
freqc_high=0x00;
t1_overflow=0;
set_timer1(0);
setup_timer_1(T1_External|T1_Div_By_1);
while (cycles!=0xFF)
{cycles8=0x00;
while (cycles8!=0xFF)
{if (t1_overflow)
{t1_overflow=0;freqc_high++;}
else
{delay_cycles(0x05);}
delay_cycles(0x1);
cycles8++;}
delay_cycles(0x55);
cycles++;}
delay_cycles(0x8D);
setup_timer_1(T1_Disabled);
if (t1_overflow) freqc_high++;
freqc_low=get_timer1();
freq=make32(freqc_high,freqc_low);
return(freq);
}
void Turn_on(void)
{output_low(pin_a1);
output_low(pin_a2);
output_high(pin_a4);
if (freqcount()>=FMax) RPM=true;
else output_high(pin_a2);
output_low(pin_a4);
output_float(pin_a1);}
void Turn_off(void)
{output_float(pin_a1);
output_high(pin_a2);
RPM=false;}
void main()
{long VD;
long msec,sec;
setup_adc_ports(sAN0|VSS_VDD);
setup_adc(ADC_Clock_Div_2);
setup_timer_0(RTCC_Internal|RTCC_Div_1);
setup_comparator(NC_NC);
setup_vref(false);
set_tris_a(0b101001);
set_adc_channel(0);
output_low(pin_a4);
output_high(pin_a2);
output_float(pin_a1);
while (true)
{if (RPM==true)
{if (freqcount()<=FMin) {turn_off();sec=0; RPM=false;}
VD=read_Adc();
if (VD>=VMin&&VD<=VMax) output_low(pin_a1);
else output_high(pin_a1);}
else if (sec!=0xFFFF)
{delay_ms(1);
msec++;
if (msec>=0x03E7) {msec=0x00;sec++;}
if (sec>=T_Retry) {turn_on();sec=0x00;}
output_high(pin_a1);}
if (!input(pin_a3))
{while(!input(pin_a3)) true;
output_float(pin_a1);
if (sec==0xFFFF&&RPM==false) sec=T_Retry; else sec=0xFFFF;
if (RPM=true) turn_off();
else if (sec!=0xFFFF) turn_on();}
}
}

Adjuntos
Última edición: