Parece que tienes algo más aquí.
Si los interruptores están cableados como se muestra y la resistencia de un interruptor cerrado es inferior a 10K ohmios, entonces su read_button_volm()
debería funcionar.
Empezaría por reducir las posibilidades.
- ¿Devuelve la función
1
si corta manualmente PB4 a tierra con un puente?
- ¿La función devuelve
1
si cortas el PB0 a tierra manualmente y presionas el botón?
- ¿Qué voltaje ve en el pin PB4 con un voltímetro cuando se presiona el botón? Arriba?
Tenga en cuenta que la recuperación interna del ATTINY12 puede ser tan alta como 122K ohm ...
..yelvoltajedebeserinferiora0.1*VccenunodelospinesIOdigitalesquetambiéntienenlafunciónXTAL(PB4&PB3)...
Esto significa que para detectar de manera confiable un 0 en PB4 cuando tiene el pull-up conectado, necesita que la resistencia entre PB4 y masa sea menor que ...
122K / x < 0.1
x < 12K
Por lo tanto, su interruptor debe ser inferior a 12Kohm para funcionar de manera confiable en este pin de este chip con el pull-up habilitado.
Solutions
Si absolutamente debe obtener este diseño con estas partes para trabajar, hay algunos trucos que puede probar.
El primero que viene a la mente es usar el tiempo y la capacidad para detectar el interruptor cerrado.
Lo que harías en tu código es básicamente ...
- Habilitar el pull-up en PB0
- Establezca PB4 en salida, nivel BAJO.
- Establezca PB4 en ENTRADA, sin extracción.
- Calcule cuánto tiempo le tomará a la entrada del PB4 cambiar a ALTO con el botón presionado.
Básicamente, ha hecho un circuito RC a partir de PB0, el interruptor y la capacitancia del pin PB4 y está tratando de medir la R del interruptor midiendo la constante de tiempo de este RC.
Obtenga un montón de lecturas para este recuento de tiempo. Este es el tiempo que tarda la capacitancia en el PB4 en drenar por debajo del umbral de voltaje de 0 bits.
Ahora es posible que pueda comprobar si se presiona el botón repitiendo los pasos anteriores, pero utilizando los tiempos que recolectó para un interruptor cerrado para establecer un tiempo de espera. Si el pin se eleva antes del tiempo, entonces se presiona el botón, si no lo hace, entonces no se presiona.
Tenga en cuenta que este enfoque tiene algunas limitaciones ...
-
Es muy sensible a otras rutas que podrían descargar el pin PB4 incluso cuando no se presiona el interruptor. Por ejemplo, un dedo húmedo o incluso algo de suciedad a lo largo de las trazas podría descargar fácilmente la capacitancia tan rápido como su interruptor cerrado, por lo que necesita mantener la placa limpia.
-
Esto toma mucho más tiempo que solo verificar un valor de bit en un registro de PIN, por lo que no es eficiente en el tiempo.
-
Realmente no puede establecer una interrupción de pin en el botón presionando debido a la secuencia involucrada. Hay maneras de evitar esto usando el perro guardián, pero son más complicados y menos eficientes en cuanto a energía que una interrupción de cambio de pin directo.
¡Avísanos si este enfoque te funciona!