Resumen
Actualizados con la era de la tecnología, los nuevos microcontroladores vienen con muchos periféricos y funciones integradas. Estos periféricos y características integradas no sólo reducen el costo de los circuitos adicionales que se usarán con el controlador, sino que también facilitan la interfaz de dispositivos adicionales (como módems, etc.) directamente con el microcontrolador.
Las nuevas generaciones de microcontroladores son capaces de trabajar con opciones de reloj tanto interno como externo. Pero entonces surge la pregunta: ¿cómo podemos hacer que funcionen en la opción de reloj deseada? ¿Cómo deshabilitar/habilitar un determinado periférico? Como principiante, cuando obtiene un nuevo chip ( ATmega16 /32), puede quejarse de que '¡CHIP PORC no funciona!' o "cuando el pin de reinicio y el sexto pin de PORTC (en ATmega8) son comunes, ¿cómo debo seleccionarlos/distinguirlos?". Estos problemas pueden parecer amargos cuando intentas ignorarlos y seguir adelante, pero todos estos problemas se pueden resolver configurando correctamente los FUSIBLES de tu dispositivo.
Hay algunos parámetros en el chip que se utilizan para configurarlo antes de que pueda usarse en ambientes exteriores. Estos parámetros se definen mediante Fuse Bits. En otras palabras, el bit fusible determina el comportamiento del chip, si tiene un cargador de arranque, a qué velocidad y voltaje opera, las condiciones del temporizador de vigilancia , etc. La principal ventaja de las puntas fusibles es que el microcontrolador se puede configurar según sea necesario.
Una vez que los bits de los fusibles se configuran en una configuración específica, el controlador se puede utilizar repetidamente (el programa se puede escribir repetidamente). No es necesario configurar los bits de fusible cada vez que utilice el controlador hasta el momento en que desee utilizarlo en la misma configuración. Sólo es necesario cambiar los fusibles si desea cambiar la configuración inicial del controlador. Las puntas fusibles son muy confusas para los principiantes. Este tutorial explorará los bits de los fusibles y también proporcionará una comprensión clara de qué fusibles necesita configurar para su dispositivo.
Descripción
Descripción
Antes de configurar los fusibles de su dispositivo, debe tener un conocimiento profundo de los fusibles, cuándo exactamente y cómo los configuraría, y cuáles son los factores que pueden afectar el funcionamiento del dispositivo. Es importante tener en cuenta que la configuración de los bits del fusible no se ve afectada por la operación de borrado del chip. Se configuran por separado mediante un programador externo.
Otro aspecto muy importante a tener en cuenta es que se deben programar los bits de fusible deseados antes de configurar los bits de bloqueo del dispositivo. Debe tener mucho cuidado al escribir los fusibles del dispositivo. Supongamos que está utilizando un programador/grabador IPS para programar su controlador y por casualidad ha desactivado (desprogramado) el bit SPIEN, entonces el chip ya no se puede programar. El bit SPIEN se puede habilitar (programar) nuevamente usando un registrador paralelo. Si el bit se lee como 0 lógico, significa que el bit está programado o, de lo contrario, se denomina bit no programado.
El microcontrolador AVR (ATmega16) consta de dieciséis bits de fusible que se clasifican como fusible bajo y fusible alto. Estos bits de fusible se pueden configurar para seleccionar opciones de reloj del microcontrolador o para controlar algunos periféricos integrados como JTAG, SPI, etc.
Un microcontrolador nuevo o virgen tiene un valor de byte de fusible predeterminado que es igual a 0x99E1 en hexadecimal. Para comprender el significado de este valor predeterminado, se debe comprender cada bit de fusible.
Puntas de fusible alto:
Fusible
|
OCDEN
|
JTAGEN
|
ESPIAR
|
COMPRAR
|
ESAHORRAR
|
BOTASZ1
|
BOTASZ0
|
ARRANQUE
|
Pequeño no.
|
parte 7
|
Parte 6
|
parte 5
|
parte 4
|
parte 3
|
Parte 2
|
Parte 1
|
Bit 0
|
Estándar
valores
|
1
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
Puntas de fusible bajo:
Fusible
|
NIVEL DEL CUERPO
|
BODEN
|
SUT1
|
SUT0
|
CKSEL3
|
CKSEL2
|
CKSEL1
|
CKSEL0
|
Pequeño no.
|
parte 7
|
Parte 6
|
parte 5
|
parte 4
|
parte 3
|
Parte 2
|
Parte 1
|
Bit 0
|
Valores predeterminados
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
1
|
La punta del fusible individual se explica en la siguiente sección.
Fusibles
CKSEL (3:0) (selección de reloj)
Estos bits de fusible se utilizan para seleccionar diferentes opciones de fuente de reloj para el microcontrolador. La siguiente tabla muestra las diferentes fuentes de reloj del dispositivo y sus correspondientes bits de fusible.
Opción de reloj del dispositivo
|
CKSEL(3:0)
|
Resonador externo de cristal/cerámica
|
1111 – 1010
|
Cristal externo de baja frecuencia
|
1001
|
Oscilador RC externo
|
1000 – 0101
|
Oscilador RC interno calibrado
|
0100 – 0001
|
Reloj externo
|
0000
|
La configuración de reloj predeterminada para el nuevo controlador es CKSEL = 0001 (oscilador RC interno de 1 MHz). Generalmente, el cristal externo se utiliza como opción de reloj (por lo que el bit del fusible se establece entre el rango 1111-1010).
CKOPT (opción de reloj)
Hay dos modos de oscilación en el microcontrolador ATmega16; el bit CKOPT selecciona uno de estos modos. Si el bit CKOPT está establecido (0), el oscilador genera una oscilación de salida completa de riel a riel. Este modo tiene un amplio rango de frecuencia. Si CKOPT no está programado (1), la oscilación tendrá una oscilación de salida más baja (este modo tiene una frecuencia limitada).
El Atmega16 puede funcionar a una frecuencia de reloj máxima de 16 MHz (16PU o 16PI), por lo que CKOPT está programado. El bit CKOPT se combina con los bits CKSEL (3:1) para seleccionar la frecuencia de funcionamiento y su modo. La Tabla 2 muestra la combinación de bits CKSEL(3:1) y CKOPT utilizada para seleccionar la frecuencia del cristal para ATmega16. La siguiente tabla también recomienda los rangos de condensadores conectados al cristal.
CKOP
|
CKSEL(3:1)
|
Rango de frecuencia (MHz
|
Rango recomendado para condensadores (pF)
|
1
|
101*
|
0,4 – 0,9
|
–
|
1
|
110
|
0,9 – 3,0
|
12 – 22
|
1
|
111
|
3,0 – 8,0
|
12 – 22
|
0
|
101, 110, 111
|
1,0-16,0
|
12 – 22
|
* Este modo sólo se utiliza para resonador cerámico.
Para CKOPT=0, los bits CKSEL (3:1) se seleccionan de la siguiente manera:
Fig. 1: Imagen que muestra las puntas de fusible seleccionadas
Para una frecuencia de cristal externo de 12 MHz, CKSEL (3:1) se establece en 111.
Brocas fusibles, continuación
SUT (1:0) (hora de inicio)
Este bit se utiliza para configurar el tiempo de arranque del ATmega16. La combinación de los bits SUT (1:0) y CKSEL0 se utiliza para seleccionar el tiempo de inicialización del controlador. La siguiente tabla muestra las combinaciones de bits para seleccionar el tiempo de arranque.
CKSEL0
|
SU(1:0)
|
No. de relojes de inicio
|
Retraso de reinicio adicional
|
Uso recomendado
|
0
|
00
|
258 coronas
|
4,1 ms
|
Resonador cerámico, potencia de impulso rápido.
|
0
|
01
|
258 coronas
|
65ms
|
Resonador cerámico, potencia que aumenta lentamente.
|
0
|
10
|
1kk
|
–
|
Resonador cerámico, habilitado para DBO
|
0
|
11
|
1kk
|
4,1 ms
|
Resonador cerámico, potencia de impulso rápido.
|
1
|
00
|
1kk
|
65ms
|
Resonador cerámico, potencia que aumenta lentamente.
|
1
|
01
|
16KK
|
–
|
Oscilador de cristal, BOD habilitado
|
1
|
10
|
16KK
|
4,1 ms
|
Oscilador de cristal, rápido
poder creciente
|
1
|
11
|
16KK
|
65ms
|
Oscilador de cristal, potencia que aumenta lentamente.
|
BODEN (activación de detección de oscurecimiento)
ATmega16 tiene detección de caída de tensión y monitorea continuamente el nivel de Vcc con un nivel de disparo fijo. Este fusible se utiliza para activar/desactivar la unidad de detección de cortes de energía. Para habilitar la unidad BOD, el bit BODEN se establece (0).
BODLEVEL (nivel de detección de atenuación)
Esta punta de fusible se utiliza para establecer el nivel de disparo de la unidad BOD. El voltaje del disparador se establece en 2,7 voltios si el bit BODLEVEL no está configurado (1). Si este bit de fusible está programado (0), el nivel de disparo se establecerá en 4,0 voltios.
BOOTRST (restablecimiento del cargador de arranque)
BootLoader es un pequeño programa escrito en un área específica de la memoria flash. Este programa se ejecuta en el momento de la inicialización del controlador. Si el bit BOOTRST está establecido (0), el dispositivo saltará al primer bloque de la dirección del gestor de arranque.
BOTASZ (1:0)
Este fusible se utiliza para configurar el tamaño del gestor de arranque. El valor predeterminado de estos bits es '00', que establece el tamaño de inicialización en 1024 palabras. Este tamaño se asigna en la memoria flash. El gestor de arranque siempre reside en la parte inferior de la memoria flash.
Figura 2: Imagen que muestra el posicionamiento del Bootloader con el programa principal
EESAVE (Guardar EEPROM)
Este bit se utiliza para preservar el contenido de la EEPROM durante el borrado del chip. Si el fusible está programado (0), la EEPROM conserva su contenido; de lo contrario, no se conservará durante el borrado del chip.
SPIEN (Habilitación de programación en serie SPI)
Si este bit está establecido (0), la programación serial SPI del controlador está habilitada. Para deshabilitar la programación serial, este bit se deja sin programar (1).
JTAGEN (habilitar JTAG)
Hay una unidad JTAG integrada en el ATmega16, que está prehabilitada en el microcontrolador en blanco. Para deshabilitar JTAG, el bit JTAGEN no debe estar programado (1). (Consulte Cómo desactivar JTAG ).
OCDEN (habilitación de depuración en chip)
La depuración en chip se utiliza para ejecutar el programa paso a paso en el hardware para estudiar la señal interna que proporciona información sobre el estado del procesador. Este bit se utiliza para habilitar/deshabilitar la depuración en el chip. Si este bit está establecido (0), entonces se habilita la depuración en el chip.
Hay algunos bits más que no están presentes en el ATmega16, pero que son importantes cuando se utilizan otros circuitos integrados de la serie AVR como el ATmega8. El bit RSTDISBL es muy importante (especialmente en el caso del ATmega8). Al programar este bit, el bit de reinicio se convierte en un pin de E/S general. Cabe señalar que al utilizar el programador SPI, este bit nunca debe programarse. Programar este bit deshabilitaría la programación SPI, ya que todos los programadores SPI usan el pin RESET para programar el microcontrolador (AVR).
Configurando un nuevo microcontrolador
Configurando un nuevo microcontrolador
Un controlador de microcontrolador virgen está configurado con un oscilador RC interno de 1 MHz con un inicio más prolongado y JTAG prehabilitado. Por lo tanto, los bytes del fusible son los siguientes:
Figura 3: Imagen que muestra el estado de los bits de fusible para el microcontrolador en blanco
Para configurar el microcontrolador para alta frecuencia externa con un inicio más prolongado y JTAG desactivado, la configuración de los fusibles se cambia de la siguiente manera.
Figura 4: Imagen que muestra el estado del fusible para alta frecuencia externa con un inicio más prolongado y JTAG desactivado
Consulte JTAG desactivado en la operación de lectura/escritura de bytes de fusible de aprendizaje del AVR utilizando AVRDUDE.