Usando el pin de reinicio AVR como ADC

Estoy usando un ATTINY13 para una aplicación de juguetes. Simplemente hace parpadear los LED en patrones específicos. Decidí agregar un "control de velocidad" usando un potenciómetro, pero el único pin que me quedaba es el pin de reinicio.

Esquema usando ATTINY13

Creé un divisor de voltaje y lo agregué con resistencias de 330 ohmios, y las cosas parecen funcionar bien en una placa de pruebas.

Después de leer un poco sobre el uso del pin de reinicio para ADC, parece que algunas personas aconsejan que no pueda volver a programar el AVR. No he tenido este problema, pero tampoco estoy haciendo programación en el sistema.

El código que estoy usando para habilitar ADC0 en el pin 1 (PB5) es el siguiente:

DDRB = 0b00001000;
ADCSRA = 0b11100111;
ADMUX  = 0b00100000;

Mi pregunta es: ¿ Por qué funciona esto? Me gustaría saber un poco más antes de proceder con la fabricación de PCB. ¿Es pura suerte hasta ahora?

Supongo que porque el reinicio nunca "ve" tierra, el micro nunca se reinicia espontáneamente en el circuito, pero no tengo claro cómo logré usar el pin de reinicio para ADC sin deshabilitar la reprogramación del flash.

Nota: actualmente estoy usando una versión DIP-8 del chip en un zócalo, que transfiero a un programador para cambiar los parámetros. Cambiaré a una versión SOIC para la producción.

Otro: el encabezado de 6 pines se conecta a algunos LED Charlieplexed

necesita aclarar lo que quiere decir con "pero tampoco estoy haciendo programación en el sistema" y en qué se diferencia de la "reprogramación flash"...
Estoy (actualmente) reprogramando el micro por sí mismo; no en el dispositivo que representa el esquema. La versión final no tendrá encabezados ISP y no se programará en el circuito.

Respuestas (1)

El fusible de desactivación de reinicio hace exactamente eso: desactiva la función de reinicio del pin asociado. Si configura ese fusible, no hay forma de restablecer el dispositivo, excepto:

  • Ciclo de poder
  • Caducidad del temporizador de vigilancia

La programación en serie en circuito (también conocida como ICSP), creo, se basa en restablecer el dispositivo mediante el pin de reinicio, por lo que no podrá reprogramar el dispositivo una vez que este fusible esté configurado con ICSP. Sin embargo, hay más de una forma de reprogramar un AVR. Si el dispositivo es compatible con la programación en serie o en paralelo de alto voltaje (HVSP o HVPP), esa siempre es una opción. O si puede incluir un cargador de arranque en el chip (que se puede hacer con un ATtiny85, por ejemplo, no estoy seguro sobre el ATtiny13), eso también puede funcionar.

Dicho esto, la sección 24.3.3 de la hoja de datos tiene los siguientes extractos:

Las combinaciones especiales de bits de fusible bloquearán el dispositivo para una mayor programación convirtiéndolo efectivamente en un dispositivo OTP. Las siguientes combinaciones de configuraciones/bits de fusibles causarán este efecto:

  • Oscilador interno de 128 kHz (CKSEL[1..0] = 11), tiempo de inicio más corto (SUT[1..0] = 00), Debugwire habilitado (DWEN = 0) o Reset deshabilitado RSTDISBL = 0.
  • Oscilador interno de 9,6 MHz (CKSEL[1..0] = 10), tiempo de inicio más corto (SUT[1..0] = 00), Debugwire habilitado (DWEN = 0) o Reset deshabilitado RSTDISBL = 0.
  • Oscilador interno de 4,8 MHz (CKSEL[1..0] = 01), tiempo de inicio más corto (SUT[1..0] = 00), Debugwire habilitado (DWEN = 0) o Reset deshabilitado RSTDISBL = 0.

Si no tiene intención de apoyar en la programación de circuitos, puede programar de manera segura una vez, luego configurar el fusible de desactivación de reinicio y usar la función alternativa del pin. No desea dejar la función de reinicio habilitada en producción a menos que no le importe que su dispositivo se reinicie de manera arbitraria. Básicamente, si el pin es "bajo" durante un período de tiempo determinado, se reiniciará, fin de la historia. Según la hoja de datos Tabla 18-4, el rango de posibles valores de umbral para el reinicio externo para disparar es de 0,2*Vcc a 0,9*Vcc... tal vez tenga suerte con dispositivos que están más cerca de 0,2*Vcc.

Supongo que el fusible de desactivación de reinicio es algo que especificaría con avrdude. Actualmente no estoy haciendo eso. La publicación que leí que causó mi preocupación está aquí: avrfreaks.net/…
sí, el fusible de desactivación de reinicio es lo potencialmente paralizante
Por lo tanto, parece que no es necesario deshabilitar la funcionalidad de reinicio (a través de este fusible) para usar el pin de reinicio como ADC. ¿Puedo esperar confiabilidad de las unidades de producción sin hacer este cambio de fusible?
@JYelton No usaría la función alternativa sin deshabilitar la función de reinicio a menos que pudiera argumentar con fuerza que no importa si se reinicia inexplicablemente ocasionalmente o que las condiciones que producirían una entrada "baja" (aparentemente tan alta como 0.9*Vcc es suficiente para dispararlo según la tabla de la hoja de datos 18-4) en el pin puede excluirse por diseño.
Su última edición fue la que más ayudó, "no deje la función de reinicio habilitada en producción" dice más o menos lo que me faltaba. Gracias.