/****************************************************************
 *  Name    : TacDigC.c                                         *
 *  Author  : David Founes                                      *
 *  Notice  : Copyright (c) 2010 [select VIEW...EDITOR OPTIONS] *
  *          : All Rights Reserved                               *
 *  Date    : 15/08/2010                                        *
 *  Version : 3.0                                               *
 *  Notes   : Codigo fuente que lee el numero de pulsos         *
 *          : por el pin RA4 el cual representa el numero       *
 *          : de revoluciones por segundo, haciendo una conver- *
 *          : sion se presenta las RPM por un LCD de 16x2.      *
 *          : Las entradas A0 y A1 nos muestran el sentido del  *
 *          : motor.                                            *
 ****************************************************************/

   
      #include <16f628.h>
   
       
  
      #fuses XT,NOWDT,NOPROTECT,NOLVP
  
       
 
      #use delay (clock=4000000)
  
       
  
      #include <lcd.c>
  
      #use standard_io(a)
  
       
 
        INT counter=0;

       
  
      float rpm;
  
 
      #INT_timer1
  
       
  
      void timer1_isr(VOID)
 
      {
  
        //set_tris_A(11111111);
  
       
  
        counter = get_timer0 () ;
  
       
  
        IF (input (PIN_A2)) /* para motores de 8 cilindros*/
  
        {
  
           rpm = counter * 4;  /*rpm = counter * 2.0 * 120; */
  
        }
  
       
  
       
  
       
  
        IF (input (PIN_A3)) /* para motores de 6 cilindros*/
  
        {
  
           rpm = counter * 3;  /*rpm = counter * 2.0 * 120; */
  
        }
  
       
  
       
  
       
  
        IF (input (PIN_A4)) /*para motores de 4 cilindros*/
  
        {
  
           rpm = counter * 2; /*rpm=counter * 2.0 * 120; */
  
        }
  
       
  
       
  
        lcd_putc ("\f RPM\n");
  
        lcd_gotoxy (5, 2);
  
       
  
        IF (input (PIN_A0) )
  
           printf (lcd_putc, "izq %5.0f", rpm);
  
       
  
        IF (input (PIN_A1) )
  
           printf (lcd_putc, "der %5.0f", rpm);
  
       
  
        IF ( ! input (PIN_A0)& ! input (PIN_A1) )
  
          printf (lcd_putc, "\fCONECTAR ENTRADA\n DE GIRO");
  
       
  
        delay_ms (250) ;
  
        set_timer0 (0) ;
  
        set_timer1 (3036) ;
  
      }
  
       
  
      void inicio(VOID)
  
      {
  
        INT i, j;
  
        lcd_putc ("\f Tacometro\n Pirata");
  
        delay_ms (3000) ;
  
        lcd_putc ("\f Laboratorio");
  
        lcd_gotoxy (1, 2) ;
  
        lcd_putc (" Electronica A");
  
        delay_ms (1500); lcd_putc ("\f") ;
  
        FOR (j = 0; j < 4; j++)
  
        {
  
           lcd_gotoxy (5, 1) ;
  
           lcd_putc ("CARGANDO") ;
  
           FOR (i = 5; i < 13; i++)
  
           {
  
              lcd_gotoxy (i, 2) ;
  
              lcd_putc (" - "); delay_ms (75) ;
  
           }
  
       
  
           lcd_putc ("\f") ;
  
        }
  
       
  
       lcd_putc ("\f") ;
  
      }
  
       
  
      void main(VOID)
  
      {
  
        setup_timer_0(rtcc_ext_l_to_h|rtcc_div_2);
  
        setup_timer_1(t1_internal|t1_div_by_8);
  
        setup_ccp1(CCP_OFF);
  
        setup_comparator(NC_NC_NC_NC);  
  
        enable_interrupts(INT_timer1);
  
        enable_interrupts(global);
  
        set_timer0(0);
  
        set_timer1(3036);
  
       
  
        lcd_init();
  
        inicio();
  
       
  
        WHILE(true);
  
      }
