Problemas con la LCD, velocimetro?

#1
Buenas he estado haciendo un proyecto escolar, el cual debe calcular la velocidad media de un objeto, utilizando un sensor, consiste en tomar dos mediciones de distancia y tiempo para obtener la velocidad.
Tengo algunos problemas con la LCD, por favor si alguien le puede echar un ojo para ver si en algo estoy fallando o si quieren complementarlo se los agradeceria mucho.
Saludos.



Código:
//_________________________________________________________________________________ //
// programa que permite medir la velocidad media de un objeto utilizando un sensor  //
// por ultrasonido, el cual lo que hace es tomar dos mediciones de distancia y      //
// tiempo para calcular la velocidad media a la cual el objeto se esta moviendo     //
// y mostramos los datos en una LCD...                                              //
//                                                                                  //
// se utilizo un PIC 16F877A ya que es el que se tenia disponible y una lcd de 16*2 //
                                                                                //



#include <16F877A.h>

#use delay(clock=4000000)

#fuses NOCPD,NOWDT,BROWNOUT,PUT,XT,NOWRT,NOLVP,NODEBUG,NOPROTECT //0x3F71

#define use_portb_lcd TRUE //selecciono puerto b para el LCD

#include <lcd.c>

#define sw1 PIN_D0  //definimos el PIN_D0 para el activador

#define sensor PIN_D1 //definicmos el PIN_D1 para el sensor ultrasonido

float tiempo1, tiempo2, distancia1, distancia2, velocidadmedia; // variables a utilizar

void main(){

lcd_init(); //inicializa la LCD

port_b_pullups(true); //activanmos pull ups

enable_interrupts(global); //activamos las interrupciones

setup_timer_1(T1_INTERNAL | T1_DIV_BY_1); //prescaler 1:1 cada incremento= 1ms

delay_ms(1000);

//__________________________Inicio del programa principal____________________//

inicio:

set_tris_d(0x1); //configuramos el trisd

output_low(sensor); //garantizamos un nivel bajo en el sensor

delay_ms(100);

if (input(sw1)){ //si pulsador activo entonces medimos velocidad

   lcd_putc("\\fencendido\\n");

   delay_ms(1000);
   
//_____________________________primera Medicion________________________________//

   output_low(sensor);  // nivel bajo en sensor

   delay_ms(10); //retardo mietras se prepara

   output_high(sensor); // activamos el sensor 

   delay_ms(10); // retardo mientras se envia el pulso de ultrasonido

   set_tris_d(0xff); //cambiamos el trisd ahora como entrada

   for ( ; !input(sensor); );            // Espero el inicio del pulso del eco (flanco de subida)

   set_timer1(0);                                 // Cuando llegue pon a cero el Timer1

   for ( ; input(sensor); );              // Espero al final del pulso del eco (flanco de bajada)

   tiempo1 = get_timer1(); // capturo el primer intervalo de tiempo

   distancia1= tiempo1/58; //calculo la distancia1 del objeto

   delay_ms(1000); // retardo opcional solo para ver la variacion de distancia


//_____________________________segunda medicion________________________________//

   set_tris_d(0x1); // se reconfigura nuevamente el trisd

   output_low(sensor); // se garantiza un nivel bajo

   delay_ms(10); // retardo mientras se prepara

   output_high(sensor); // se activa el sensor

   delay_ms(10); // retardo mientras se envia el pulso

   set_tris_d(0xff); // ahora configuramos en pin como entrada

   for ( ; !input(sensor); );            // Espero el inicio del pulso del eco (flanco de subida)

   set_timer1(0);                                 // Cuando llegue pon a cero el Timer1

   for ( ; input(sensor); );              // Espero al final del pulso del eco (flanco de bajada)

   tiempo2 = get_timer1(); // capturo el primer intervalo de tiempo

   distancia2= tiempo2/58; //calculo la distancia2 del objeto

   delay_ms(50);

//______________________________________________________________________________//

// ahora con las variaciones de distancia y tiempo se calcula la velocidad media//

//________ velocidadmedia= (distancia2-distancia1)/(tiempo2-tiempo1) ___________//

//______________________________________________________________________________//

tiempo1=tiempo1/1000000; //llevamos tiempo1 a segundos

tiempo2=tiempo2/1000000 ;//llevamos tiempo2 a segundos

distancia1= distancia1/100 ;//llevamos distancia1 a metros

distancia2=distancia2/100  ;//llevamos distancia2 a metros

velocidadmedia=(distancia2-distancia1)/(tiempo2-tiempo1);//unidades metros/segundos

//__________________mostramos los datos en la LCD________________________________//


lcd_gotoxy(1,1);

printf(lcd_putc," %f m",distancia1);

lcd_gotoxy(1,2);

printf(lcd_putc," %f m",distancia2);

delay_ms(5000);

lcd_gotoxy(1,1);

printf(lcd_putc," %f seg",tiempo1);

lcd_gotoxy(1,2);

printf(lcd_putc," %f seg",tiempo2);

delay_ms(5000);

lcd_gotoxy(1,1);

lcd_putc("\\fVelocidad Media\\n");

lcd_gotoxy(1,2);

printf(lcd_putc," %f m/seg",velocidadmedia);

delay_ms(5000);

  goto inicio; // nos devolvemos al inicio

//_____________________________________________________________________________//

}
else { // si el pulsador es cero

set_tris_d(0x1); // garantizamos que el pin este como salida del sensor

output_low(sensor); // dejamos un nivel bajo por seguridad

lcd_putc("\\fapagado\\n"); // mostramos mensaje en la LCD

delay_us(10); // delay

goto inicio;
}
} ...
 
Última edición por un moderador:
#2
Y cuál es el problema que tienes ??? Sería interesante que nos cuentes esto para poder orientarte. Saludos
 

Temas similares

Arriba