Paso 3: Lectura y escritura de fusibles
En un anterior instructable, demostré cómo leer y configurar tus fusibles con su programador y avrdude. Aquí, te voy a mostrar cómo leer nuevamente tus fusibles en tiempo de ejecución para ver cómo realmente ha establecido su MCU les. Tenga en cuenta que este no es el ajuste de tiempo de compilación que obtiene de las definiciones en < avr/io*.h > pero los fusibles reales como el MCU lo lee que en tiempo de ejecución.
De la tabla 27-9 en la hoja de datos de ATmega328P (databook, más como él) los bits del Byte bajo del fusible son las siguientes:
Una cosa interesante a observar es que con fusibles, 0 significa programado y un 1 significa que esa particular es no programada. Un poco contra-intuitivo, pero una vez que sabes tu lo sabes.
- CKDIV8 establece el reloj de la CPU se divide por 8. El ATmega328P viene de fábrica programada para utilizar su oscilador interno 8 MHz con CKDIV8 programado (es decir se establece en 0) que le da un final F_CPU o CPU frecuencia de 1MHz. En Arduino, esto cambia ya que están configurados para usar un oscilador externo a 16MHz.
- CKOUT cuando programado dará salida a su reloj de la CPU en PB0, que es el pin digital 8 de Arduinos.
- SUT [1..0] especifica el tiempo de inicio de su AVR.
- CKSEL [3..0] establece la fuente de reloj, el oscilador interno RC, oscilador externo, etc..
Cuando lees tus fusibles, se devolverá a usted en hexadecimal. Este es el formato que usted necesita si desea escribir los fusibles mediante avrdude. En mi arduino, aquí está lo que me sale al leer el byte inferior del fusible:
Por lo tanto, todos los bits se establecen en 1. Hice el mismo procedimiento en un clon de Arduino y tiene el mismo valor. Control de uno de mis sistemas independientes de AVR, conseguí 0xDA cual es el valor que me había marcado algunas tiempo atrás cuando se configura el chip.
El mismo procedimiento se utiliza para comprobar el Byte alto de fusible, extendido fusible bytes, y bloqueo de fusibles. La calibración y firma fusible bytes que se haya desactivado en el código con una directiva de preprocesador #if 0, que puede cambiar si usted se siente escasa.