Use el PIN RESET en Attiny85 como entrada con divisor de voltaje

Divisor de voltaje y pull-up con analogRead

El Attiny tiene 6 pines que puedes usar como E/S.

Si bien 5 de ellos son realmente fáciles de usar, el Pin 1, el PIN de reinicio, obviamente reinicia el microcontrolador si el voltaje es inferior a alrededor de 2.5v.

Al reprogramar los fusibles para usar el pin de reinicio como un pin de E/S, ya no puedo usar el programador ISP de arduino.

Entonces, ¿la única forma de usarlo como entrada, sin reiniciar el MC, es permanecer por encima de 3v y usar analogRead?

Después de que finalmente obtuve eso, jugué un poco con mi multímetro (única herramienta de medición disponible) y experimenté con resistencias.

esquemático

simular este circuito : esquema creado con CircuitLab

The powersupply(battery) outputs around 5.11v.

not pressed i get 5.11v on the "reset pin".
pressed i get 3.41v on the "reset pin".

not pressed the resistace is 39K Ω.
pressed the resistace is 19K Ω.

Ahora bien, como no quiero reprogramar los fusibles ni quemar el Attiny85 mi pregunta es:

¿Puedo dañar de alguna manera el attiny usando este circuito analogRead();?

Las lecturas serían alrededor de 680 cuando se presiona o 1000 cuando no se presiona.

¿Debo usar otras resistencias para consumir menos corriente/enviar mucha corriente continuamente? ... si esto funciona...

¿Cualquier otra sugerencia?


Notas.:

ingrese la descripción de la imagen aquí

Uso pines 2(PB3),3(PB4),5(PB0),6(PB1)como canales PWM (con transistores npn); Rojo, verde, azul, blanco.

Pin usado 7(PB2)como botón, pero también necesito un potenciómetro...

ENTONCES:

pin 7(PB2)se convierte en potenciómetro (analogRead).

y yo espero

pin 1(PB5)se convierte en un botón usando analogRead o lo que sea.

EDITAR

este sitio explica más sobre el problema, aunque necesito un botón simple.

http://www.technoblogy.com/show?LSE

EDITAR

No probé el circuito de arriba. Te pregunto si podría funcionar, si hay algo mal. Tengo miedo de dañar el pasador.

Todo lo que sé es que:

  1. se restablece con bajo voltaje usando la configuración normal del potenciómetro o la configuración normal del botón
  2. si pongo los fusibles no puedo reprogramar el chip

  3. pin1 = pb5 = adc0 = lectura analógica (A0) = Arduino pin5 = REINICIAR

Lo siento, pero no entiendo muy bien cuál es el problema. Una vez que el reinicio se establece como pin de E/S, la MCU ya no podrá reiniciarse. Puede proporcionarle menos de 2.5V.
Una vez que el reinicio se establece como pin de E/S, no puede reprogramarlo ya que se necesita el reinicio con el ISP
Sí. Entonces, ¿quieres reprogramarlo?
¿tal vez? si no hay necesidad de otro circuito complejo.
Necesitaría hacer un circuito HVSP (programación en serie de alto voltaje): instructables.com/id/AVR-Attiny-fusebit-doctor-HVSP No es realmente tan complicado.
Creo que es un poco complejo para mí atm ... por cierto, no tengo todas esas partes. así que por ahora espero sortear ese programador serial de alto voltaje. ISP con arduino es realmente rápido ya que ya hice un circuito/escudo para un arduino.
¿Hay algún problema con el circuito del botón anterior?
Puede tratar el pin de reinicio como otro pin de E/S. Lo que significa que habilitaría el pull-up interno, conéctelo a un botón en el costado. Y conecte el otro lado del botón a tierra.
No, nada está mal, pero leer cuando un botón está encendido/apagado es un poco inusual. Prueba arriba.
sí, sé que sería más fácil... simplemente no tengo un programador de alto voltaje por ahora. Sé sobre el dragón o el stk5000... o tu circuito. Quiero aprender algunos de esos trucos electrónicos... jugando con voltaje y corriente. esto es algo que encontré probando con un multímetro. el unico miedo que tengo es que me queme algo... ya que no me se todos los calculos electronicos
Dijo que espero que puedas contarme más sobre mi circuito. si funciona... si no, o si funciona pero consume demasiado... o tal vez entienda si daña de alguna manera alguna de las otras partes del circuito cercano y por qué
"poco inusual" explicar pls.
En realidad, esta es una idea muy interesante: usar el pin como una entrada analógica en un rango restringido, ¡sin deshabilitar su funcionalidad de reinicio! Suponiendo que funcione para usted, el experimento a considerar sería medir cuidadosamente el consumo de energía del chip a medida que modifica el voltaje de entrada (una tarea que no es trivial, ya que necesita un amperímetro con un bajo voltaje de carga ). Lo que estaría buscando es el consumo excesivo que puede ocurrir en algunas topologías de tótem con una entrada de nivel lógico indeterminado.
Si puede reducir el voltaje de entrada a través del rango deseado sin aumentar la corriente de la fuente de alimentación, eso quizás sugiera que la idea es viable. Por supuesto, si reduce el voltaje hasta el punto en que activa un reinicio, entonces la corriente probablemente caerá drásticamente, que no es la información que está buscando adquirir.
Estoy usando el circuito @bigjosh desde hace un tiempo y funciona perfectamente. así que tengo un pin más en el attiny. lo uso para un pwm de 4 canales, 1 botón 1 potenciómetro.
También es posible usar un Pot en lugar del botón, aunque la resolución sería inferior a 500 en un arduino. Solo tiene que medir eso la primera vez.
¡Puedes leer voltaje sin pin! Ver ejemplo aquí: arduino.stackexchange.com/questions/48739/…

