¿Qué tipo de tiempo de respuesta necesita cuando el interruptor cambia de estado? Si el interruptor se queda a menudo cerrado durante largos períodos de tiempo y se requiere una respuesta instantánea cuando se abre, no es necesario tener un pull-up que esté habilitado cuando la CPU esté interesada en el estado del pin, pero de lo contrario podría ser más eficiente que tener un pullup débil que está habilitado todo el tiempo. Si hay una fuente de pulsos periódicos, puede ser útil usar algo como lo siguiente:
simular este circuito : esquema creado usando CircuitLab
Suponga que el "reloj" genera un impulso de 10 us, diez veces por segundo. Cuando el interruptor está cerrado, el circuito consumirá 1 mA, 1 / 10,000 del tiempo, lo que quiere decir que el interruptor consumirá 1 uA en promedio. Una vez que el interruptor está abierto, PinState irá alto la próxima vez que el reloj emita un impulso, o siempre que la CPU envíe PullupReq; entonces permanecerá alto hasta que se cierre el interruptor. Tenga en cuenta que si la CPU utiliza la función de "activación al cambiar de pin", no se interrumpirá mientras el interruptor esté cerrado o mientras esté abierto.
Las únicas desventajas de este enfoque son que, a menos que la CPU active PullupReq explícitamente, puede llevar hasta 100 ms descubrir cuándo el conmutador está abierto y requiere una fuente de pulsos para la compuerta OR. De lo contrario, ofrece una buena compensación entre la capacidad de respuesta y el consumo de energía y, a diferencia de las resistencias de alto valor, funcionará incluso si el interruptor tiene cierta resistencia a las fugas.