Paso 2: Bits de comprensión fusible de la hoja de datos
Los microcontroladores AVR AtmegaXXX viene con un oscilador interno de 1 MHz por defecto. En este instructable mostraré cómo cambiar los fusibles de Atmega328P-PU a trabajar al oscilador interno 8MHz. La ubicación de fusibles específicos bits difiere entre todos los bytes de tres fusibles (fusibles bajas, alta y extendidas) función chip AVR utilizado. Así que asegúrese de anotarlos antes de les.
Fusibles de Byte bajo
El fusible de byte bajo aborda el reloj de la fuente, qué tan rápido se ejecutará el chip y el tiempo que espera en el arranque. 1 byte equivale a 8 bits. Así que hay 8 bits en el byte bajo fusible. Estos 8 bits se explican aquí:
- Bit 7: CKDIV8: cuando juego divide la velocidad de reloj de 8
- Bit 6: CKOUT: cuando los pulsos de reloj son PB0 salida (Pin 14)
- Bit 5: SUT1: retardo de inicio
- Bit 4: SUT0: retardo de inicio
- Bit 3: CKSEL3: establecer el origen del reloj
- Bit 2: CKSEL2: establecer el origen del reloj
- Bit 1: CKSEL1: establecer el origen del reloj
- Bit 0: CKSEL0: establecer la fuente de reloj
Los chips ATmega pueden funcionar a diferentes velocidades o frecuencias y la frecuencia está determinada por la fuente de reloj que se utiliza. La fuente de reloj se establece mediante la CKSEL3... fusible 0 bits. Para trabajar con la fuente de reloj interna necesitamos establecer CLSEL3 = 0, CKSEL2 = 0, CKSEL1 = 1 y CKSEL0 = 0. Usted tiene que encontrar este valor en la hoja de datos del microcontrolador. En la hoja de datos hay un capítulo "reloj del sistema y opciones de reloj". Hay un subtema en ese capítulo "Fuentes de reloj". Allí encontrarás una tabla donde el valor de CKSEL3... 0 puede ser fuente. He adjuntado una captura de pantalla de la hoja de datos.
Para el tiempo de inicio hay otro subtema "calibrado RC oscilador interno". Allí encontrarás otra tabla para el SUT0... 1. voy a la opción de poder levantamiento lento. Así SUT1 = 1 y SUT0 = 0.
Ahora nos quedamos con dos más bits para configurar: CKOUT y CKDIV8. No necesito ninguna salida de pulso de reloj en PB0. Así que pondré esto a 1 (sin programar).
La máxima frecuencia del oscilador interno RC para Atmega328P-PU es 8 MHz. Esto se logra cuando la CKDIV8 es 1 (o). Si establece este a 0 (o programada) entonces tu chip será runt a 1 MHz. Para poder ejecutar el chip en 8 MHz tenemos que establecer CKDIV8 = 1.
Ahora la combinación de los 8 bits, la requiere fusibles baja byte es 11100010.
Fusibles de byte alto
El fusible de byte alto se explica a continuación. Usted puede simplemente omitir esta parte. Aquí sólo he explicado el bits del fusible alta. No necesita cambiar los bits del fusible alta para cambiar la fuente de reloj y frecuencia de funcionamiento. Pero si usted está interesado en saber sobre el byte alto funde luego ir a través del siguiente párrafo.
Hay 8 bits en el fusible de byte alto también. Estos son:
- Bit 7: RSTDISBL: desactivar reinicio externo
- Bit 6: DWEN: habilitar depuración de alambre
- Bit 5: SPIEN: activar serial programación y descarga de datos
- Bit 4: WDTON: temporizador de vigilancia siempre en
- Bit 3: EESAVE: borrar de la memoria EEPROM de preservar a través de chip
- Bit 2: BOOTSZ1: establece el tamaño de memoria del gestor de arranque
- Bit 1: BOOTSZ0: establece el tamaño de la momory de gestor de arranque
- Bit 0: BOOTRST: seleccione el vector de reset
Ahora voy a explicar cada uno:
RSTDISBL (desactivar el reset externo)
PC6 del Atmega328 es un pin de reset, mantenga bajo (a tierra) y el chip se restablecerá. Así es como funciona el interruptor en el Arduino. Cuando usted presiona el botón de reset se conecta PC6 tierra y restablece el chip. PC6 también puede ser utilizado como un pin de IO normal pero trata de desactivar la función de restablecimiento en los giros que significa que el chip no puede ser en línea programado (en línea de programación requiere un reset). Esta es una de las opciones es mejor no cambiar. Me imagino que RSTDISBL se pone en ejecución por razones de seguridad detener el chip de ser reprogramado o el firmware que descargaron. Cuando RSTDISBL está programada la puesta en marcha de tiempo (SUT1 SUT0) se incrementa a 14CK + 4.1ms para el modo de programación se pueden introducir.
De forma predeterminada, la configuración es RSTDISBL = 1 (sin programar).
DWEN (depuración habilitar el alambre)
Chips ATmega han construido en la depuración de herramientas por defecto desactivado. El fusible DWEN se utiliza para activarlos. DWEN utiliza el mismo pin como reset (PC6) y DWEN está habilitado (y no se configuran los bits de cierre) el pin de reset se convierte un pin de comunicación y normal ya no funciona. Por ejemplo, si habilita DWEN en un Arduino el botón ya no funciona. Para utilizar la depuración de la en-viruta necesita un programador compatible como el dragón del AVR. Ya que no tengo un programador adecuado he no utilizado nunca y no sé cómo utilizar depuración. Si quieres saber más hay un buen artículo para empezar.
Este es uno de los fusibles con que debe tener cuidado. Si habilita DWEN y también activar los bits de cierre no puede programar el chip de la manera normal.
Si están empezando dejar DWEN 1 (sin programar). Después de todo, reset es muy útil.
SPIEN (Serial activar programación y descarga de datos)
Chips ATmega pueden ser programados usando programación serial. Programación serial se utiliza para a bordo la programación utilizando un protocolo serial a través de un ISP (programador serial inline) o UART (receptor asincrónico universal / transmisor). El método normal de los chips ATmega de programación es a través de la interfaz SPI con el SCK (reloj), MOSI (entrada) y pines MISO (salida). Si deshabilita la serie programación de entonces ya no puede usar el SPI para programar el chip. También puede deshabilitar el serial usando los bits de cierre de la programación. Para uso normal y el desarrollo deja SPIEN habilitado, sin embargo, si usted tiene un dispositivo que es final y no programar más entonces usted puede utilizar esta opción para detener personas que acceden a la viruta a través de comunicación serial.
El ajuste predeterminado es SPIEN habilitado, SPIEN = 0 (programado).
WDTON (temporizador de vigilancia siempre)
El perro guardián consiste en un temporizador que hará que el chip de reset si no recibe un OK señal en momentos específicos. Esto puede ser útil cuando usted tiene código inestable o tiene un sistema que no debe bloquear permanentemente. Cuando se activa el temporizador del vigilante, debe chocar un bosquejo o congelar el temporizador a tiempo y reajustar la viruta provocando un reinicio similar a presionar el botón de reset un un Arduino funcionando. El temporizador del vigilante puede activarse en software para la configuración de fusibles no necesita realmente ser utilizado. Por defecto, el temporizador del vigilante es off, WDTON = 1 (sin programar).
EESAVE (memoria EEPROM preservar)
Cuando está programado el chip ATmega se borra la memoria justo antes de que el nuevo código es cargado. En circunstancias normales la memoria EEPROM se borra así como la memoria del programa. El fusible EESAVE puede utilizarse para contar el chip no para borrar la EEPROM. Esto es útil cuando desea actualizar el código, pero mantener la configuración del usuario que se almacena en la EEPROM.
Tengo la costumbre de poner el fusible; EEPROM tiene un ciclo de vida limitado tan menos escribe en él lo mejor. Borrado de la eeprom no tiene efecto en subir nuevo código y la mayoría de mis proyectos no utiliza la memoria eeprom para no borrarlos no es un problema. La dropController almacena ajustes y gota veces en eeprom y lo puse EESAVE para conservar los datos cuando subo nuevas versiones del código.
El valor predeterminado es EESAVE = 1 (sin programar), y memoria EEPROM se borra durante el borrado del chip para la programación del ciclo.
BOOTSZ1 y BOOTSZ0 (Boot loader tamaño)
Los chips ATmega tienen la habilidad de usar un gestor de arranque, esto es un pequeño programa que se ejecuta cuando el chip es primera vez o cuando se reinicia. Se utilizan normalmente los cargadores de arranque para inicializar el dispositivo y Compruebe la comunicación externa. Arduino utiliza un gestor de arranque para comunicarse con un ordenador conectado a ver si hay un nuevo programa a ser cargado. Por esta razón que el Arduino se restablece cuando subes nuevo código, el reset ejecuta el cargador de arranque, los controles del cargador de arranque a ver si tienes el nuevo código.
El cargador de arranque se guarda en la memoria de programa, la misma memoria utilizada para la aplicación del usuario y desde el gestor de arranque puede ser de diferentes tamaños se puede saber el chip ATmega cuánto espacio para reservar. El cargador de arranque Arduino (más viejo) regular es de 2 kilobytes (KB) pero el Optiboot nuevos (se usa en la ONU) es de sólo 0,5 KB (512 bytes). Si utilizar Optiboot y establecer el tamaño del cargador de arranque por consiguiente ganarás un extra 1,5 KB para su propio programa. 1.5 KB puede ser un montón de espacio, funcionamiento fuera de espacio de programa es por eso que comenzó a programar chips ATmega de independiente en el primer lugar. El código para el controlador de la gota llegó a ser demasiado grande para el Arduino regular así que quité el cargador de arranque.
Si tienes un gestor de arranque BOOTSZ debe ser utilizado conjuntamente con BOOTRST. BOOTRST dice el chip ATmega de la dirección de memoria donde se inicia el cargador de arranque. Si BOOTRST no se establece la aplicación del usuario puede utilizar toda la memoria independientemente de los ajustes de BOOTSZ.
El valor predeterminado para los nuevos chips es BOOTSZ1 = 0 (programado) y BOOTSZ0 = 0 (programado) que significa que tienen el máximo de memoria reservado para un gestor de arranque.
BOOTRST (seleccione reset vector)
Chips ATmega pueden usar un gestor de arranque, esto es un pequeño programa que se ejecuta cuando se resetea el chip. Si tienes un gestor de arranque entonces es necesario que informe el MCU y esto es mediante el uso de la BOOTRST fusible de ajuste. Cuando el fusible de BOOTRST, en el reinicio el dispositivo saltará a la dirección del gestor de arranque. Si no juego, el chip se salta a la dirección de inicio del programa en 0 x 0000.
El valor predeterminado es BOOTRST = 1 (sin programar).
Si BOOTRST no está establecido (no arranque) los fusibles BOOTSZ no se utilizan independientemente del valor.
ADVERTENCIA: Los fusibles RSTDISBL, SPIEN y DWEN tienen el potencial para el chip ATmega de ladrillo, o por lo menos hacen muy muy difícil volver a utilizar el chip. Para uso general y especialmente si usted está empezando con chips independientes de programación, no debe cambiar estos ajustes del fusible. Usted debe también comprobar que no son cambiándolas cuando se vuelva a escriben los otros ajustes del fusible.
Así que nuestro nuestro byte requiere fusible alta es 11011011.
Fusible largo Bits
Los fusibles extendidos sólo se utilizan para establecer el nivel de detección de brown-out (DBO). Los chips ATmega pueden convertirse en inestable o poco confiable cuando se usa con voltaje insuficiente. Por ejemplo, el Atmega328 / 328P puede ejecutar con seguridad en 16 MHz si tiene al menos 4 V de la fuente. Cualquier cosa por debajo de 4V significa que el chip es probable que se portan mal. Esto sería un problema si el dispositivo se está utilizando con sensores para tomar medidas o confiado en tiempos precisos.
Para asegurar que el chip tiene suficiente voltaje de entrada un nivel de voltaje mínimo puede establecerse. Si el voltaje cae por debajo de este nivel entonces el chip se resetea. Esto se llama el nivel detector de brown-out. Básicamente, si el voltaje suministrado es inferior a la DBO el chip mantiene reset bajo.
No estoy pasando cada bits del byte de largo fusible. Por defecto todos los bits de este byte se establece como 1 (sin programar).
Y aquí está que nuestro byte largo fusible es 11111111.