Autor Tema: problemas con con un tacometro dentro de un programa en c  (Leído 4921 veces)

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

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
problemas con con un tacometro dentro de un programa en c
« en: 12 de Marzo de 2014, 21:37:31 »
Hola que tal !!! ante todo quiero saludar a todos en el foro, el cual me ha servido de tanto que nunca tube la necesidad de escribir ya que he encontrado muchas soluciones leyendo , pero bueno llegue a un punto en el que se me quemaron los papeles ja ja ...soy electrisista naval desde hace 20 años y hace muy poco que estoy programando soy autodidacta con muchas ganas de aprender y con algunos proyectos en la cabeza que quisiera plasmar , bueno vamos al grano : estoy haciendo un proyecto para censar un motor diesel  con un pic 16f877a y una lcd 4x20 en el cual estoy mostrando 3 lecturas por los conversores ad que son temperatura de agua presion de aceite , voltaje y rpm del motor el problema que tengo es que no me aparece la lectura de las rpm hasta que no simulo que se pasa de voltaje el cual hago que me avise en pantalla  y cuando esto ocurre me titilan todos los parametros en la pantalla y no se que estoy haciendo mal , espero haber sido claro y tal vez puedan ayudarme  desde ya muchas gracias   
A
Código: C
  1. [code=css]
[/code]djunto codigo
El tiempo es una ilusión ,solo existe el presente................

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #1 en: 12 de Marzo de 2014, 23:29:36 »
Yo creo que el problema esta en donde has puesto la inicializacion del timer, al estar dentro del bucle while, siempre se reinicia y nunca llega a desborda y no entra en la rutina de la interrupción.

Es lo que le veo a simple vista, no tengo forma de probar tu programa  :oops:

slds.
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #2 en: 12 de Marzo de 2014, 23:57:41 »
Gracias por responder Willynovi , vos sabes que ya probe sacarlo del while y me hace lo mismo
El tiempo es una ilusión ,solo existe el presente................

Desconectado camhost1

  • PIC12
  • **
  • Mensajes: 51
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #3 en: 13 de Marzo de 2014, 00:39:26 »
Hola amigo mira aca, es un código para calcular las rpm tal vez le puedas adaptar algunas cosas a las necesidades de tu programa, saludos..

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #4 en: 13 de Marzo de 2014, 08:01:37 »
Muchas gracias amigo lo voy a probar y despues te cuento gracias !!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado rivale

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1707
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #5 en: 13 de Marzo de 2014, 11:30:55 »
Debes sacar esta parte del código del while
Código: C
  1. setup_timer_0(rtcc_ext_h_to_l | rtcc_div_2);
  2. setup_timer_1(t1_internal | t1_div_by_8);
  3.    
  4.    set_timer0(0);
  5.    set_timer1(3036);
  6.    enable_interrupts(int_timer1);
  7.    enable_interrupts(global);

otro detalle es que evites poner impresiones dentro de una interrupción, puedes activar una bandera y hacer la impresión dentro del main


"Nada es imposible, no si puedes imaginarlo"

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #6 en: 14 de Marzo de 2014, 08:23:38 »
Hola  Rivale muchas gracias por la informacion hice lo que me dijiste y ahora si me aparecen todos los parametros desde el comienzo pero me titilan en el lcd (osea me aparcen y desaparecen ) no le encuentro cual puede  ser el error  adjunto el codigo corregido y la simulacion en proteus a ver  si quizas me puedan detectar el error desde ya muchas gracias por su voluntad

Camhost1 me paso  un link con un tacometro el cual inclui en el programa y tambien funciona bien pero cuando entra  en la sentencia if que avisa "alto voltaje " me varian las rpm . muchas gracias camhost1 por tu aporte tambien 
El tiempo es una ilusión ,solo existe el presente................

Desconectado camhost1

  • PIC12
  • **
  • Mensajes: 51
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #7 en: 14 de Marzo de 2014, 09:21:28 »
Hola, recomiendo que no deje un printlcd dentro de una interupcion, utiliza flags. Saludos

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #8 en: 14 de Marzo de 2014, 20:04:20 »
hola disculpen que no se como subir el archivo de proteus asi que le saque una foto para que vean como lo estoy simulando a ver si estoy haciendo algo mal en la simulacion .Gracias y saludos !!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #9 en: 14 de Marzo de 2014, 20:28:31 »
Hola a todos y disculpen mi ignorancia pero de a poco ire aprendiendo ,voluntad no me falta .... bueno gracias a sus ayudas por supuesto logre que me salieran todos los parametros en la pantalla y ya sin titilar ,pero tengo una duda para leer las rpm estoy ingresando por el pin Ra4 con una señal de clock de 50hz  y hasta lo que yo se y en mi trabajo sabemos es que cuando tenemos un generador a 50hz el motor diesel esta a 1500rpm ,por lo que yo esperaba que con una entrada de 50 hz por el pin antes mencionado y con la cuenta hecha en la funcion me iba a mostrar en la lcd 1500 rpm pero me esta mostrando 1200 rpm , lo curioso es que cuando me lee  el parametro  alto voltaje :
if (data<30&&data>15)    //data variable que lee voltaje
{
lcd_gotoxy(1,3);
printf(lcd_putc,"%f",data);
lcd_gotoxy(7,3);
printf(lcd_putc,"alto votaje");
delay_ms(100);
}
en este momento las rpm me suben de 1200 a 1500 . Bien la pregunta es :estoy haciendo algo mal o debo aumentar la multiplicacion para llegar a 1500 rpm y modificar la parte del programa antes mencionada .vuelvo a subir el codigo corregido
Desde ya les estoy enormemente agradecido por su voluntad de ayudar y espero algun dia ser uno mas que pueda ayudar a otros Saludos!!!   
El tiempo es una ilusión ,solo existe el presente................

