Tutorial de Configuración de Fusibles Para AVR
-
Upload
issac-andrade -
Category
Documents
-
view
334 -
download
29
description
Transcript of Tutorial de Configuración de Fusibles Para AVR
![Page 1: Tutorial de Configuración de Fusibles Para AVR](https://reader035.fdocuments.ec/reader035/viewer/2022072106/55cf9363550346f57b9d69cb/html5/thumbnails/1.jpg)
Página 1
Tutorial de configuración de Fusibles para AVR.
A lo que llama ATMEL como fusibles o fuses son aquellas localidades a las que se puede acceder
para determinar ciertas características del microcontrolador, p.e:
Proteger el código
Habilitar el WatchDog
Habilitar el modo de programación
Habilitar si se va ha trabajar con cristal externo, oscilador, etc.
Antes de comenzar es preciso especificar los dos fusibles que existen Hfuse y Lfuse (High Fuse y
Low Fuse). Los cuales encontramos en las hojas de datos de cada dispositivo. En la sección
“Memory Programmin”, hay dos tablas que especifican los bits de Hfuse y Lfuse, que pueden
variar entre un dispositivo y otro.
Algunos Software’s no piden el valor de Hfuse y Lfuse, en lugar de ello piden directamente el valor
de cada bit por lo que se muestran aquí los valores.
Nota: Un CERO indica que el bit esta habilitado, un UNO indica que el bit esta deshabilitado (lógica
inversa), para las casillas el CERO es y el UNO es . Y las tablas mostradas tienen los valores de
fábrica de cada dispositivo.
Los bits destacados en amarillo no es recomendable alterarlos y mas adelante se explica porque.
Nótese que algunos bits de cada tabla varían, a continuación se explican todos los bits en general
para las dos tablas. Las tablas para otro componente de la familia AVR se encuentran en sus hojas
de datos.
Para el caso del ATMEGA48, ATMEGA88 y ATMEGA138
Para el caso del ATMEGA8, ATMEGA8515 y ATMEGA8535
Bit No
LowFuse HighFuse Bit No
LowFuse HighFuse
7 CHKDIV8 RSTDISBL 7 BODLEVEL RSTDISBL/S85xxC
6 CKOUT DWEN 6 BODEN WDTON
5 SUT1 SPIEN 5 SUT1 SPIEN
4 SUT0 WDTON 4 SUT0 CKOPT
3 CKSEL3 EESAVE 3 CKSEL3 EESAVE
2 CKSEL2 BODLEVEL2 2 CKSEL2 BOOTSZ1
1 CKSEL1 BODLEVEL1 1 CKSEL1 BOOTSZ0
0 CKSEL0 BODLEVEL0 0 CKSEL0 BOOTRST
HFuse=0xDF LFuse=0x62
HFuse=0xD9 LFuse=0xE1
![Page 2: Tutorial de Configuración de Fusibles Para AVR](https://reader035.fdocuments.ec/reader035/viewer/2022072106/55cf9363550346f57b9d69cb/html5/thumbnails/2.jpg)
Página 2
Programar los bits de Hfuse.
El valor de los bits RSTDISBL=1 (Deshabilitado de RESET) y DWEN=1 (Debug WIRE Enable),
especificado de fábrica, si se alteran estos valores poniendo un 0, ya no se va a poder comunicar
con el microcontrolador ya que requiere un modo de programación llamado de alto voltaje.
El pin 1, para el caso del ATMEGA8, ATMEGA48, ATMEGA88 y ATMEGA138, es pin de RESET, pero
también es el PC6, el cual casi nunca se utiliza como entrada o salida, su función normalmente es
la de RESET, si queremos utilizar este pin como parte del puerto C, entonces hay que habilitar el
RSTDISBL, con un 0 (recordemos que el cero habilita el bit), esto implica que el microcontrolador
ya no podrá ser reprogramado ya que deshabilitado el RESET es imposible comunicarse con el.
El microcontrolador utiliza las terminales SPI (MOSI, MISO y SCK), para programarlo, por lo cual el
bit SPIEN=0, esto significa que esta habilitado en este modo.
WDTON (watch dog o perro guardián), es un timer de vigilancia el cual al llegar a su cuenta
máxima provoca un RESET. Entonces en el programa se ponen ciertas instrucciones de refresco las
cuales reinicializan al timer para evitar que llegue a su cuenta máxima. Este sistema se utiliza
donde existe el ruido eléctrico o algún elemento que pueda ciclar al microcontrolador. El valor por
defecto de fabrica para WDTON=1, para mantenerlo deshabilitado, si cambiamos este valor
asignando un 0 y no ponemos las instrucciones de refresco el microcontrolador se estará ejecutara
un RESET constantemente.
Así que el valor de WDTON=1 amenos que la aplicación lo requiera.
El bit CKOPT=1 (Opciones del Oscilador), el valor de este bit depende de los bits CKSEL3, CKSEL2,
CKSEL1 y CKSEL0, que se encuentran en Lfuse.
El bit S85XXC (solo para el caso ATMEGA8515 y ATMEGA8535), habilita un modo de
compatibilidad con sus predecesores el AT90S8515 y el AT90S8535.
Para todas las programaciones de Hfuse debe quedar así: RSTDISBL=1, DWEN=1, SPIEN=0,
WDTON=1 (tal como se muestran los valores resaltados en amarillo), al menos en la parte alta de
Hfuse.
Al programar al microcontrolador se hace un borrado de la memoria FLASH y de la memoria
EEPROM ya que al reprogramar al microcontrolador ya no nos interesa lo que hay en ninguna de
las dos memorias, pero si queremos conservar los datos de la EEPROM entonces se debe poner el
bit EESAVE=0, el valor de fabrica en EESAVE=1.
BODLEVEL2=1, BODLEVEL1=1 y BODLEVEL0=1, (solo para el ATMEGA48, ATMEGA88 y
ATMEGA138), estos bits son para generar un RESET por bajo voltaje. Esto es muy importante
porque si el voltaje de suministro del microcontrolador baja considerablemente se pueden alterar
las localidades de la memoria EEPROM y puede provocar que se ejecute instrucciones erróneas de
código.
![Page 3: Tutorial de Configuración de Fusibles Para AVR](https://reader035.fdocuments.ec/reader035/viewer/2022072106/55cf9363550346f57b9d69cb/html5/thumbnails/3.jpg)
Página 3
Siempre es importante modificar el BODLEVEL al voltaje que mas convenga y sobretodo cuando
se este utilizando la EEPROM interna.
En la siguiente tabla se muestran los valores para modificar los bits de BODLEVEL.
BODLEVEL 2:0 Fuses Min VBOT Typ VBOT Max VBOT Units
111 BOD Disabled
110 1.7 1.8 2.0
V 101 2.5 2.7 2.9
100 4.1 4.3 4.5
011
Reserved 010
001
000
De la tabla anterior vemos que si estamos trabajando con 5V, nos conviene poner los valores de
los bits así: BODLEVEL2=1, BODLEVEL1=0, BODLEVEL0=0. Esto significa que habrá un RESET cuando
el voltaje caiga por debajo de los 4.3V.
Los bits BOOTSZ1=0 y BOOTSZ0=0 (solo para el ATMEGA8, ATMEGA8515 y ATMEGA8535),
seleccionan el tamaño del BOOTLOADER, de la siguiente tabla.
BOOT SZ1
BOOT SZ0
Boot Size
Pages Applic. Flash
Section
Boot Loader Flash
Section
End Applic. Section
Boot Reset Address (Start Boot Loader
Section)
1 1 128
Words 4
0x000-0xF7F
0xF80-0xFFF 0xF7F 0xF80
1 0 256
Words 8
0x000-0xEFF
0xF00-0xFFF 0xEFF 0xF00
0 1 512
Words 16
0x000-0xDFF
0xE00-0xFFF 0xDFF 0xE00
0 0 1024
Words 32
0x000-0xBFF
0xC00-0xFFF 0xBFF 0xC00
Los valores de fábrica para estos bits son los que determinan el Boot Size más grande, en la última
columna se muestra la dirección del RESET en caso de que BOOTRST estuviera activado.
Con esta tabla finaliza la programación de los bits de Hfuse.
![Page 4: Tutorial de Configuración de Fusibles Para AVR](https://reader035.fdocuments.ec/reader035/viewer/2022072106/55cf9363550346f57b9d69cb/html5/thumbnails/4.jpg)
Página 4
Programar los bits de Lfuse.
El bit CHKDIV8=0, y el CKOUT=1, (solo para el ATMEGA48, ATMEGA88, y ATMEGA138), determinan
el comportamiento del oscilador interno, CHKDIV8 habilita el divisor interno de la señal de Reloj. El
oscilador interno RC esta calculado a 8MHZ, pero el bit CHKDIV8 esta activado por lo tanto la
frecuencia de trabajo es de 1MHZ, es posible deshabilitar este bit para aumentar la velocidad de
trabajo (evitando la división entre 8).
CKOUT=1, (esta deshabilitado), este bit permite sacar la señal de Reloj a través del pin B0, esto
para sincronizarse con otro microcontrolador.
BODLEVEL=1 y BODEN=1 (solo para el ATMEGA8, ATMEGA8515 y ATMEGA8535), como ya se había
mencionado antes BODLEVEL determina un RESET por bajo voltaje, si BODLEVEL=1, el voltaje al
que ocurre el RESET es de 2.7V, si BODLEVEL=0, este voltaje es de 4v. BOEN habilita a BODLEVEL,
el valor de fábrica es 1, desactivado.
Finalmente los bits STU1, STU0, CKSEL3, CKSEL2, CKSEL1 y CKSEL0 son los que determinan el
oscilador, que puede ser Oscilador Externo, Cristal Oscilador, Oscilador Interno, etc. A demás
sirven para asegurar un encendido correcto. Suponiendo que la fuente de alimentación de 5V es
lenta en la respuesta de 0 a 5V en el encendido, necesitamos prepara al microcontrolador con un
“Slow rising power”, si la fuente es rápida en el cambio de 0 a 5V en el encendido, entonces es
necesario un “Fast rising power”.
Fuentes de Reloj. Normalmente con la familia de microcontroladores AVR, solo se utiliza el
oscilador interno o un cristal oscilador. La conexión del cristal oscilador es la siguiente.
En la siguiente tabla se muestran las opciones de fuente de reloj disponibles y la configuración de
CKSEL.
Device Clocking Option CKSEL3..0
External Crystal/Ceramic Resonator 1111 – 1010
External Low-frequency Crystal 1001
External RC Oscillator 1000 – 0101
Calibrated Internal RC Oscillator 0100 – 0001
External Clock 0000
![Page 5: Tutorial de Configuración de Fusibles Para AVR](https://reader035.fdocuments.ec/reader035/viewer/2022072106/55cf9363550346f57b9d69cb/html5/thumbnails/5.jpg)
Página 5
De la tabla anterior se obtiene que para utilizar un cristal oscilador el valor de CKSEL3:0 debe ser
de 1111 – 1010, el más apropiado lo encontramos en otra tabla.
CKOPT CKSEL3:1 Frecuency Range
(MHz) Recommended Range for Capacitors C1 and C2 for Use with Crystals (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
El último valor de la tabla es el que muestra en rango mas amplio de frecuencia para trabajar con
cristal oscilador, además nos da el valor de CKOPT de Hfuse. Ahora este dato nos ofrece tres
posibles valores para CKSEL3:1. Solo falta el valor de CKSEL0, STU1 y STU0, estos valores están en
la siguiente tabla.
CKSEL0 STU1:0 Start-up Time from Power-down and
Power-save
Additional Delay from Reset
(VCC = 5.0V) Recommended Usage
0 00 258 CK 4.1 ms Ceramic resonator, fast rising power
0 01 258 CK 65 ms Ceramic resonator, slowly rising power
0 10 1K CK - Ceramic resonator, BOD enabled
0 11 1K CK 4.1 ms Ceramic resonator, fast rising power
1 00 1K Ck 65 ms Ceramic resonator, slowly rising power
1 01 16K CK - Crystal Oscillator, BOD enabled
1 10 16K CK 4.1 ms Crystal Oscillator, fast rising power
1 11 16K CK 65 ms Crystal Oscillator, slowly rising power
Finalmente los tres últimos valores de la tabla nos indican el valor de CKSEL0 y STU1:0,
dependiendo si tenemos el BOD habilitado o si queremos un “Fast Rising Power” o “Slow Rising
Power”.
![Page 6: Tutorial de Configuración de Fusibles Para AVR](https://reader035.fdocuments.ec/reader035/viewer/2022072106/55cf9363550346f57b9d69cb/html5/thumbnails/6.jpg)
Página 6
Ejemplo: Supongamos que tenemos una aplicación en donde se utilizara un ATMEGA8535, con un
cristal externo de 16MHZ, con una fuente que tarda en alcanzar los 5V, y no nos interesa lo que
este almacenado en la memoria EEPROM.
HFuse S8535C WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST
C9 1 1 0 0 1 0 0 1
LFuse BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
FD 1 1 1 1 1 1 0 1
Ejemplo: Supongamos que tenemos una aplicación en donde se utilizara un ATMEGA48, con un
cristal externo de 16MHZ sin división interna, queremos activar el RESET por bajo voltaje, no nos
interesa lo que este almacenado en la memoria EEPROM y no necesitamos sacar la señal de reloj
para sincronizar con otro dispositivo.
HFuse RSTDISBL DWEN SPIEN WDTON EESAVE BODLEVEL2 BODLEVEL1 BODLEVEL0
C9 1 1 0 1 1 1 0 0
LFuse CKDIV8 CKOUT SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0
DD 1 1 0 1 1 1 0 1