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.
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
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:
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.
vicatcu
JYelton