Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: arielmdq en 12 de Marzo de 2014, 21:37:31
Título: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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
[code=css]
[/code]djunto codigo
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: willynovi 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.
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: camhost1 en 13 de Marzo de 2014, 00:39:26
Hola amigo mira aca (http://codigoccs.blogspot.com/2014/01/codigo-de-para-rpm-en-ccs-compiler.html), es un código para calcular las rpm tal vez le puedas adaptar algunas cosas a las necesidades de tu programa, saludos..
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq en 13 de Marzo de 2014, 08:01:37
Muchas gracias amigo lo voy a probar y despues te cuento gracias !!!!
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: rivale en 13 de Marzo de 2014, 11:30:55
Debes sacar esta parte del código del while
Código: C
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);
otro detalle es que evites poner impresiones dentro de una interrupción, puedes activar una bandera y hacer la impresión dentro del main
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: camhost1 en 14 de Marzo de 2014, 09:21:28
Hola, recomiendo que no deje un printlcd dentro de una interupcion, utiliza flags. Saludos
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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 !!!
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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!!!
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: willynovi 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
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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 !!!!!!
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: AleSergi 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
Título: Re: problemas con con un tacometro dentro de un programa en c
Publicado por: arielmdq 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 !!!