Está en la página 1de 73

El Microcontrolador

ATMega328P

M. C. Felipe Santiago Espinosa

Instituto de Electrónica y Mecatrónica


Cubículo 19
Octubre/2018

Contacto: fsantiag@mixteco.utm.mx
OBJETIVO

 Que el alumno conozca los microcontroladores,


su organización y programación en un lenguaje
de alto nivel, para entender cómo se emplean
estos dispositivos en el desarrollo de sistemas
electrónicos.

 Específicamente se revisará al ATMega328P,


microcontrolador de la familia AVR,
originalmente de ATMEL, aunque ahora
pertenece a Microchip.

2
TEMAS

1. El microcontrolador
2. Programación en alto nivel
3. Recursos internos
4. Interfaz y control de periféricos externos
5. Desarrollo de sistemas

3
HERRAMIENTAS DE DESARROLLO

Herramienta desarrollada y distribuida libremente por


ATMEL.

La versión 4.18 trabaja adecuadamente con Windows XP y


7. Para versiones más nuevas de windows es conveniente
obtener la versión 5, 6 o 7 (ahora se llama Atmel Studio). 4
 El AVR Studio 4.18 únicamente incluye al programa
ensamblador (AVRASM), sin embargo, proporciona
las facilidades para enlazarse con compiladores de
lenguaje C desarrollados por alguna fuente diferente
a ATMEL.

 Instalando al compilador adecuado, desde el mismo


entorno será posible la edición de programas, la
invocación del compilador con exhibición de
resultados, simulación y depuración en lenguaje C.

 El Atmel Studio ya incluye un compilador de C/C++.

5
EL AVRSTUDIO
EL COMPILADOR DE C

 Avr-GCC es un compilador incluido en una suite conocida como


WinAVR, la cual es parte del proyecto GNU.
 Después de instalar a la suite, el compilador es llamado
automáticamente desde AVR Studio.
 Además del compilador, la suite incluye un conjunto de
bibliotecas con funciones enfocadas a los recursos de los AVR.
 El compilador está orientado al estándar ANSI C, se pueden
emplear a todos los elementos del lenguaje, como tipos de datos
y estructuras de control de flujo.
7
SIMULADOR VISUAL

ISIS de Proteus :

• Edición de Esquemáticos
• Simulación Visual de Sistemas

ARES:

• Desarrollo de Circuitos
Impresos

8
BIBLIOGRAFÍA
Libros básicos:

 Los Microcontroladores AVR de Atmel / Felipe Santiago


Espinosa; México: Universidad Tecnológica de la Mixteca, 2012.
ISBN: 978-607-95222-7-8.
 Programming and Customizing the AVR
Microcontroller / Dhananjay V. Grade; New York, N. Y.:
McGraw-Hill , 2001. ISBN: 0-07-134666-X.

Libros complementarios:

 ATMega328 : AVR RISC Microcontroller, Datasheet, Atmel


