Sie sind auf Seite 1von 11

Configuracin de un AVR con reloj externo JLB

ndice
Introduccin...............................................................................................................................................3
Fusible Alto (hfuse)....................................................................................................................................4
Fusible Bajo (lfuse)....................................................................................................................................5
Definicin de los bytes hfuse:lfuse............................................................................................................6
Hardware....................................................................................................................................................7
Programacin.............................................................................................................................................8
Compilacin...............................................................................................................................................9
Simulacin...............................................................................................................................................10
Referencias bibliogrficas........................................................................................................................11
Configuracin de un AVR con reloj externo JLB
Configuracin de un AVR con reloj externo JLB

Introduccin
Los fusibles son una parte de la memoria del microcontrolador, que son reservadas para ciertas
funciones que determinan la manera en la que trabajar el microcontrolador, por ejemplo:

Si tiene boot loader.


Velocidad y voltaje de trabajo.
Condiciones del temporizador Watch Dog.
Deteccin de Brown out.

Los fusibles no son accesibles por medio del programa, solamente pueden ser cambiados por un
dispositivo programador de microcontroladores. Los bits de los fusibles difieren para cada variante de
AVRs, por lo que, en este documento nos centraremos en el Atmega8.
Para explicarlo de manera simple, consideremos que slo existen dos tipos de fusibles: el fusible
alto (hfuse) y el fusible bajo (lfuse), algunos microcontroladores tienen un fusible adicional llamado
extendido (efuse). Un bit de fusible no programado tiene un estado lgico alto 1, programando el
fusible cambiar su estado a nivel bajo 0.
Configuracin de un AVR con reloj externo JLB

Fusible Alto (hfuse)


La siguiente tabla muestra la descripcin y el valor en que se encuentran los bits del byte alto:
BOOTRST: Si este bit se programa (escribiendo 0),
despus de encender el MCU o establecer un RESET, el
programa comienza desde la seccin del boot loader. Si
usamos boot loader, el bit debe ser habilitado. Si
simplemente cargamos nuestro programa, dejamos ste sin
programar.
BOOTSZ0 y BOOTSZ1: Son importantes si usamos boot
loader para seleccionar el tamao.
EESAVE: Si el bit es programado (escribiendo 0) el
contenido de la memoria EEPROM es intocable durante el
borrado del chip.
*CKOPT: Se utiliza para seleccionar las opciones del reloj.
SPIEN: Se utiliza para deshabilitar el modo de
programacin serial ISP. Slo se puede programar con un
voltaje de programacin alto, no por modo serial.
WDTON: Si lo programamos, el temporizador estar
siempre encendido y el chip sufrir reset peridicamente,
si no tenemos cuidado.
RSTDSBL: Se utiliza para deshabilitar la funcionalidad de
reset; lo cual no se recomienda. Slo se puede programar
con un voltaje de programacin alto, no por modo serial.
*Bit que usaremos para programar la frecuencia del reloj del MCU.
Configuracin de un AVR con reloj externo JLB

Fusible Bajo (lfuse)


Para determinar el contenido del byte bajo, la siguiente tabla muestra la descripcin y el valor en
que se encuentran inicialmente los bits:
**CKSEL0 a CKSEL3: Se utilizan para seleccionar las
opciones del reloj.
**SUT0 y SUT1: Usualmente las seales de reloj
requieren de tiempo adicional despus de que se enciende
el MCU, para proporcionarnos una buena seal.
BODEN: Generalmente est deshabilitado. Se utiliza para
evitar que, cuando el voltaje de alimentacin es menor del
requerido, el microcontrolador funcione mal. Si est
habilitado y el voltaje baja, el chip se apaga de manera
segura y cuando el voltaje se estabiliza, el chip vuelve a
comenzar el programa.
BODLEVEL: Por ejemplo, si el MCU funciona a 3.3v,
podemos poner el nivel BOD a 2.7v. De tal manera que si
el voltaje baja de este nivel, el MCU se apaga de manera
segura.
**Son los bits que usaremos para programar la
frecuencia del reloj del MCU.
Configuracin de un AVR con reloj externo JLB

Definicin de los bytes hfuse:lfuse


A partir de la explicacin anterior y debido a que slo estamos configurando las caractersticas del
reloj, los bits que programaremos son los marcados en la siguiente figura:
hfuse

RSTDISBL WDTON SPIEN CKOPT EESAVE BOOTSZ1 BOOTSZ0 BOOTRST

lfuse

BODLEVEL BODEN SUT1 SUT0 CKSEL3 CKSEL2 CKSEL1 CKSEL0

La configuracin de los dems fusibles


permanecer intacta. Si cambiamos por
error los valores de los otros bits, el MCU
puede daarse.
La tabla de la derecha muestra que si
vamos a usar un cristal externo, los valores
de CKSEL0 a CKSEL3 estn en el rango de
valores binario 1111 a 1010. Para escoger el
valor exacto, consultamos la tabla 4 que
define los modos de operacin del cristal.
De esa tabla escogemos CKOPT=0,
debido que se usa para valores de alta
frecuencia (mayores a 1 Mhz). De la misma
tabla, los valores para CKSEL sern:
CKSEL3 = 1
CKSEL2 = 1
CKSEL1 = 1

