¿Qué tiempo de respuesta necesitas cuando el interruptor cambia de estado? Si el interruptor va a permanecer cerrado durante largos periodos de tiempo y no se requiere una respuesta instantánea cuando se abre, tener un pull-up que se activa cuando la CPU está interesada en el estado del pin, pero se desactiva en caso contrario puede ser más eficiente que tener un pull-up débil que se activa todo el tiempo. Si hay una fuente de pulsos periódicos, puede ser útil usar algo como lo siguiente:
simular este circuito - Esquema creado con CircuitLab
Supongamos que el "reloj" emite un impulso de 10us, diez veces por segundo. Cuando el interruptor esté cerrado, el circuito consumirá 1mA, 1/10.000 del tiempo, es decir que el interruptor consumirá 1uA de media. Una vez que el interruptor está abierto, PinState se pondrá alto la próxima vez que el reloj emita un pulso, o cada vez que la CPU emita PullupReq; entonces permanecerá alto hasta que el interruptor se cierre. Tenga en cuenta que si la CPU utiliza "wakeup on pin change" permanecerá inalterado mientras el interruptor permanezca cerrado, o mientras permanezca abierto.
Las únicas desventajas de este enfoque son que a menos que la CPU active explícitamente PullupReq, puede tardar hasta 100ms en averiguar cuando el interruptor está abierto, y requiere una fuente de pulsos para la puerta OR. Por lo demás, ofrece un buen equilibrio entre capacidad de respuesta y consumo de energía y, a diferencia de las resistencias de alto valor, funcionará incluso si el interruptor tiene alguna resistencia de fuga.