Tacometro digital

Bueno, te dejo el programa en lenguaje C, este si lo puedes alterar

Código:
#include <16f628A.h>
#fuses INTRC, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOLVP, NOCPD, NOPROTECT
#use delay(clock=4000000)
#include <lcd_b.c>
int time0, time1;
int16 pulses0, pulses, rpm, time;
int1 rpmbit;
void rpm_get()
{
 rpm=60*pulses;
 if(pulses0!=pulses)
 {
 printf(lcd_putc,"\fRpm \n%Lu", rpm);
 delay_ms(1500);
 }
 pulses=0;
 time1=0;
}
void main()
{
 set_tris_a(0x1F);
 rpm=0;
 time=0;
 time0=0;
 time1=time0;
 pulses=0;
 pulses0=pulses;
 rpmbit=1;
 lcd_init();
 lcd_putc("\fBienvenido\n");
 output_low(PIN_A7);
 do
 {
  diagnostico();
  if(input(PIN_A1))
  {
   if((input(PIN_A0))&&(rpmbit==1))
   {
    pulses++;
    rpmbit=0;
   }
   if((!input(PIN_A0))&&(rpmbit==0))
   {
   rpmbit=1;
   }
   time0++;
   if(time0>=250)
   {
    time1++;
    time0=0;
    if(time1>=4)
    {
     time0=0;
     if(pulses<1)
     {
      lcd_putc("\frpm < 60\nO sin giro");
      delay_ms(500);
     }
     else
     {
      rpm_get();
      pulses0=pulses;
     }
    }
   }
  }
  if(input(PIN_A2))
  {
   output_toggle(PIN_A7);
   if(!input(PIN_A1))
   {
    lcd_putc("\fMotor Apagado");
   }
   delay_ms(500);
  }
  delay_ms(1);
 }
 while(1);
}

solo que el PIN_A2 lo dejas a "1" originalmente se diseño para activar un motor y medir sus RPM's




Saludos



hola amigo vi tu programacion y al copiarla a el programa c y compilar detecta un error con el lcd quisiera saber si tienes una libreria para el programador c porque cuando modifico el archivo en proteus a lcd .c y compilo el programa con el isis el display no muestra simulacion... gracias



Bueno, te dejo el programa en lenguaje C, este si lo puedes alterar

Código:
#include <16f628A.h>
#fuses INTRC, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOLVP, NOCPD, NOPROTECT
#use delay(clock=4000000)
#include <lcd_b.c>
int time0, time1;
int16 pulses0, pulses, rpm, time;
int1 rpmbit;
void rpm_get()
{
 rpm=60*pulses;
 if(pulses0!=pulses)
 {
 printf(lcd_putc,"\fRpm \n%Lu", rpm);
 delay_ms(1500);
 }
 pulses=0;
 time1=0;
}
void main()
{
 set_tris_a(0x1F);
 rpm=0;
 time=0;
 time0=0;
 time1=time0;
 pulses=0;
 pulses0=pulses;
 rpmbit=1;
 lcd_init();
 lcd_putc("\fBienvenido\n");
 output_low(PIN_A7);
 do
 {
  diagnostico();
  if(input(PIN_A1))
  {
   if((input(PIN_A0))&&(rpmbit==1))
   {
    pulses++;
    rpmbit=0;
   }
   if((!input(PIN_A0))&&(rpmbit==0))
   {
   rpmbit=1;
   }
   time0++;
   if(time0>=250)
   {
    time1++;
    time0=0;
    if(time1>=4)
    {
     time0=0;
     if(pulses<1)
     {
      lcd_putc("\frpm < 60\nO sin giro");
      delay_ms(500);
     }
     else
     {
      rpm_get();
      pulses0=pulses;
     }
    }
   }
  }
  if(input(PIN_A2))
  {
   output_toggle(PIN_A7);
   if(!input(PIN_A1))
   {
    lcd_putc("\fMotor Apagado");
   }
   delay_ms(500);
  }
  delay_ms(1);
 }
 while(1);
}

solo que el PIN_A2 lo dejas a "1" originalmente se diseño para activar un motor y medir sus RPM's




Saludos

hola amigo quisiera saber porque cuando compilo el programa en C sale un erro con el lcd
y no se deja compilar, bien luego lo modifico a lcd. c y esta bien el programa ya no detecta error ahi sino en la variable diagnostico y dice que no esta definida, la otra es que soluciono el eeror dejando la variable diagnostico con // pero el simulador proteus no me deja ver nada en el display. sera algun problema de librerias quisiera sabe si tienes una por ahi para que me la prestes
 
