Hombre PIKMAN, si , tenias razón, a partir de ese post saqué la idea. Por ahora la medida que obtengo es algo razonable. Pues gracias a ti y a las demas personas que participaron en el enlace tengo un velocimetro y el programa esta abajo y lo que hize fue generar una base de tiempo de 1 segundo y cuando desborda se genera una interrupcion.
Y creo que lo unico que tengo que comentar es la siguiente expresion:
Velocidad= Pulsos * 175.55 * 0.036;
Pulsos= Numero de pulsos contados en un segundo
La costante: 175.55 Sale de 2* PI (3.1416) * 27.94, donde 27.94 esta en centimetros y corresponde al radio de una rueda convencional de automovil.
0.036 es la costante para pasar a KM/H
Bueno, me resta contarlo y probarlo, luego les contaré. Pero de momento quiero agradecerle nuevamente a PIKMAN por su productiva colaboracion. Gracias de Verdad.
gfp
#include <16F876A.h>
#use delay(clock=32768)
#fuses LP, NOWDT, PUT, NODEBUG, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT
#zero_ram
#use fast_io(A)
#use fast_io(B)
#use fast_io(C)
#include "LCDD.C"
#define LED_ACTIVIDAD PIN_B7
int i;
int32 Pulsos;
float Velocidad=0;
/*******************************************************/
void lcd_barrido(void)
{
lcd_putc("f");
for(i=1;i<=20;i++)
{
lcd_gotoxy(i,1);
lcd_putc(0xFF);
lcd_gotoxy(i,2);
lcd_putc(0xFF);
delay_ms(10);
}
for(i=1;i<=20;i++)
{
lcd_gotoxy(i,1);
lcd_putc(0xFE);
lcd_gotoxy(i,2);
lcd_putc(0xFE);
delay_ms(10);
}
}
/*******************************************************/
#int_TIMER0
void TIMER0_isr()
{
Velocidad= Pulsos * 175.55 * 0.036;
lcd_putc("f");
printf(lcd_putc, "%03.1f", Velocidad);
lcd_putc(" ");
lcd_putc("Km/h");
pulsos=0;
Velocidad=0;
output_toggle(LED_ACTIVIDAD);
set_timer0(0);
}
/*******************************************************/
void main()
{
SET_TRIS_A(0x3F);/* 0011 1111
RA0=
RA1=
RA2=
RA3=
RA4=
RA5= */
SET_TRIS_B(0x7F);/* 0111 1111
RB0=Entrada Pulsos
RB1=
RB2=
RB3=
RB4=
RB5=
RB6=
RB7= */
SET_TRIS_C(0x00);/* 0000 0000
RC0=
RC1=
RC2=
RC3=
RC4=
RC5=
RC6=
RC7= */
lcd_init();
lcd_barrido();
lcd_putc("f");
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_32);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
enable_interrupts(INT_TIMER0);
disable_interrupts(INT_TIMER1);
disable_interrupts(INT_TIMER2);
enable_interrupts(INT_TIMER0);
enable_interrupts(GLOBAL);
pulsos=0;
set_timer0(0);
while(1)
{
while (input(PIN_B0)); //Espero el "0"
{}
pulsos++;
while (!input(PIN_B0)); //Espero el "1"
{}
}
}