No se programar esta idea con PIC

Hola:

Usando cualquier PIC12F o 16F en asm, quiero conseguir resolver un problema. Por ejemplo:

Un aparato tiene dos botones como los PC de sobremesa. Un Power On de encendido y otro Reset de resetear.
Si enciendo el aparato, digamos que en la circuitería del Reset es igual a 0 durante unos milisegundos, luego se pone Reset a 1.
En el momento que detecta el encendido, no hay que tocar el Reset.

Comportamiento de un PIC:
El PIC tiene una entrada y dos salidas de Led.
En su salida tiene esta configuración.
In|Led1- Led2
-----------------
1 | 0 ------- 0
2 | 0 ------- 1
3 | 1 ------- 0
4 | 1 ------- 1

Donde pone In significa entrada, donde pone Led1 y Led2 son salidas. Desde que el PIC detecte Reset = 0, cambia de configuración en su salida. Si mirar en la tabla de arriba, In le puse 1, 2 , 3 y 4 pasos. Por cada Reset igual a 0 que detecte en su entrada In, tiene su configuración a su salida.

El problema que al encender el aparato con Power ON, ya tiene un Reset igual a 0 durante un pequeño tiempo, luego se pone a 1.

¿Cuál es el problema?
Que no me interesa cambiar la configuración del PIC de su salida nada más encender el aparato. Mi idea era poner un retardo en la entrada del PIC, o el principio de la programación. Si lo hago así, tarda un tiempo sin poner nada a su salida.

¿Cuál es la idea?

Encender el aparato con el Power ON, al mismo tiempo enciende el PIC.
Debo hacer algo para que no me cambie de configuración el PIC nada más encender dicho aparato y al mismo tiempo tiene que tener la configuración de salida hecha nada más encender el PIC.

Así se me ocurre de ignorar el primer Reset igual a 0 del encendido del aparato pero que el PIC de entrada ya tenga su configuración de Leds encendidos.

Desde que encienda el aparato y se estabilice todo. El botón Reset normalmente se queda a 1.
En el momento que pulse el botón Reset del aparato, se pasa a Reset igual a 0, luego de dejar de pulsar el pulsador se pone a Reset igual a 1 que es lo normal. Desde que ocurra esto, es cuando cambia de configuración de sus salidas del PIC.

¿Hay alguna solución?

Espero dejarlo todo claro. Se que cuesta entender estas expicaciones.
:)
 
Hola, Meta. Te veo muy metido en los PIC últimamente. Eso está bien.

Veamos... parece que quieres contar las veces que se pulsa el botón de RESET, pero sin que cuente el reset que se produce durante el arranque, ¿es eso?

Bien, supongo que vas a guardar la configuración de salidas en alguna variable en la EEPROM o en la Flash para que se mantenga el valor para la siguiente vez que alimentes el PIC. Entonces, lo primero que tiene que hacer tu programa al arrancar es coger ese valor de la EEPROM o Flash y sacarlo por las patas de salida. Hasta ahí bien.

El siguiente paso es esperar a que la señal de reset se ponga a 1. Si ese tiempo es más o menos fijo, puedes hacerlo con una simple pausa de duración algo mayor. Otra forma es, simplemente, leer el puerto de entrada hasta que el valor se ponga a 1, pero podría ser que se te generaran "rebotes" durante la transición de 0 a 1, no lo sé; depende de cómo esté hecho el circuito de reset.

Y a partir de ese momento en que ya consideras que ha terminado el tiempo de reset, puedes empezar a leer la entrada, en espera de detectar la pulsación.

Parece sencillo, ¿no? Suerte.

PD: La detección del pulsador de RESET para actualizar las salidas, con su correspondiente anti-rebotes.
 
Si no quieres que se resetee cuando se produce un reset por cualquier accion diferente a la del boton de reset, puedes almacenar el ultimo estado en la memoria EEPROM del pic e inmediatamente cuando se reestablezca el ciclo lea la memoria y regrese a la ultima posion.
 
lo que queres es simple:
al iniciar el pic inicia con un contador (cont1) =0
y un flag de status = 0 (llamemoslo flag1)
y la configuracion de leds que vos hayas dado.

bueno, este contador cont1 simplemente cuenta , sea una cuenta de digamos 3 segundos (el tiempo necesario para ignorar el reset de el power on ) .

el programa pregunta por el flag 1
cuando el cont 1 llega a el valor requerido te setea ese flag.

mientras el flag =0 el programa ignora cualquier reset (salta esa rutina) .
cuando el flag. =1 el programa corre en la parte que sensar reset y actua cambiando los leds.
ademas, cuando el flag =1 el contador ya no es necesario que siga corriendo .

hace mucho que no estoy con los pics , por eso quizas no use los nombres adecuados.
pero me parece que es la forma para hacer que luego de dar alimentacion corra un timer y hasta que ese timer no llegue a la cuenta deseada el programa no corra por determinada parte .

un saludo
 
Última edición:
Atrás
Arriba