Haz una pregunta
  Foros de Electrónica » Temas de Interés » Dudas en general
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

10/11/2013 #1


Problemas con la LCD, velocimetro?
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;
}
} ...
11/11/2013 #2

Avatar de JCAK

Y cuál es el problema que tienes ??? Sería interesante que nos cuentes esto para poder orientarte. Saludos
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Dudas en general

Aquí se tratan todos los temas relacionados con la electrónica en general.

Cerrar
Foros de Electrónica » Temas de Interés » Dudas en general

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.