Corporation (http://www.atmel.com)
 The AVR Microcontroller and Embedded System, using
assembly and C / Muhamad Ali Mazidi, Sarmad Naimi, Sepehr
Naimi; United States of America: Prentice Hall, 2011. ISBN-10:
0-13-800331-9.
 Make: AVR Programming / Elliot Williams, 2014, Printed in
the United States of America. Published by Maker Media, ISBN:
978-1-449-35578-4 9
El Microcontrolador
ATMega328P

TEMA 1
EL MICROCONTROLADOR

M. C. Felipe Santiago Espinosa

Octubre / 2018
MICROCONTROLADOR
Es un Circuito Integrado con tecnología VLSI que contiene una
Unidad Central de Procesamiento (CPU), memoria para código,
memoria para datos, además de otros recursos necesarios para el
desarrollo de aplicaciones, por lo general con un propósito específico.
Un microcontrolador es de hecho una computadora completa situada
en un chip. También se le refiere como MCU (Micro -Controller Unit).

11
APLICACIONES DE LOS MCU

12
Uso de los Microcontroladores

13

13
Microprocesadores y Microcontroladores

Aunque son dispositivos con algunas similitudes, existen


diferencias importantes entre ellos:

• Microprocesadores • Microcontroladores
• Es una Unidad Central • Además de la CPU,
de Procesamiento en un contiene: RAM, ROM,
circuito integrado. interfaz serial, interfaz
paralela, manejo de
interrupciones,
temporizadores, etc.
Todo en un circuito
integrado.
14
Limitantes en un Microcontrolador

MCU (típico) µP
Velocidad de
16 MHz ~ GHz
procesamiento
8 kB – 32 kB
Capacidad de
(instrucciones) ~Terabytes
direccionamiento
1 kB (datos)
8 bits
Tamaño de los Palabras de 32 o
Manejo directo de
datos 64 bits
bits

15
APLICACIONES

Microprocesadores Microcontroladores
 Los microprocesadores son  Son la base para los sistemas
comúnmente usados como la embebidos, como hornos de
CPU de una computadora. microondas, cajas registradoras,
cámaras fotográficas, etc.
 También se encuentran en
sistemas de procesamiento
intensivo como Consolas de  En un Sistema Embebido, el
Video Juegos y Smart MCU administra recursos e
Phones. interactúa con el usuario.

 Son la base para sistemas de  El MCU y la complejidad de su


propósito general. manejo queda oculto al usuario.

 Varios procesos bajo ejecución.  Sólo un proceso en ejecución.


16
Microcontroladores v.s. FPGA’s

FPGA Microcontroladores
• Bloques e interconexiones • Unidades funcionales bien
configurables, es posible definidas.
diseñar sistemas a medida. • El programa determina el
• El programa define al comportamiento del hardware.
hardware.
• Un programa se ejecuta en
• En un sistema, los diferentes
forma secuencial, aunque
módulos pueden operar en
exista concurrencia en los
forma concurrente.
recursos, su atención por la
• En un FPGA se puede CPU será secuencial.
modelar un MCU.
• Es más rápido obtener
resultados.
17
CLASIFICACIÓN DE LOS MCU’S

 Por la arquitectura del procesador: RISC o CISC.

 Por el tamaño de los datos, se tienen microcontroladores de


4 bits, de 8 bits, de 16 bits y hasta de 32 bits.

 Con base en cómo se organiza la memoria de código y datos,


se tienen 2 modelos Arquitectura Von Neumann y
Arquitectura Harvard.

 Por su capacidad de expansión: Un MCU puede tener una


Arquitectura Abierta (acondicionado para el uso de
memoria externa) o una Arquitectura Cerrada.
18
 Por la forma en que la CPU tiene acceso a los datos y ejecuta cada
instrucción, se tienen cuatro modelos básicos:

 Pila (propósitos didácticos)


 Acumulador
 Registro-Memoria
 Registro-Registro (Carga-Almacenamiento)

Operación: C = A - B

A, B y C son variables, se encuentran en memoria de datos.

Pila: Acumulador: Registro-Memoria: Registro-Registro:

Push A Mov Acc, A Load Rx, A Load Rx, A


Push B Sub Acc, B Sub Rx, B Load Ry, B
Sub Mov C, Acc Store C, Rx Sub Rx, Ry
Pop C Store C, Rx

19

19
MICROCONTROLADORES
POPULARES
Organización de un
microcontrolador

Ent/Sal Ent/Sal
Digitales Analógicas

Temporizador/
Contador
CPU
Oscilador Perro guardián
(Watchdog timer)
Memoria
de Programa
Puerto Serie
(UART)
Vcc Memoria
de Datos
Otros
Recursos

Gnd

Bus de Datos
de 8 bits 21
MICROCONTROLADORES AVR
DE ATMEL

 Arquitectura RISC de 8 bits.

 Arquitectura Harvard, con memoria Flash para código, SRAM y


EEPROM para datos.

 Su Arquitectura es Cerrada.

 Por la operación con los datos, la arquitectura es del tipo


Registro-Registro.

 La familia de microcontroladores AVR es muy numerosa, incluye


más de 70 dispositivos que comparten el núcleo, pero difieren en
recursos.
22
EL ATMEGA328P
Sus características técnicas se resumen a continuación:

Flash (Kbytes) 32 TWI Si


EEPROM (bytes) 1K ISP Si
SRAM de propósito ADC de 10 bits 8 (6 en encapsulado
2048
general (bytes) (canales) PDIP)
Max Pines I/O 23 Comparador Analógico Si

F.max (MHz) 20 Watchdog Timer Si


Vcc (V) 2.7-5.5 Oscilador Interno Si
16-bit Timers 1 Multiplicador por Hardware Si
8-bit Timer 2 Interrupciones 26
PWM (canales) 6 Int. Externas 2
RTC Si Int. Por cambios en Pines 3 (una por puerto)
USART 1 Autoprogramación Si
SPI (Maestro/Esclavo) 1 Debug wire Si

23

23
ASPECTO
EXTERNO
ATMEGA328P

Incluye 3 puertos,
todas las terminales
con más de una
función alterna.

PB – 8 bits
PC – 7 bits
PD – 8 bits

24
AVR CPU CORE

25
INTERIOR DEL MICROCONTROLADOR (ATMEGA328)

26
AVR CPU CORE
 La arquitectura Harvard maximiza el rendimiento y
paralelismo en la ejecución de instrucciones.
 La CPU tiene acceso a las memorias, realiza cálculos,
controla periféricos y maneja interrupciones.
 El Contador del Programa (PC, Program Counter) contiene la
dirección de la instrucción que se está ejecutando.
 Se actualiza automáticamente para avanzar entre instrucciones.
 El Registro de Instrucción (IR, Instruction Register) mantiene
una instrucción durante su ejecución.
 Una instrucción es una secuencia de 1's y 0's que se identifica
por un campo conocido como el opcode o código de operación.

27
AVR CPU CORE

 Las instrucciones son ejecutadas con una segmentación de


dos etapas: Cuando una instrucción se ejecuta, se captura la
siguiente.
 La ALU realiza las operaciones Aritmético-Lógicas, pudiendo
operar con:
 Un solo registro (INC, DEC, etc.)
 Dos registros (ADD, OR, etc.)
 Registro-Constante (ANDI, SUBI, etc.)
 El registro de Estado (SREG) contiene banderas que se
actualizan después de cada operación con la ALU.
 Las banderas indican si el resultado fue cero, si se generó
acarreo, etc.) 28
SEGMENTACIÓN