Última edición:
Hola soy nobato y quisiera hacer el tacometro propuesto por RIJIRU, seria posible que me pasaran todos los archivos fuentes para poner a andar el tacometro y al mismo tiempo intentar entender el codigo?. Gracias..
 
Bueno, te dejo el programa en lenguaje C, este si lo puedes alterar

Código:
#include <16f628A.h>
#fuses INTRC, NOWDT, NOPUT, NOMCLR, NOBROWNOUT, NOLVP, NOCPD, NOPROTECT
#use delay(clock=4000000)
#include <lcd_b.c>
int time0, time1;
int16 pulses0, pulses, rpm, time;
int1 rpmbit;
void rpm_get()
{
 rpm=60*pulses;
 if(pulses0!=pulses)
 {
 printf(lcd_putc,"\fRpm \n%Lu", rpm);
 delay_ms(1500);
 }
 pulses=0;
 time1=0;
}
void main()
{
 set_tris_a(0x1F);
 rpm=0;
 time=0;
 time0=0;
 time1=time0;
 pulses=0;
 pulses0=pulses;
 rpmbit=1;
 lcd_init();
 lcd_putc("\fBienvenido\n");
 output_low(PIN_A7);
 do
 {
  diagnostico();
  if(input(PIN_A1))
  {
   if((input(PIN_A0))&&(rpmbit==1))
   {
    pulses++;
    rpmbit=0;
   }
   if((!input(PIN_A0))&&(rpmbit==0))
   {
   rpmbit=1;
   }
   time0++;
   if(time0>=250)
   {
    time1++;
    time0=0;
    if(time1>=4)
    {
     time0=0;
     if(pulses<1)
     {
      lcd_putc("\frpm < 60\nO sin giro");
      delay_ms(500);
     }
     else
     {
      rpm_get();
      pulses0=pulses;
     }
    }
   }
  }
  if(input(PIN_A2))
  {
   output_toggle(PIN_A7);
   if(!input(PIN_A1))
   {
    lcd_putc("\fMotor Apagado");
   }
   delay_ms(500);
  }
  delay_ms(1);
 }
 while(1);
}

solo que el PIN_A2 lo dejas a "1" originalmente se diseño para activar un motor y medir sus RPM's




Saludos
quisiera saber a que te refieres con <lcd_b.c> ya que mi programa no compila y saca error toca solo dejarlo en lcd.c pero en proteus no simula gracias..
 
Hola amigo rijiru.:apreton:
Ahora lo que necesito es pasar este tacometro a velocimetro en metros por minuto.
Tengo estos datos.

velocidad maxima 200rpm.
tiempo en segundos :0,005
pulsos por vuelta del motor :1
diametro del disco acoplado al motor: 32cm.
radi: 5.09

Medir velocidad lineal o tangencial.

VL= 2*3.1416*5.09
-------------------------= 6396.2976 cm/min
0.005

pasando a metros:
6396.2976
-------------=63.93 m/min
100

Que opinas (y)?
 
Hola; yo necesitaria hacer un tacometro pero con micro de motorola, con el freescale. Utilizando un motor paso a paso el cual tiene una ruedita del mouse (dentada) la cual tiene entre medio un fotosensor, teengo q medir las RPM, y no se bien como programar el MC908Qb4, el mismo programa en C que hay posteado funcionara?
 
Que onda camaradas, les traigo este proyecto para que lo revisen y a ver si a alguien le sirve para la escuela o para pasar el rato. Usa el pic 18f4550, un teclado matricial 4x4, timer 0 y 1 internos del pic, y para hacer la medición un led emisor y un fototransistor y un oscilador xtral externo de 4MHz. Para la compilación se usa el PIC C,la librería "kbd_lib.c" la pueden quitar y poner la que viene de stock en el PIC C "kbd.c".
Cualquier duda o pregunta andaré por aquí, suerte!.
 

Adjuntos

hey gallodraft no tendras el diagrama en proteus esq lo q pasa q no encuentro el fototransistor y no se si me falte alguna libreria o el proteus q tengo es antigua espero tu respuesta...urge...
 