Para obtener los valores de CKSEL0,


SUT0 y SUT1 consultamos la tabla 5. Como
utilizaremos un cristal, nuestra seleccin se
reduce a los ltimos tres renglones, adems
como no habilitamos BOD y queremos un
tiempo lento de subida, escogemos la opcin
de 65ms; por lo tanto los valores de los
restantes bits queda como:
CKSEL0 = 1
SUT0 = 1
SUT1 = 1

Por lo tanto, la definicin de los bits tanto para el byte alto como el bajo queda como:
hfuse lfuse

1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1
Valor en hexadecimal = 0xC9 Valor en hexadecimal= 0xFF
Configuracin de un AVR con reloj externo JLB

Hardware
El cristal de cuarzo debe ser conectado como muestra la figura 11. Para lo cual requerimos,
adicionalmente de dos capacitores cermicos en el rango de valores de 12 a 22 pf. Dichos valores se
especifican en la hoja de datos del MCU y en este documento, en la tabla 4.
Si usamos el Arduino como programador, las conexiones debern realizarse como se muestra en la
tabla y en la figura de abajo.

Arduino AVR
5v Vcc
GND GND
D11 MOSI
D12 MISO
D13 SCK
D10 RESET

Arduino como programador


Configuracin de un AVR con reloj externo JLB

Programacin
Usando Arduino como programador o algn otro dispositivo para programar AVR, conectamos las
seales de la interfaz a 4 hilos (MOSI, MISO, SCK y RESET) del programador hacia el AVR y en la
lnea de comandos ejecutamos:

avrdude -P COM3 -b 19200 -c avrisp -p ATMEGA8 -U lfuse:w:0xFF:m -U hfuse:w:0xC9:m

En este comando debemos tomar en cuenta los parmetros particulares para cada caso:
COM3: es el puerto que asigna el sistema operativo al Arduino.
ATMEGA8: es el microcontrolador al que vamos a modificar los fusibles.

Finalmente, al ejecutar el comando, los bits (fuse bits) del MCU quedarn programados para que
dicho microcontrolador funcione a 16Mhz.
Si, por alguna razn, queremos regresar a la configuracin de fbrica, es decir, oscilador interno a
1Mhz, el comando a ejecutar ser:

avrdude -P COM3 -b 19200 -c avrisp -p ATMEGA8 -U lfuse:w:0xE1:m -U hfuse:w:0xD9:m

Tomando los valores de fbrica de las tablas 87 y 88 de este documento, a su vez, tomadas de la
hoja de datos del atmega8; los valores que de cada bit quedaran como indica la tabla:

hfuse lfuse

1 1 0 1 1 0 0 1 1 1 1 0 0 0 0 1
Valor en hexadecimal = 0xD9 Valor en hexadecimal= 0xE1
Configuracin de un AVR con reloj externo JLB

Compilacin
Cuando cambiamos la frecuencia de operacin del microcontrolador, la funcin delay incluida
en la librera del mismo nombre, ya no corresponder con el tiempo establecido; es decir si usamos la
funcin _delay_ms(200); los 200 milisegundos de retardo esperados, ya no ser dicho retardo. Para
definir la nueva frecuencia y lograr que la funcin delay mantenga la relacin de tiempo, debemos
hacer lo siguiente:

Entrar a la opcin Project nombre del proyecto


Properties.

Al seleccionar, aparece otra ventana. En sta, nos


ubicamos en Toolchain AVR/GNU C Compiler
Symbols.

En el lado derecho de la
ventana anterior damos
click en el cono de
agregar (+), escribimos el
valor de la frecuencia y
damos OK.

Con sto queda completado el proceso para que nuestro compilador tome en cuenta el valor de la
frecuencia definida del CPU y mantenga la relacin de tiempo en la funcin delay.

Es importante recalcar que los tiempos generados por los temporizadores (TIMERs) del
microcontrolador, debern calcularse con el nuevo valor de la frecuencia.
Configuracin de un AVR con reloj externo JLB

Simulacin
Para que el simulador PROTEUS tome en cuenta el valor de la frecuencia, deben llevarse a cabo
los siguientes cambios y adiciones, adems del ya descrito en el apartado anterior para el compilador:

Agregar el circuito para el cristal de


cuarzo externo, con los valores de los
capacitores recomendados en la tabla 4
de este documento.

Dar click en el componente del


microcontrolador y modificar los
valores marcados en la figura, los
cules corresponden a la definicin de
los bits realizada para el byte alto y
bajo.

hfuse lfuse

1 1 0 0 1 0 0 1 1 1 1 1 1 1 1 1
Valor en hexadecimal = 0xC9 Valor en hexadecimal= 0xFF
Configuracin de un AVR con reloj externo JLB

Referencias bibliogrficas
[1] Avr Fuse Basics: Running an Avr With an External Clock: 6 Steps, Instructables.com. [En
lnea]. Disponible en: http://www.instructables.com/id/Avr-fuse-basics-Running-an-avr-with-an-
external-cl/. [Consultado: 02-may-2017].
[2] Atmel Coroporation, Atmega8 DataSheet. 2013.

Das könnte Ihnen auch gefallen