TODOPIC
Microcontroladores PIC => - Niple - => Mensaje iniciado por: xenam en 02 de Diciembre de 2020, 04:30:24
-
Hola,
Siguiendo con el programa que tengo entre manos, tengo el siguiente programa.
El programa funciona activando una salida(un tiempo definido por el usuario) cada vez que recibe una señal exterior(PIN,ent_1_det_eslabon) que recibimos como entrada en el PIC dentro de un valor de tiempo ajustado por el usuario.
Una vez que expire ese tiempo entra en modo pausa durante otro tiempo ajustado, la señal exterior recibida en ese ciclo de pausa no repercute en el funcionamiento
Es decir, no se activa la salida cada vez que recibe esa señal tal y como lo hace en el ciclo de trabajo, una vez expirado este tiempo vuelve a iniciar el ciclo de trabajo y así en ciclo infinito.
En el lcd aparece el tiempo del ciclo correspondiente descontándose hasta que llegue a 00:00:00:00.
El problema es el siguiente, cuando esta el tiempo de trabajo descontándose y recibe una señal de entrada el tiempo del lcd descuenta mas rápido de lo normal, no pasa siempre pero si a menudo.
He probado establecer un tiempo de 30segundos y durante ese tiempo simulo el accionamiento de esa entrada varias veces y puedo ver como el tiempo de descontaje se agiliza justo en ese momento en el que recibe la señal y activa la salida.
Al fin de cuentas,el tiempo establecido y el que expira en el ciclo no es el mismo siempre y cuando haya alguna señal de entrada exterior.
Sin embargo, en el ciclo de pausa no tengo este problema. El tiempo transcurre con total normalidad aunque reciba señales de entrada, lo único que cambia es que no tiene que activar la salida cada vez que reciba la señal de entrada.
Sabéis cual puede ser la solución para ese problema?
Os adjunto la rutina de trabajo de ese ciclo de trabajo, si os hace falta algún detalle de alguna rutina o algo que no veáis claro, me lo preguntáis e intento explicároslo.
Muchas gracias
-
Hola Xenam,
Para intentar ayudarte en el problema, sería conveniente que adjuntaras el fichero NPL del proyecto. Si no todo al menos si la parte de la que has adjuntado la figura dado que no tiene muy buena nitidez y no se aprecian bien el significados de los bloques.
F.
-
Adjunto programa.
Gracias
-
Voy a descargarlo y revisar.
F.
-
Voy a ordenar un poco la rutina para intentar seguir el programa. No hay quien lo siga con tanto cruce de lineas.
F.
-
Voy a ordenar un poco la rutina para intentar seguir el programa. No hay quien lo siga con tanto cruce de lineas.
F.
No te falta razon,tiene el programa un poco lioso para seguirlo con tantas líneas.
A mi me costo lo suyo, entre que aprendia niple y seguia el funcionamiento del programa.
-
Hola,
Bueno después de colocar un poco los bloques de la rutina que se te ve afectada por el hecho que mencionas, tengo que decirte que no veo nada que pueda afectar a que el tiempo vaya más deprisa.
Sin entrar a comprender todo el proyecto, ni saber que hace, ni como funciona, por lo que veo tienes creada una base de tiempos con el contador interno TMR0 y algún registro auxiliar. De forma que con el TMR0 se incrementa cada 100msg, cuando alcanza el valor de 10 incrementadas un registro auxiliar (tiempo) y a la vez otro llamado (tiempo_t1). Esta ultima acción no entiendo por que se realiza sin haber comprobado que "tiempo" haya alcanzado un valor determinado. Pero en fin si te funciona me supongo que tiene su utilidad dentro del programa.
La rutina de trabajo que has indicado que es la que te origina el efecto descrito, solamente tiene un bloque de comprobación del estado de la entrada "PIN,ent_1_det_eslabon". A partir de ahí si el valor es=1 ejecuta la rutina "p_imp_engrase" que dentro de ella activas un led, me supongo que durante un tiempo y a la vez lees los valores de la eeprom(??). Pero si la entrada es=0 pasas a comprobar otras rutinas, de forma que se realizan un a serie de opciones y al final se regresa al mismo punto (salto1). Esto lo he llamado yo así para la recolocación de los bloques de la rutina. Después, de regreso al salto, la siguiente operación es comprobar si el registro tiempo es >=1 y si se cumple la condición automáticamente reseteas el "contador tiempo"
Mi consejo es que revisases toda esa parte, incluso lo primero que haría seria aumentar el tiempo de la actuación del anti-rebote en la comprobación del estado de la entrada "PIN,ent_1_det_eslabon". Por defecto Niple te pone 20msg; prueba a aumentarle. Te adjunto en un grafico la parte a revisar y/o aumentar el tiempo.
Por otra parte creo que deberías de mejorar las rutinas: ciclo_p_paueslb y ciclo_p_traeslb. Están igual de mal que la que yo te he corregido. Adjunto también el programa con esa corrección. Es muy difícil seguirlas.
F.