Respuestas (1)

Sí, puede usar el convertidor analógico a digital en el pin 1 incluso si el restablecimiento externo todavía está habilitado en ese pin, siempre que el voltaje en ese pin no caiga por debajo del umbral de reinicio.

Aquí hay una versión más simple de su circuito que funciona de manera confiable ...

esquemático

simular este circuito : esquema creado con CircuitLab

...

Cuando se presiona el botón SW1, las resistencias R2 y R1 forman un divisor de voltaje que pone alrededor de 4,54 voltios en el pin RST.

Aquí hay un programa de prueba de Arduino que encenderá el LED integrado cada vez que se presione el botón...

int led = 1;    // Onboard led on trinket

setup() {
    pinMode( led, OUTPUT );
}

loop() {
    if (analogRead(0)) > 900 ) {   // reset pin is near Vcc
        digitalWrite( led , 0 );   // turn led off
    } else {                       // reset pin is less than 900/1024 * 5 vcc
        digitalWrite( led , 1 );   // turn led on
    }
}

Notas:

Un Trinket es básicamente un ATTINY85 que tiene un conector USB y un gestor de arranque precargado, por lo que es fácil introducir código usando el IDE de Arduino. Todo lo que se dice aquí sobre Trinket se aplica a un ATTINY85 desnudo y viceversa.

La hoja de datos del ATTINY85 especifica el voltaje mínimo en el pin de reinicio que se interpretará como "1" como 0,9 voltios * (V IH2 ), que resulta en 4,5 voltios . Dado que la salida de ~4,54 voltios por el divisor de voltaje es mayor que eso, debe verse como un "1" y no restablecer el chip.

ingrese la descripción de la imagen aquí

Hay un pullup integrado de 30k-60k en el pin de reinicio, por lo que, en principio, solo podríamos usar, digamos, un R2 de 30k ohm y no necesitar R1, pero descubrí que puede obtener reinicios falsos al cambiar el ruido con solo el pullup interno .

Elegí resistencias de 10k y 1k ohm porque son comunes y proporcionan suficiente corriente para que funcionen de manera confiable, pero solo desperdician alrededor de 2 mA cuando se presiona el botón. Se usa muy poca corriente cuando no se presiona el botón.

Elegí 1000 como el valor de umbral en la lectura analógica porque da mucho margen en ambos lados para imprecisiones en los valores de las dos resistencias. Cuando no se presiona el botón, el pin de reinicio debe estar muy cerca de Vcc y, por lo tanto, analogRead () debe estar muy cerca de 1023. Cuando se presiona el botón, R2 reducirá el voltaje en el reinicio, pero exactamente cuánto más bajo depende en los valores exactos de R1 y R2 (el valor real de las resistencias puede ser bastante diferente de su valor de mercado debido a la tolerancia ) y el pull-up interno, por lo que elegí un valor más alto que solo el punto medio.

¡Sabía que había una manera más simple!... gracias por su respuesta precisa... ¡lo probé y funciona perfecto! por cierto, estoy usando resistencias de 10k....
¿Es esto mejor que usar un diodo zener 3v3 en lugar de R2? Con la resistencia de 1k, mi voltímetro le da al pin de reinicio 3V.
@ThatAintWorking Creo que un zener funcionaría bien, pero se acabó. Siempre que el pin RESET esté por encima de 0,9 voltios, el chip no se restablecerá y siempre que pueda ver la caída de voltaje (sea lo que sea) en la entrada analógica, entonces todo está bien.
¿Estás realmente seguro de esto? Lo que acabo de leer es que V I H 2 es 0,9*VCC voltios no 0,9 voltios
@ Unknown123 ¡Tienes toda la razón! Gracias por la corrección. Actualicé el valor de R2 y un par de cálculos para reflejar esto. ¡Gracias de nuevo!
Han pasado casi tres años, me siento triste por el cartel original, por cierto, tu código sigue siendo 900 y no 1000, ¿tienes alguna idea para poder trabajar con potentio usando un headroom muy pequeño?