Mantener el estado del pin GPIO en el reinicio

4

Tengo un ESP-12 soldado en esta placa adaptadora . Estoy usando el firmware basado en NodeMCU Lua para codificar la lógica.

He programado node.restart para que se ejecute periódicamente. 1 de los pines GPIO se utiliza para controlar un componente externo en estado ALTO o BAJO. Puedo restaurar el estado GPIO (ALTO / BAJO) después de node.restart , pero durante el reinicio, el estado GPIO no está definido. Quiero mantener ese estado, especialmente si el estado era ALTO.

1 enfoque que tengo en mente es tener otro microcontrolador como ATTinyX que esté conectado a ESP-12 a través de UART. ESP-12 puede asignar una cadena / carácter a ATTinyX para mantener el estado (el pin ESIO-12 GPIO y el pin ATTinyX se conectan al componente externo a través de una puerta OR) y luego se reinician. Una vez que se completa el reinicio de ESP-12, puede decirle a ATTinyX que no mantenga el estado porque ESP-12 puede mantenerlo ahora después del reinicio.

Esto agrega un poco de costo y componentes, ¿hay alguna forma diferente de lograr lo mismo? Estoy más en el lado del software, tengo menos conocimientos de electrónica. Cualquier ayuda es apreciada. Tal vez sea similar a la memoria de 1 bit configurada / restablecida por ESP-12, ¿puedo usar un flip flop en este caso?

    
pregunta ritesht93

6 respuestas

2

simular este circuito : esquema creado usando CircuitLab

Figura 1. Condensador de retención de estado.

Conecte un GPIO de repuesto como se muestra. Al reiniciar, lea el estado del condensador y configure la salida de manera apropiada. Esto le dará una memoria de 1 bit a corto plazo.

//Pseudo code to go early in boot sequence.
pinPullup(pin) = false;        //Turn off the pull-up.
pinMode(pin) = input;          //Set the pin to input mode, if required.
pdState = pinRead(pin);        //Read the input to get the power-down state.
pinMode(pin) = output;         //Configure as output.
pinWrite(pin) = pdState;       //Restore the power-down state.

Es posible que desee intercambiar el orden de las dos últimas líneas (dependiendo de las micro) para evitar una señal momentánea.

Tenga en cuenta que en esta configuración, el pin no se puede utilizar para nada más.

    
respondido por el Transistor
1

Eche un vistazo a los expansores I2C como MCP23008. Básicamente, la misma configuración que su ATtiny menos otro firmware. Solo mantendrá el estado que desee, independientemente de los reinicios de ESP.

    
respondido por el filo
1

Intente usar un condensador que proporcione el voltaje requerido para la duración del reinicio. El siguiente enlace puede ayudarlo a encontrar el valor de condensador adecuado.

enlace

edit:

simular este circuito : esquema creado usando CircuitLab

Para ser más específico, asumo que el tiempo requerido para reiniciar es menos de dos segundos, por lo que ahora la constante de tiempo de la red RC debe ser casi el doble del tiempo de reinicio. Elegir una constante de tiempo de 4.7 segundos.

Constante de tiempo T = R * C

es decir, 4.7 s = 4.7K OHMS * 1000uf

La razón por la que deberíamos tener la constante de tiempo para que sea el doble del tiempo requerido es que, cuando un capacitor comienza a descargarse, a la mitad de la constante de tiempo, el voltaje de los capacitores sería aproximadamente el 60% del voltaje mientras está completamente cargado, que es 3 voltio a 2,35 segundos, ya que el tiempo de reinicio es menor que eso, se mantendrá un nivel alto.

    
respondido por el karthik Jay
0

Si se conoce el estado del pin antes de apagarlo, puede usar la función pull up o pull down para mantener ese estado mientras se está iniciando my. Los condensadores grandes también pueden ayudar.

El problema es que los pines por lo general están predeterminados en fuera o no en las funciones GPIO, por lo que puedes ver sus estados en el reinicio.

    
respondido por el dannyf
0

Intente usar un pestillo simple, pero es posible que necesite tres pines GPIO. Mientras se ejecuta, si la salida en el GPIO que está utilizando es ALTA, proporcione un pulso alto-bajo en CONFIGURAR, y si BAJA haga lo mismo en RESTABLECER. Durante el encendido, verifique el estado de Q, si ALTO mantiene el pin GPIO requerido como ALTO, de lo contrario, bájelo

    
respondido por el karthik Jay
0

Puede agregar una fuente de enclavamiento para impulsar su componente externo. enlace

    
respondido por el Kapil Singh

Lea otras preguntas en las etiquetas