Hola manuelguillen, mira utilice lo que compartio Rijiru en la primera pagina, yo grabe en el pic el .Hex que viene en la carpeta, pero también esta en lenguaje C para modificar el programa. El Pic que utilice es el 16f628A tiene 18 pines. Y un integrado 74HC14 compuerta NOT para evitar los rebotes tiene 14 pines. El único cambio que hice, fue cambiar el optoacoplador, por fototransistor infrarrojo y un fotodiodo emisor infrarrojo. Que cumplen la misma función que el optoacoplador. Adjunto el archivo que compartio Rijiru, con una modificacion de alimentacion en el LCD 16X2 del proteus.


oye amigo abri el archivo en C estoy utlizando PIC C Compiler en la version y me marca un error pone una ventana y luego dice file not found y no se porq soy nuevo en esto espero pronto tu respuesta...



Que onda camaradas, les traigo este proyecto para que lo revisen y a ver si a alguien le sirve para la escuela o para pasar el rato. Usa el pic 18f4550, un teclado matricial 4x4, timer 0 y 1 internos del pic, y para hacer la medición un led emisor y un fototransistor y un oscilador xtral externo de 4MHz. Para la compilación se usa el PIC C,la librería "kbd_lib.c" la pueden quitar y poner la que viene de stock en el PIC C "kbd.c".
Cualquier duda o pregunta andaré por aquí, suerte!.
hola amigo oye quize compilar el archivo q viene en diagrama en c pero me marca un error kbd_init(); me dice q undefined identifier...espero tu respuesta...
 

Adjuntos

Última edición:
hey gallodraft no tendras el diagrama en proteus esq lo q pasa q no encuentro el fototransistor y no se si me falte alguna libreria o el proteus q tengo es antigua espero tu respuesta...urge...
Que tal, no lo tengo en proteus, y recuerdo que al simularlo( en la computadora de otra compañero) usamos un push button para hacer el trabajo del fototransistor, o sea manualmente mandabamos pulsos de señal al pic, lo puedes hacer también con un generador de funciones, metiendole una señal a una determinada frecuencia y simularlo, no es complicado, pero para mi se me hizo más fácil usando el push.



oye amigo abri el archivo en C estoy utlizando PIC C Compiler en la version y me marca un error pone una ventana y luego dice file not found y no se porq soy nuevo en esto espero pronto tu respuesta...





hola amigo oye quize compilar el archivo q viene en diagrama en c pero me marca un error kbd_init(); me dice q undefined identifier...espero tu respuesta...
Que tal, si ya lo quise correr y también me sale eso,algo raro porque si lo hago con la librería kbd_lib.c me compila sin problema, intenta con ese código del teclado y compilalo, a ver que changos hace, debería funcionarte sin problema, me avisas si te funcionó.
 

Adjuntos

Última edición:
Que tal, no lo tengo en proteus, y recuerdo que al simularlo( en la computadora de otra compañero) usamos un push button para hacer el trabajo del fototransistor, o sea manualmente mandabamos pulsos de señal al pic, lo puedes hacer también con un generador de funciones, metiendole una señal a una determinada frecuencia y simularlo, no es complicado, pero para mi se me hizo más fácil usando el push.





Que tal, si ya lo quise correr y también me sale eso,algo raro porque si lo hago con la librería kbd_lib.c me compila sin problema, intenta con ese código del teclado y compilalo, a ver que changos hace, debería funcionarte sin problema, me avisas si te funcionó.


hola amigos oye me paso algo si me compila pero nose q tan malo es que me aparescan esto lo q te muestro en la imagen te paso todo el programa completo y quisiera saber si tengo errores...gracias...

Código:
#include <18f4550.h>
#fuses XT, NOWDT, NOPROTECT, NOLVP
#use delay (clock=4000000)
#include <kbd_lib.c>
#include <lcd.c>
#use standard_io(A)
int16 counter=0;

#int_timer1
void timer1_isr(void)
{
counter=get_timer0();   //lectura contador TMR0
counter=counter*60; //conversion a rpm
   lcd_gotoxy(1,1);
   printf(lcd_putc,"%6ld rpm",counter);
   lcd_gotoxy(1,2);
   printf(lcd_putc,"rpm");
   set_timer0(0);
   set_timer1(3036);
}
void main()
{
   char k, kant='0';          //k valor tecla, kant valor anterior
   char PWMH=0, PWML=0;       //semiperiodo alto y bajo
   lcd_init();
   kbd_init();
   port_b_pullups(true);
   
   setup_timer_0(rtcc_ext_l_to_h|rtcc_div_1);
   setup_timer_1(t1_internal|t1_div_by_4);
   set_timer0(0);
   set_timer1(3036);
   enable_interrupts(int_timer1);
   enable_interrupts(global);
   
   while(1)
   {
      k=kbd_getc();   //se lee la tecla pulsada en ascii
      if (k=='\0')   //si no se pulsa una tecla se queda el valor anterior
         k=kant;
      
      if ((k=='*') || (k=='#'))            //si se pulsa * o # se asigna cero
         k='0';
         
      kant=k;         //se guarda tecla pulsada
      k=k-48;         //de ascii a valor numérico
      PWMH=k*28;        //valor tecla y periodo alto
      PWML=255-PWMH;      //Semiperiodo bajo
      
      for (PWMH;PWMH>0;PWMH--)   //Obtiene salida nivel alto
      {
         output_high (pin_A0);
      }
      
      for (PWML;PWML>0;PWML--)   //obtiene salida nivel bajo
      {
         output_low (pin_A0);
      }
      
   }
}
 

