Tacometro digital

Amigo muchas gracias si comprendi lo que me explicaste pero la ultima el archivo compilado en hexadecimal es el que hay que quemarle al pic cierto? Sera que hay algun programa que me deje ver el codigo fuente para cambiar texto?
 
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
 
muchas gracias depronto les sirve este aporte encontre un circuito para hacer el tacometro a leds tiene video en youtube y todo el porblema es que lo dibujo pero creo que no lo hago bien ya que el porteus se tilda. este es el diagrama y alguien lo pude dibujar bien y montarlo se los agradeceria la verdad la duda es mas que todo con los potenciometros
 

Adjuntos

  • Esquema Conexiones2.jpg
    Esquema Conexiones2.jpg
    84.4 KB · Visitas: 500
Hola, estaba viendo la problematica y aqui les traigo un tacometro con PIC, se trata de un optoacoplador que cuenta las veces que la luz es interrumpida de acuerdo a eso calcula las RPM y el motor es activado con un switch(vease diagrama adjunto), espero y sea de ayuda.



Saludos


Hola me gusto la sencillez de tu tacometro, y el hecho de que sea LCD.


Con respecto al rango de RPM que puede medir.... yo necesitaría desde unas 20 RPM hasta 3000 ( si hay mas no importa pero ese es el rango que necesito) este tacometro lee esas RPM¿? ¿o comienza a medir desde mas arriba?
 
Desde mas arriba desde 60 RPM, pero bueno vamos a darle una solucion.

Saludos

No quiero ser una molestia ya que no se de programación, no paso mas que de grabar un chip ya que recién empiezo con el mundo de los Microcontroladores, y como mi padre quería comprar un tacometro para el torno, busqué uno con PIC para que resulte lo mas compacto posible.

De tu código solo puedo deducir que la operación que realiza el pic para dar las RPM proviene de
[rpm=60*pulses] pero asta ahí nomas.

muchas gracias.
 
Que buena onda, mi padre tambien es tornero, por cierto ya encontre la manera de ampliar el rango, el unico incoveniente es que para medir RPM menores a 20 tarda mas en actualizar el resultado, en este caso tarda 8 segundos, el valor minimo es de 15 rpm, en el caso anterior por ejemplo tardaba menos en actualizar por que solo tomaba muestras en un segundo es por eso que se dificultaba medir RPM menores a 60, es este ultimo toma muestras en 8 segundos, no es ninguna molestia, para eso estamos, por cierto el PIC para este caso es el 16F877, espero y sea de ayuda.


Saludos
 

Adjuntos

  • tacometro.rar
    1.6 KB · Visitas: 968
Que buena onda, mi padre tambien es tornero, por cierto ya encontre la manera de ampliar el rango, el unico incoveniente es que para medir RPM menores a 20 tarda mas en actualizar el resultado, en este caso tarda 8 segundos, el valor minimo es de 15 rpm, en el caso anterior por ejemplo tardaba menos en actualizar por que solo tomaba muestras en un segundo es por eso que se dificultaba medir RPM menores a 60, es este ultimo toma muestras en 8 segundos, no es ninguna molestia, para eso estamos, por cierto el PIC para este caso es el 16F877, espero y sea de ayuda.


Saludos


No hay problema hoy me fijé bien y el torno en su cambio mas lento y en retardo alcanza 35 RPM.

Muchas gracias por el archivo...

Pronto voy a estar con noticias
 
amigos hola me llamo erwin soy de las grutas !!1
mi recomendacion es el integrado ua170..no les puedo postear el circuito pero solo con los datos de este mismo lo veran !!!!
;)como jovista lo recomiendo ;)
 
Hola amigo, seria de mucha ayuda postear el datasheet del circuito integrado ua170, ya que anduve buscando y googleando y no encontre datos al respecto, lo mas cercano es un IC UAA170 y que es obsoleto.


Saludos
 
