Autor Tema: Tacometro(Otro mas :\)  (Leído 1985 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado HieloZero

  • PIC10
  • *
  • Mensajes: 1
Tacometro(Otro mas :\)
« en: 03 de Marzo de 2013, 02:23:38 »
Hola!
Me llamo Oscar soy estudiante de Ing. Mecatronica...

En la uni me han pedido un proyecto.

-Contar RPM (tacometro)
-Distancia recorrida
-Menu LCD y un teclado...

Uso un pic 16f877a, lcd 16x2 y teclado matricial 4x4...
Lo q manda los pulsos es un par infrarrojo amm un encoder con 8 ranuras(un disco con 8 ollos xD) y su comparador con un lm358


Mi codigo.

Citar
#use delay(clock=4000000)
#fuses XT,NOWDT,NOPROTECT,NOLVP,PUT,NODEBUG,BROWNOUT,NOCPD,NOWRT
#include <lcd.c>
#include <KBD4X4.c>
#define use_portd_lcd TRUE
#define use_portb_kbd TRUE
int16 contador=0, valor=0, posi=0;
char k;

#int_timer1
void timer1_isr(void)
{
 
   setup_timer_0(rtcc_ext_h_to_l | rtcc_div_2);
   setup_timer_1(t1_internal | t1_div_by_8);
   set_timer0(0);
   set_timer1(3036);
   enable_interrupts(int_timer1);
   enable_interrupts(global);

}

void tacometro ()
{
 timer1_isr();
   contador=get_timer0();
   contador=contador*60/4;
   printf(lcd_putc, "\f %6lu RPM :D",contador);
   set_timer0(0);
   set_timer1(3035);
   
}

void odometro()
{
 timer1_isr();
   contador=get_timer0();
   valor=contador*38;
   printf(lcd_putc, "\f %6lu cm/s",valor);
   set_timer0(0);
   set_timer1(3035);
 
}

void posicion()
{
   timer1_isr();
   posi=contador;
   posi=contador*360/256;
   printf(lcd_putc, "\f %6lu cm/s",posi);
   set_timer0(0);
   set_timer1(3035);
}


void menu()
{

   lcd_putc("1)Taco 2)Odo\n");
   lcd_putc("3)Posi");
}

void main()
{
   lcd_init();
   kbd_init();
   lcd_putc(" Biemvenido\n");        // Saca texto
   lcd_putc("     :D");              // Saca texto
   delay_ms(200);                // Retardo
   lcd_putc("\f");
   lcd_putc("Menu");
   delay_ms(200);
   lcd_putc("\f");
   menu();

       
 while(TRUE)    {
   k=kbd_getc();

   switch (k)
   {
   case '1':
   tacometro();
   while(true)
    {
   k=kbd_getc();
   if (k=='4'){
   break;
   }
   }
   menu();
   break;

    case '2':
   odometro();
   while(true)
    {
   k=kbd_getc();
   if (k=='4'){
   break;
   }
   }
   lcd_putc("\f");
   menu();
    break;
   
  case '3':
   posicion();
   while(true)
    {
   k=kbd_getc();
   if (k=='4'){
   break;
   }
   }
   lcd_putc("\f");
   menu();
    break;
   }
  }
}
 

Mi intencion es q cuente cada .5 segundos cuantos pulsos hay y haga la operacion dada...
PERO!
No entiendo muy bn eso de los timers :/ uso un prescaler de 16...
Si pudieran orientarme un poco, se q sobra informacion de timers, pero aun no logro coparlo bn todo...
De antemano Gracias :)