Hola que tal, soy nuevo en el foro y quisiera saber algo referente al tema planteado del velocímetro, lo que yo quiero hacer es contar el número de vueltas realizado por una rueda en un segundo y multiplicarlo por 60 para obtener las rpm, bien esto lo estoy haciendo con el TIMER0 usando el pin RA4, el código que uso es el siguiente:
#include <16F877a.h>
#use delay (clock=4000000)
#byte timer0=0x01// REGISTRO DEL TIMER 0
#byte port_b=0x06// REGISTRO DEL PUERTO B
#byte port_c=0x07 /*REGISTRO DEL PUERTO C*/
/* BITS DEL OPTION_REG*/
#bit rbpu =0x81.7
#bit intedg=0x81.6
#bit tocs=0x81.5
#bit tose=0x81.4
#bit psa=0x81.3
#bit ps2=0x81.2
#bit ps1=0x81.1
#bit ps0=0x81.0
#include <lcd.c>
/*VARIABLES*/
int rps, x=0;
char velocidad;
void main()
{
lcd_init(); // Inicia LCD
lcd_putc(" RPM = \n");
delay_us(100);
rbpu=1;//
intedg=0;//
tocs=1; // TRANSICIÓN EN EL PIN T0CKI ES DECIR COMO CONTADOR
tose=1;// INCREMENTO EN BAJO A ALTO POR EL PIN T0CKI
psa=1; // EL PREESCALER ES ASIGNADO POR EL MODULO DEL TIMER 0
/* VALOR DE LA TASA DE BIT PARA EL PRESCALER 111 = 1:256 */
ps2=1;
ps1=1;
ps0=1;
while(1){
/*CONTEO DE PULSOS ENTRADA RAB*/
timer0=0;
delay_ms(1000); // LEE LOS PULSOS EN UN SEGUNDO
x=timer0; // VARIABLE QUE CONTIENE LOS PULSOS
/* PASO LOS PULSOS EN FUNCIÓN DE KM/H */
velocidad=60*x;
lcd_gotoxy(7,2); //posicion en el LCD
printf(lcd_putc,"%u",velocidad);
delay_ms (500);
}
}
efectivamente me cuenta los pulsos generados y los visualizo en la lcd como se muestra en las imágenes, pero si estos pulsos pasan de cuatro no me visualiza el valor que quiero, es decir para los cuatro pulsos me enseña el valor de 240 lo cual es correcto y para cinco me enseña el valor de 44, supongo debido a que 256 + 44 = 300 lo cual es correcto también pero quiero que me enseñe el valor "300", no el valor de "44"
Agradezco la ayuda prestada, un fuerte abrazo y mil bendiciones