Un saludo a todo el foro, que pena no haber respondido antes pero tuve problemas al acceder al la página del foro. Bueno muchachos veo que algunos están motivados en el proyecto al igual que yo. En estos dias estuve manejando el compilador de C para los microcontroladores PIC y pude hacer un programita sencillo pero funciona muy bien.
La idea del programa es medir el ancho de un pulso que viene "de la lata metálica" esta induce un campo magnético, por lo tanto, por ley de inducción de Faraday induce un voltaje que es pequeño pero si lo pasamos por disparador 74LS14 "Scmitt Trigger" creo que podemos obtener 5 y 0V que es la lógica que maneja el micro.
Bueno voy a publicar el programita no lo hice el ensamblador porque tenia que hacer muchas vueltas.
Conexiones
lcd Pic
RS d0
RW d1
RE d2
D4 d4
D5 d5
D6 d6
D7 d7
vss 0V
vdd 5v
pic entrada
B1 Genrador de señales (Onda cuadrada) ó tren de pulsos
C6 Terminal de serial
#if defined(__PCM__)
#include <16f877.h>
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7)
#define use_portd_lcd TRUE // Definir puerto de la lcd
#byte puerto_b=06
#include <lcd.c> // librería de la lcd
long desbor,de;
#int_rtcc
void desborde()
{
desbor= desbor + 1;
de = desbor;
set_timer0(0);
}
void espera_arriba()
{
while(input(PIN_B0)); // si está en alto espero a que este en nivel bajo
delay_us(3);
while(!input(PIN_B0)); // espero un alto
}
void ancho_pulso()
{
delay_us(3);
while(input(PIN_B0)); // Espero un 0 lógico
delay_us(3);
while(!input(PIN_B0)); // Espero un 1 Lógico y esta medido el pulso
}
main()
{
int tiempo,medida;
long total_t,velocidad;
lcd_init();
lcd_gotoxy(5,1);
printf(lcd_putc,"0 Km");
enable_interrupts(GLOBAL);
enable_interrupts(INT_RTCC);
setup_counters(rtcc_internal, rtcc_div_256);
do
{
espera_arriba();
desbor = 0;
de = 0;
set_timer0(0);
ancho_pulso();
tiempo = get_timer0();
total_t= (de*255) + tiempo;
velocidad = (44179/total_t);
lcd_init(); // inicializa lcd
lcd_gotoxy(5,1);
if (velocidad<3)
{
printf(lcd_putc,"0 Km");
}
else
{
printf("\r %lu Km/H", velocidad);
printf(lcd_putc,"%lu Km/H", velocidad); // pongo el valor el la lcd
}
desbor = 0;
set_timer0(0);
delay_ms(100);
} while(true);
}
Bueno muchachos en el momento estoý trabajando en desarrollo del circuito estare publicando avances y complementando el trabajo con las sugerencias que resulten en el foro.
Un Saludo desde Pereira- Colombia