Desconectado willynovi

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 546
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #10 en: 15 de Marzo de 2014, 00:10:14 »
no alcanzo a ver como es que calculas las rpm  :oops:

veo que inicias el timer con un valor, pero dentro del while() siempre lo vuelves a 0.

si el método que usas para determinar las rpm es contando los pulsos en un cierto tiempo, ese tiempo debe ser constante, quizas ahí es donde tienes el error y cuando el programa pasa por alto voltage ese tiempo es menor y te indica las 1500 rpm.

tienes dos opciones para medir las rpm, o haces contando los pulsos por cada vuelta en un tiempo fijo, o
cuentas el tiempo del pulso

en cualquiera de las dos opciones yo usaría la interrupción por timer
Intento enseñarte a pescar, si solo quieres pescados, espera que un pescador te regale los suyos.

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #11 en: 16 de Marzo de 2014, 12:45:14 »
Gracias willynovi por tu aporte y la verdad es que estoy tan verde con esto que voy  a tratar de explicar lo que creo que estoy haciendo, todo el programa lo hice yo, hasta el conversor adc lo venia entendiendo bien, pero cuando tuve que medir las rpm se me quemaron los papeles y en principio copie un codigo que me paso camhost1 y lo trate de adaptar, ahora creo que lo estoy entendiendo por eso lo volvi a modificar y ahi si me funciona

 setup_timer_0(RTCC_EXT_L_TO_H|RTCC_DIV_1);// con el timer0 cuento los pulsos osea el cambio de flanco de bajo a alto

 setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);// con el timer 1 le digo en que tiempo me cuenta los pulsos

Aca atiendo la interrupcion y voy al viod donde muestro en el lcd el valor de rpm

void  TIMER1_isr(void)
{
   //*****************rpm*********************//
      rpm=get_timer0();//lee el valor del timer0 y lo asigna a rpm
      rpm=rpm*60;     
      lcd_gotoxy(1,1);
      printf(lcd_putc,"     RPM  %lu      ",rpm);
     
      set_timer0(0); 
      set_timer1(3036);   
  }
de esta manera y sacando este codigo del while no me influye cuando vario los demas parametros asi que en principio me estaria funcionando correctamente
 como siempre les estoy muy agradecido por sus aportes son muy amables  Saludos !!!!
PD:adjunto el codigo
El tiempo es una ilusión ,solo existe el presente................

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #12 en: 17 de Marzo de 2014, 18:13:01 »
Hola a todos otra vez !!!! siguiendo con este proyecto queria si ustedes me pueden aconsejar que tipo de pantalla lcd de 4 x 20 caracteres puedo usar , ya que nunca use una y no se si hay algunas mas complicadas que otras o todas funcionan bien , no se como es el tema , al final el proyecto lo voy a hacer con un pic 16f876a que dispone de 28 pines ya que el 16f877a tiene 40 y no voy a necesitar tantos puertos , me gustaria saber tambien que opinan de este cambio , desde ya MUCHAS GRACIAS por sus consejos y opiniones SALUDOS !!!!!!
El tiempo es una ilusión ,solo existe el presente................

Desconectado AleSergi

  • PIC16
  • ***
  • Mensajes: 214
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #13 en: 18 de Marzo de 2014, 13:34:20 »
Arielmdq, la solución que has encontrado para leer velocidad angular, no es la mejor, ni la más elegante.
Con los micros que estás usando, deberías emplear el módulo CCP, en modo captura, su implementación en tu programa facilitaría las cosas, las simplifica increiblemente.

Pegale una leída a la hoja de datos del pic que empleas, allí hay una sección dedicada al asunto.
También en la AN594 se explayan sobre su uso.
Si empleas CCS, en el directorio examples, hay un ejemplo con el nombre "EX_CCPMP.C" 

No sería mala idea que busques por la red con palabras como  velocímetro + frecuencímetro + CCP + modo captura  y yerbas así.
Tambien pegale una leida a
http://www.todopic.com.ar/foros/index.php?topic=40824.msg340190#msg340190

Desconectado arielmdq

  • PIC16
  • ***
  • Mensajes: 166
Re: problemas con con un tacometro dentro de un programa en c
« Respuesta #14 en: 18 de Marzo de 2014, 19:42:06 »
Muchas gracias AleSergi por la info  :)  por que eso me amplia el panorama estaba muy encerrado con ese rpm, asi que voy a leer todo lo que me dijiste y despues te cuento. La idea es ir aprendiendo pero como lo estoy haciendo por mi cuenta a veces no se por donde seguir te agradezco mucho por tu dedicacion .Saludos !!!
El tiempo es una ilusión ,solo existe el presente................


 

anything