Hola nocturno como andan por alli aca aca en la plata con un calor de locos 40 grados
bueno a lo que vengo te dejo lo que e hecho en C lo e simulado en proteus y no funciona del todo mal tengo algunos problemas para enganchar los modos y con los decimales a mostrar.
sobre la entrada si la quieres ver tendras que pagarme unos 40 euros
no mentira la verdad es que me la pasa un compañero de la facu y esta probando con altas frecuencias (yo no tengo con que) y me deje el circuito en su trabajo pero en estos dias paso y lo cuelgo por aca (a mas tardar el sabado)
Aca va el programa como dije en la simulacion funcina pero tengo mis dudas de si esta bien.
#include<16f873a.h>
#use delay(clock=16000000)
#define use_portb_lcd TRUE
#fuses xt,noprotect,nowdt,nolvp
#include <lcd.c>
#BYTE PORTA=5
void main()
{
lcd_init();
printf(lcd_putc," I.El.Ar
DESARROLLO"
;
delay_ms(2000);
printf(lcd_putc,"f de
INSTRUMENTAL"
;
delay_ms(2000);
printf(lcd_putc,"f SELECCIONAR
MODO"
;
while(true)
{
///////// declaracion de variavles /////////////////////////////////////////////
int reloj;
int funcion;
int MODULADOR;
float VISUALIZA;
long int valor1;
float valor_real;
int1 HERTZ;
//////////////////// configuracion de puertos //////////////////////////////////
set_tris_c(0b11111111);
set_tris_a(0b11111111);
///////// Seleccion del modo a utilizar ////////////////////////////////////////
if(input(PIN_A5))
{
funcion++;
}
if(funcion==6)
{
funcion=1;
}
switch(funcion)
{
/////////////////Modo frecuencimetro 1K en adelante///////////////////////
case 1:
while(!input(PIN_A5))
{
setup_timer_1 ( T1_EXTERNAL );
for(;!input(PIN_A5)
{
if (input(PIN_A2))
{
HERTZ++;
delay_ms(100);
if (HERTZ==1)
{
reloj=100;
}
else if(HERTZ==0)
{
reloj=1;
}
}
delay_ms(reloj);
VISUALIZA=get_timer1();
if(HERTZ==1)
{
VISUALIZA=VISUALIZA/100;
lcd_init();
printf(lcd_putc,"FREC1.
Kz %4.3f ",visualiza);
set_timer1(0);
}
else if (HERTZ==0)
{
VISUALIZA=VISUALIZA/1000;
lcd_init();
printf(lcd_putc,"FREC1.
Mz %6.6f ",visualiza);
set_timer1(0);
}
}
}
break;
//////////////////////Modo frecuencimetro de 0 hasta 1K ///////////////////////
case 2:
while (!input(PIN_A5))
{
setup_timer_1 ( T1_EXTERNAL );
for(;!input(PIN_A5)
{
delay_ms(1000);
VISUALIZA=get_timer1();
lcd_init();
printf(lcd_putc,"FREC.
Hz %f ",visualiza);
set_timer1(0);
}
}
break;
///////////////////////// Modo tacometro ///////////////////////////////////////
case 3:
while(!input(PIN_A5))
{
setup_timer_1 ( T1_EXTERNAL );
for(;!input(PIN_A5)
{
delay_ms(1000);
VISUALIZA=get_timer1();
visualiza=60*visualiza;
lcd_init();
printf(lcd_putc,"TACOMETRO.
R.P.M. %6.3f ",visualiza);
set_timer1(0);
}
}
break;
///////////////////////// Modo PWM /////////////////////////////////////////////
case 4:
while (!input(PIN_A5))
{
if (input(PIN_A2))
{
MODULADOR++;
}
if (input(PIN_A3))
{
MODULADOR--;
}
setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,249,1);
set_pwm1_duty(MODULADOR*23);
lcd_init();
printf(lcd_putc,"PWM.
%u ",MODULADOR);
}
break;
///////////////////////// Modo voltimetro //////////////////////////////////////
case 5:
while (!input(PIN_A5))
{
setup_adc_ports (RA0_ANALOG);
setup_adc(adc_clock_div_32);
set_adc_channel(0);
valor1=read_adc();
valor_real=valor1*0.1960899;
lcd_init();
printf(lcd_putc," VOLTIMETRO
Volts %f",valor_real);
delay_ms(300);
}
}}}
Tambien adjunto la simulacion en proteus
bueno muchas gracias y nos estaremos viendo