Adjuntos

Última edición por un moderador:
son advertencias que saca el compilador,pero programa el pic
que esto no afecta.
Al trabajar con interrupciones, y esta ser llamada, se desasctiva para impedir reentradas erroneas
en una solo interrupcion.
Si esto no fuera asi, el micro quedaria en un bucle infinito, y no podra salir de ahí
 
Solo una pregunta mas, El PIN 3 lo tienes conectado a un diodo Zener o a un arreglo RC?
hola Rijiru quisiera saber si el programa q tienes para el tacometro con pic16f628A podria servir para pic 18f4550 y no sabria q tanto cambira el diagrama y el programa tendria q ser otro??? la verdad soy muy novato en esto de los pic apenas ando aprendiendo....espero tu respuesta gracias...
 
hola amigo vi tu programacion y al copiarla a el programa c y compilar detecta un error con el lcd quisiera saber si tienes una libreria para el programador c porque cuando modifico el archivo en proteus a lcd .c y compilo el programa con el isis el display no muestra simulacion... gracias






hola amigo quisiera saber porque cuando compilo el programa en C sale un erro con el lcd
y no se deja compilar, bien luego lo modifico a lcd. c y esta bien el programa ya no detecta error ahi sino en la variable diagnostico y dice que no esta definida, la otra es que soluciono el eeror dejando la variable diagnostico con // pero el simulador proteus no me deja ver nada en el display. sera algun problema de librerias quisiera sabe si tienes una por ahi para que me la prestes



hola amigo a mi me pasa lo mismo al compilar el lenguaje q pones aqui espero y puedas postear el archivo en C o que puedas ayudarnos con el tema... gracias espero tu respuesta...saludos
 
quisiera saber a que te refieres con <lcd_b.c> ya que mi programa no compila y saca error toca solo dejarlo en lcd.c pero en proteus no simula gracias..


q tal amigo soy novato en esto tengo una pregunta porq no usas un crystal de conexion para el PIC, ps me han dicho q tods los pic llevan crystal oscilador... espero tu respueta gracias...
 
Hola Rijiru, estoy ,modificando tu tacometro digital con el objetivo de omitir el boton de inicio, ya que solamente lo estoy ocupando como sensor, para un trabajo en el instituto, por lo tanto seria ideal si pudieras compartir la libreria o biblioteca del lcd_b.c estare al espera de tu respuesta y nuevamente gracias por el aporte.
 
hola buenas
trate de armar el taco metro propuesto por Dj BaLa o bueno el diagrama publicado en la primera parte pero tengo un pequeño problema con respecto a la instalación del opto acoplador hacia el lcd y por otro lado en la ultima prueba que realice el pic 16f628 no responde pero sinenvargo al momento de escribir y borrar el código mediante el pic kit 2 no detecta ninguna falla quisa alguien me pueda ayudar
gracias
 
Hola gente como va? Tenemos que armar con un grupo de estudiantes un taco-metro digital para una Moto (cualquiera). seria display, regulador de RPM, tiras de led indicadoras, los que hemos armado son basados en auto y se nos esta haciendo muy complejo pasarlo a una moto y la presentación es en 2 meses.
también le vamos a adjuntar un dispositivo de señal que en determinadas zonas el tablero marque la velocidad con la que el motociclista que (debería andar) ; si alguien tiene archivos o ya lo hizo o quiere dar una mano de lo que sea seria de excelente ayuda...
Aclaro que el dispositivo de señales ya lo tenemos.
Si alguien tiene el paso a paso de verdad me darían tremenda mano abrazo desde el Cerro de Montevideo República Oriental del Uruguay Esteban Roselli. ...
 
Arriba