T1 T2 T3 T4 T5

CLK CPU

Instrucción 1 Captura Ejecuta

Instrucción 2 Captura Ejecuta

Instrucción 3 Captura Ejecuta

Instrucción 4 Captura Ejecuta

Rendimiento aproximado a 1 MIPS por MHz.

29
ARCHIVO DE REGISTROS
 32 registros de 8 bits, todos de propósito 7 0 Dir.
general. R0 0x00
R1 0x01
R2 0x02
 Los registros R26 a R31 pueden ser ...
apuntadores de 16 bits, para R13 0x0D
R14 0x0E
direccionamiento indirecto en el espacio R15 0x0F
de datos. Se denominan X, Y y Z. R16 0x10
R17 0x11
...
 El registro Z también puede usarse X {
R26 (XL) 0x1A
como apuntador a la memoria de R27 (XH) 0x1B
R28 (YL) 0x1C
programa. Y {
R29 (YH) 0x1D
R30 (ZL) 0x1E
Z {
R31 (ZH) 0x1F
 Arquitectura Optimizada para ejecutar
código C compilado.
30
AVR CPU CORE
Mapa de memoria

31
Memoria de Programa

0x0000  Memoria Flash de 32 Kbytes (16 K


16 bits
x 16 bits), en el ATMega328.

Sección de Aplicación  Soporta hasta 10,000 ciclos de


escritura/borrado.

 Se puede dividir en dos secciones:


sección de arranque y sección de
aplicación.

 Los vectores de interrupción son


Sección de Arranque
son parte de la memoria de
0x3FFF programa, se trata de un conjunto
de direcciones que puede tomar el
PC después de un evento.
32
Memoria de Datos

SRAM EEPROM 33
Memoria SRAM de Datos

 Es un espacio de 2304 localidades de 8


bits e incluyen:

 32 Registros de acceso rápido.


 64 Registros I / O.
 160 Registros I/O extendidos.
 2048 Localidades de propósito general.

34
Los 32 registros de acceso rápido y los registros I/O tienen
direcciones para ser tratados como SRAM de propósito general.
Registros I/O

 El ATMega328 puede alojar hasta 64 Registros I/O de 8


bits (no todas las direcciones están ocupadas).

 Los Registros I/O se emplean para la configuración y el


control de recursos internos, así como para conocer su
estado.

 Por ejemplo, en este espacio están los registros para el


manejo de los Puertos de Entrada/Salida.

 El acceso a los Registros I/O se realiza con las instrucciones


IN y OUT.

 Si son tratados como memoria debe usarse las


instrucciones LD (carga) y ST (almacenamiento), aunque
es menos eficiente. 35
Registros I/O Extendidos
 Son Registros I/O mapeados en memoria SRAM.

 El ATMega328 deja disponibles 160 localidades, aunque la


mayoría están libres.

 Únicamente se pueden tratar con instrucciones de carga (LD)


y almacenamiento (ST) (direcciones 0x60 - 0xFF).

 Como un ejemplo, los registros de los Temporizadores son


parte de los Registros I/O Extendidos.

 Los Registros I/O y Registors I/O Extendidos determinan el


comportamiento de los diferentes recursos.

 La lista completa se puede consultar en la Hoja de


Especificaciones del microcontrolador.
36
Registro de ESTADO (SREG: 0x3F)
Bit

Read/Write
Valor inicial

– I: Habilitador global de Interrupciones,


con un 1 lógico, las interrupciones son habilitadas.

– T: Para respaldo de un bit, es usado con la instrucción BLD para


Carga y BST para Almacenamiento.

– H: Bandera de acarreo de los 4 bits inferiores (Half)

– S: Bit de signo (Mantiene una XOR entre N y V)

– V: Bandera de Sobreflujo, en operaciones de complemento a dos.

– N: Bandera de Negativo

– Z: Bandera de Cero Se generan con operaciones


Aritméticas y lógicas 37
– C: Bandera de Acarreo
37
Apuntador de Pila (SP)
$3E
$3D

 La pila está implementada en el espacio de propósito general (que es


de 2048 bytes).

 La pila es usada durante:


 Llamadas a subrutinas
 Manejo de interrupciones
 Almacenamiento temporal de variables (PUSH y POP).

 La pila tiene un crecimiento hacia abajo, es decir, de las direcciones


altas de memoria a las direcciones bajas.

 SP es el apuntador al tope de la pila, debe ser inicializado con 0x08FF.


38
ACCESO AL ESPACIO DE PROPÓSITO GENERAL

SRAM de Propósito General


Archivo de Registros Carga 0x0100
R0 0x0101
R1 (LD, load) 0x0102
R2 ...
... ...
...
R29 (ST, store)
R30 0x08FD
R31 Almacenamiento 0x08FE
0x08FF

 La arquitectura AVR es del tipo Registro – Registro.

 Existen diversas instrucciones para cargas o


almacenamientos, ya sean de manera directa o
indirecta.
39
ACCESO AL ESPACIO DE PROPÓSITO GENERAL
T1 T2 T3

CLK CPU

Registro IR Captura

Dirección Calcula dirección Dirección válida

Datos Dato a escribir


Almacenamiento
(Escritura en SRAM)
WR

Datos Dato leído


Carga
(Lectura en SRAM)
RD

 El acceso a memoria requiere de un ciclos de


40
reloj adicional.
PUERTOS DE ENTRADA/SALIDA

Incluye 3 puertos, todas las terminales con más de una función alterna.
41
PB – 8 bits
PC – 7 bits
PD – 8 bits
Puertos de Entrada/Salida

 Cada puerto se maneja con tres Registros I/O:

 DDRx: Registro que define la dirección del puerto. La


configuración por terminal es independiente:
 1 – Salida
 0 – Entrada

 PORTx: Registro conectado a la terminal del puerto.


 Su valor se refleja en la terminal, si el puerto es
salida.
 Habilita un resistor de Pull-Up, si el puerto es
entrada.

 PINx: Registro para hacer lecturas directas en las


42
terminales de los puertos.
INTERIOR DEL
MICROCONTROLADOR

DDRxn

RESET

PORTxn
CLR
D
PUD

WDDRx

RDDRx
Puertos de Entrada/Salida

BUS DE DATOS
Pxn Q D

Terminal n del Q
CLR
Puerto x WPORTx
RESET
SLEEP
RPORTx

SINCRONIZACIÓN
RPINx
PINxn

D Q D Q

Q Q

clk I/O

El bit PUD (Pull-Up


disable) está en el
registro MCUCR (MCU
Control Register).
Tiene 0 después de un 43
reset.
Puertos de Entrada/Salida
( Configuraciones )

PUD
DDRxn PORTxn E/S Pull-Up Comentario
(en SFIOR)
0 0 X Entrada No Sin resistor de Pull-Up
0 1 0 Entrada Si Con resistor de Pull-Up
0 1 1 Entrada No Sin resistor de Pull-Up
1 0 X Salida No Salida en bajo
1 1 X Salida No Salida en alto

44
Registros para el manejo de puertos

7 6 5 4 3 2 1 0
0x0B PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
0x0A DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0 DDRB
0x09 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
0x08 - PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 PORTC
0x07 - DDRC6 DDRC5 DDRC4 DDRC3 DDRC2 DDRC1 DDRC0 DDRC
0x06 - PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 PINC
0x05 PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 PORTD
0x04 DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0 DDRD
0x03 PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 PIND

45
EJEMPLO:

1. Muestre la secuencia de código que configure al


puerto B como entrada y al puerto D como
salida, para luego transferir la información del
puerto B al puerto D.

46
El Microcontrolador
ATMega328P

TEMA 2
PROGRAMACIÓN EN ALTO NIVEL

M. C. Felipe Santiago Espinosa

Octubre de 2018
PROCESO DE PROGRAMACIÓN

48
¿ENSAMBLADOR O LENGUAJE C?

 El ensamblador tiene una relación directa con el código máquina


generado. En alto nivel siempre se producirá código adicional.

 Antes de optar por uno u otro lenguaje es conveniente estructurar la


solución.

 Un programa mal organizado es ineficiente, aún si se codifica en


lenguaje ensamblador.

 En alto nivel se tienen estructuras de control de flujo que facilitan la


codificación de soluciones estructuradas.

 El código fuente en alto nivel es más compacto y menos confuso,


reduciendo la posibilidad de cometer errores.

 Con la velocidad de ejecución y la cantidad de memoria de los MCU’s


actuales, el código adicional no tiene un impacto alto en la solución.
49
El lenguaje ensamblador puede ser necesario si:

1. La aplicación requiere un control estricto en la temporización


que no se puede conseguir con los recursos internos.

2. El tamaño de la memoria de código es muy reducido.


 Algunos AVR de la gama Tiny incluyen 1 Kbyte para código.

3. La aplicación requiere una manipulación extensiva de datos al


nivel de bits.

En lenguaje C, con la función asm( ) es posible introducir sentencias


de código ensamblador. Ejemplos:

asm(“NOP”); // No operación, tarda 1 ciclo de reloj


asm(“SBI 0x0B, 0”); // Pone en alto al bit 0 de PORTB

En este curso se trabajará con Lenguaje C. 50


51

TIPOS DE DATOS

Tipo Tamaño (bits) Rango


char 8 -128 a 127
unsigned char 8 0 a 255
signed char 8 -128 a 127
int 16 -32, 768 a 32, 767
short int 16 -32, 768 a 32, 767
unsigned int 16 0 a 65, 535
signed int 16 -32, 768 a 32, 767
long int 32 -2, 147, 483, 648 a 2, 147, 483, 647
unsigned long int 32 0 a 4, 294, 967, 295
signed long int 32 -2, 147, 483, 648 a 2, 147, 483, 647
float 32 +/- 1.175 x 10-38 a +/- 3.402 x 10+38
double 32 +/- 1.175 x 10-38 a +/- 3.402 x 10+38
51
52

DEFINICIONES EN WINAVR

typedef signed char int8_t


typedef unsigned char uint8_t
typedef signed int int16_t
typedef unsigned int uint16_t
typedef signed long int int32_t
typedef unsigned long int uint32_t

52
ELEMENTOS DEL LENGUAJE

OPERADORES
Operador ternario
Aritméticos
Operador Descripción Ejemplo Propocisión1? Proposición2 : Proposición3;

* Producto a*b
/ División a/b
V F
% Módulo a%b Proposición 1

+ Suma a+b
Proposición 2 Proposición 3
- Resta a-b

53
ELEMENTOS DEL LENGUAJE

Operadores para la Operadores Lógicos


Manipulación de bits de Expresiones
Complemento Uno ~ AND &&
Desplazamiento a la Izquierda << OR ||
Desplazamiento a la Derecha >> NOT !
AND &
Tratan a los operandos como
OR |
e x p r e s i o n e s FA L S A S o
OR Exclusiva ^ VERDADERAS.

Trabajan sobre operandos de los tipos: Una variable con cualquier valor
char, int o long. Afectan el resultado al distinto de cero se considera
nivel de bits. verdadera.

54
ELEMENTOS DEL LENGUAJE
Asignaciones
Operador Ejemplo Equivalencia
= a=b a=b
*= a *= b a=a*b
/= a /= b a=a/b
%= a %= b a=a%b
+= a += b a=a+b
-= a -= b a=a-b
<<= a <<= b a = a << b
>>= a >>= b a = a >> b
&= a &= b a=a&b
|= a |= b a=a|b
^= a ^= b a=a^b 55

b puede ser una constante o proposición.


ELEMENTOS DEL LENGUAJE
Operadores Relacionales
Operador Descripción Ejemplo
== Igual a == b
!= Diferente a != b
> Mayor que a>b
< Menor que a<b
>= Mayor o igual que a >= b
<= Menor o igual que a <= b

Auto incremento o decremento

Operador Descripción Ejemplo

++ incremento a++, ++a


56
-- decremento a--, --a
ELEMENTOS DEL LENGUAJE

ESTRUCTURAS DE CONTROL
Dentro de la programación
estructurada se tienen tres tipos
Secuenciales
de Estructuras de Control.
Proposición 1

1. Secuenciales.
2. Selectivas. Proposición 2

3. Repetitivas.
Proposición 3

// Expresiones en secuencia
a = b + c;
. . .
contador++;
57
ELEMENTOS DEL LENGUAJE

ESTRUCTURAS SELECTIVAS
Selección Simple Selección Doble

F V F
Expresión Proposición 1

V
Proposición 2 Proposición 3
Proposición

if(expresión) if(expresión)
Proposición proposición1
else
proposición2
58
ELEMENTOS DEL LENGUAJE

ESTRUCTURA DE SELECCIÓN MÚLTIPLE

= Constante_1 = Default
Expresión
= Constante_2 = Constante_n
= Constante_3
Proposición 1 Proposición 2 Proposición 3 ... Proposición n Prop. Default

switch (expresión){
case Constante_1:
Proposición 1
case Constante_2:
Proposición 2
. . . .
default:
Proposición default 59
}
ELEMENTOS DEL LENGUAJE

ESTRUCTURAS REPETITIVAS
Repetición por Condición:

Proposición
F
Expresión

V V
Expresión

Proposición
F

do {
while(expresión) proposición
proposición } while(expresión);
60
ELEMENTOS DEL LENGUAJE

Repetición por Contador:

Expresión1

F
Expresión2

Expresión3 V

Proposición

for (expr1; expr2; expr3)

proposición
61
62

TIPOS DE MEMORIA
SRAM PARA VARIABLES
Variables: Datos que van a ser leídos o escritos repetitivamente.
La SRAM es el espacio de almacenamiento por default para las
variables.

uint8_tx, y;
inta, b, c;
 
Si es posible, el compilador utilizará los registros de propósito
general (R0 a R31).

Los apuntadores son manejados en SRAM y hacen referencia a


objetos de SRAM, un ejemplo de declaraciones y uso es:

char cadena[] = "hola mundo";


char *pcad; 62
pcad = cadena;
63

FLASH PARA CONSTANTES

Constantes: Datos que no cambiarán durante la ejecución


normal de un programa.

Es conveniente manejar las constantes en memoria FLASH,


para liberar espacio en la SRAM. Útil para cadenas de texto o
tablas de búsqueda.

Requiere el uso de la palabra const y el atributo PROGMEM,


definido en la biblioteca pgmspace.h (en WinAVR).

Ejemplos de declaraciones:
const char cadena[] PROGMEM = “Cadena con un mensaje constante”;
const uint8_t tabla[] PROGMEM = { 0x24, 0x36, 0x48, 0x5A, 0x6C };
 
63
64

FLASH PARA CONSTANTES

Declaración de constantes -> ámbito global.

Acceso -> funciones de la biblioteca pgmspace.h

Funciones para lectura de memoria Flash:

pgm_read_byte(address); // Lee 8 bits


pgm_read_word(address); // Lee 16 bits
pgm_read_dword(address); // Lee 32 bits
 
Reciben como argumento la dirección del dato en FLASH.

x = pgm_read_byte(&tabla[i]);

64
65

EEPROM
Las variables cuyo contenido se quieran conservar aún en
ausencia de energía deberán almacenarse en la EEPROM.

Debe utilizarse el atributo EEMEM, definido en la biblioteca


eeprom.h, también de WinAVR.

Son declaraciones globales, ejemplo:

#include <avr/eeprom.h> //Biblioteca para la EEPROM

EEMEM int contador = 0x1234; // Un entero:2 bytes


EEMEM unsigned char clave[4] = { 1, 2, 3, 4}; // 4 bytes
 
En la EEPROM:

34 12 01 02 03 04 FF FF FF . . .
65
66

ACCESO A LOS DATOS EN LA EEPROM

1) Por medio de los registros EEAR, EEDR y EECR.

2) Funciones en la biblioteca eeprom.h, ejemplos:

• eeprom_read_byte: Lee un byte de la EEPROM, en la


dirección que recibe como argumento.

• eeprom_write_byte: Escribe un byte en la EEPROM, como


argumentos recibe la dirección y el dato.

La biblioteca también incluye funciones para datos de


16 y 32 bits, así como para el manejo de bloques de
memoria.
66
EJEMPLO 1: PARPADEO DE UN LED

• Haga parpadear un LED conectado


en PB0 a una frecuencia de 1 Hz INICIO

(periodo de 1 s), considerando ½ s


encendido y ½ s apagado. PUERTO B
como Salida

ATMEGA8
PB0  1
14
PB0
220  Espera 0.5 Seg.

PB0  0

Espera 0.5 Seg.

67
68

EJEMPLO 2: DECODIFICADOR DE BINARIO A 7 SEGMENTOS


 Desarrolle un programa que lea los 4 bits menos significativos
del Puerto D [PD3:PD0] y genere su código en 7 segmentos en
el Puerto B.
Num g f e d c b a HEX
0 0 1 1 1 1 1 1 0x3F
1 0 0 0 0 1 1 0 0x06
2 1 0 1 1 0 1 1 0x5B
3 1 0 0 1 1 1 1 0x4F
4 1 1 0 0 1 1 0 0x66
5 1 1 0 1 1 0 1 0x6D
6 1 1 1 1 1 0 1 0x7D
7 0 0 0 0 1 1 1 0x07
8 1 1 1 1 1 1 1 0x7F
9 1 1 0 0 1 1 1 0x67
A 1 1 1 0 1 1 1 0x77
B 1 1 1 1 1 0 0 0x7C
C 0 1 1 1 0 0 1 0x39
D 1 0 1 1 1 1 0 0x5E
E 1 1 1 1 0 0 1 0x79
F 1 1 1 0 0 0 1 0x71
69

DECODIFICADOR DE BINARIO A 7 SEGMENTOS

INICIO

PortD como Entrada


PortB como Salida

Dato  PinD & 0x0F

= 0x00 = 0x0F
¿Dato?
= 0x01 = 0x0E
= 0x02

Portb  0x3F Portb  0x06 Portb  0x 5B ... Portb  0x79 Portb  0x71

69
70

EJEMPLO 3: DISEÑO DE UNA ALU DE 4 BITS


 Construya una ALU de 4 bits utilizando un ATMega328P, en donde los
operandos se lean del puerto B (nibble bajo para el operando A y nibble
alto para el operando B), el resultado se genere en el puerto D y con los 3
bits menos significativos del puerto C se defina la operación.

PortC[2:0] Operación
000 R=A+B
001 R=A-B
010 R=A*B
011 R = A AND B
100 R = A OR B
101 a 111 R=0

70
71

DISEÑO DE UNA ALU DE 4 BITS


INICIO

PortB y PortC como Entradas


PortD como Salida

A  PinB & 0x0F


B  ( PinB & 0xF0) >> 4
Op  PinC & 0x07

= “000” otros
¿Op?
= “001” = “100”
= “010” = “011”

R A + B R A - B R A * B R A & B R A | B R0

PortD  R 71
EJEMPLO 4:
CONTADOR DE EVENTOS

Realice un contador de 0 a 9 con salida en un display de 7


segmentos.

ATMEGA328P

a
PB0 a
PB1 b f b
PB2 c g
PD0 d
PB3
e
PB4 e c
f
PB5 g
PB6
d

72
IMPLEMENTACIÓN PRÁCTICA

Realice un contador UP-DOWN de 0 a 99 con salida en dos


displays de 7 segmentos.
ATMEGA328P
a a
PB0 a
UP b
PB1 f b f b
PD0 PB2 c g g
PB3 d
e
PB4 e c e c
f
PB5 g
DOWN PB6
PD1 d d

PC1
PC0

Sug. Con una función alterne el envío de unidades y decenas al puerto B


y habilite su encendido por medio del puerto C. La función será llamana
si no se detecta un botón presionado. 73

También podría gustarte