Muy buena la simulacion que enviaste Rijiru si puedes mandar el codigo fuente en c o ensambler estaria mucho mejor, porque tambien estoy en la construccion de un tacometro digital y el pic que me sugirieon es el que estas utilizando en la simulacio gracias de antemano
 
Buen dia, en esta ocacion se proporciona el codigo en lenguaje C, estoy tratando de hacer compatible la libreria que se encuentra en este compilador para cualquier PIC cuyos puertos sean de 8 bits, ya que la libreria lcd.c es solo compatible para el 16F877


Saludos


#include <16F877.h>
#fuses XT, NOWDT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NOWRT, NODEBUG
#use delay(clock=4000000)
#use fast_io(a)
#include <lcd.c>
int time0, time1;
int16 pulses0, pulses, rpm, time;
int1 rpmbit, bitini;
void rpm_get()
{
rpm=7.5*pulses;
if(pulses0!=pulses)
{
printf(lcd_putc,"\fRpm \n%Lu", rpm);
delay_ms(1500);
}
pulses=0;
time1=0;
}
main()
{
set_tris_a(0xFF);
rpm=0;
time=0;
time0=0;
time1=time0;
pulses=0;
pulses0=pulses;
rpmbit=1;
bitini=0;
lcd_init();
lcd_putc("\fInicializando\n");
delay_ms(1500);
lcd_putc("\fMidiendo RPM");

do
{
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>=32)
{
time0=0;
rpm_get();
pulses0=pulses;
}
}
delay_ms(1);
}
while(1);
}
 
Muy buena gracias no imagine que respondieras tan pronto, una cuestion mas su programacion no tiene nada que ver con las particiones que tiene el encoder si estoy en un error te agradezco que lo explicaras,
En el esquematico va desde el receptor??
 
Tal vez te estes preguntando si se necesite uno, en realidad si ves el diagrama en la pag 1 de este tema te daras cuenta que el circuito consta de un optoacoplador, dos compuertas NOT, un LCD 16x2 y PIC, para que aparezcan los caracteres en el LCD el PIC se encarga de generar los codigos que correspondientes para que el LCD los interprete, espero y eso responda a tu duda.



Saludos
 
Bueno en realidad queria saber si habia algun elemento que pudiese poner al encoder y que me diera los pulsos y eliminar el emisor y receptor, en todo caso muy bbuena respuesta.
Encontre algo muy bueno seria bueno que le eches un ojito y me cuentas, se trata de usar un sensor QRE00034, muy bueno.

me olvide el link aki esta:
http://www.ermicro.com/blog/?p=1461

en realidad asi quisiera que quedara mi proyecto
 
Última edición:
Estaba viendo el sensor del proyecto del link que pusiste en el post, no cambia mucho el diagrama, comparando, sustituyes el optoacoplador por el sensor QRE00034 tal como dices, solo que tendrias que poner un reforzador de pulso a la saluda de este para cuidar que los niveles logico se mantengan ahi mismo en la paguina en la seccion "the RPM sensor" viene como armarlo, de hecho es mucho mejor usar ese sensor que el optoacoplador que propongo. En fin, solo lo sustituyes y no habria problema.
 
hola amigo Rijiru como se podria modificar este tacometro para uso en un camion antiguo diesel ,en este caso la salida de señal cuadrada se toma del alternador W (12v amplitud de voltaje) ,por ejemplo en modo ralenti sin acelerar en minimo la frecuencia de salida es 180Hz y esto equivale en el tacometro analogico a 500 rpm, 360hz=1000rpm, 540HZ=1500rpm, 720hz=2000rpm, 900hz=2500rpm, y 1080 hz=3000rpm que es lo maximo que gira un motor diesel de camion grande (24v) :cool:
 
Y si se usa un pic u otro micorocontrolador, ¿no sería mas sencillo usar la frecuencia sin mas?
Se le aplica a una entrada de comparación captura y se sabe la frecuencia directamente
 
Atrás
Arriba