El Microcontrolador
ATMega328P
M. C. Felipe Santiago Espinosa
Instituto de Electrónica y Mecatrónica
Cubículo 19
Octubre/2019
Contacto: [email protected]
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 y ahora de Microchip.
2
TEMAS
1. El microcontrolador
2. Programación en alto nivel
3. Recursos internos
i. Interrupciones externas
ii. Interrupciones por cambios en los pines
iii. Temporizadores
iv. Convertidor Analógico-Digital
v. Comunicación Serial
vi. Interfaz SPI
vii. Interfaz TWI
3
HERRAMIENTAS DE DESARROLLO
Si tienen Windows XP o Win-7 lo conveniente es usar el
entorno AVR-Studio, versión 4.18.
Editor, simulador y Suite que incluye al
ensamblador (AVR-asm). compilador AVR-gcc.
Instalando ambos programas, desde el AVR-Studio es
posible la edición de programas e n le n gu aj e C , la
invocación del compilador con exhibición de resultados, así 4
como la simulación y depuración de aplicaciones.
HERRAMIENTAS DE DESARROLLO
Con Windows 8 ó 10, lo mejor es utilizar el entorno de
Atmel Studiom la versión más reciente es la 7.
Atmel Studio permite trabajar con microcontroladores AVR de 8
bits, así como con dispositivos AVR y ARM de 32 bits.
Incluye al compilador para C/C++ y es completamente compatible
con el estándar ANSI-C. 5
SIMULADOR VISUAL
Facilidades de Proteus :
• Edición de Esquemáticos
• Simulación Visual de Sistemas
• Diseño de Circuitos Impresos
6
PROGRAMACIÓN DEL MICROCONTROLADOR
1. Programador Universal
2. ATMel AVR STK-500
3. AVR Dragon
7
4. Programador USBasp
5. Programador USB ISP
9
6. La Tarjeta Arduino puede ser un programador para los AVR, básicamente se
debe considerar:
• El "sketch" a descargar en Arduino es ArduinoISP y está en los ejemplos
incluidos en el entorno.
• La conexión Arduino One -Microcontrolador es:
Arduino One ATMega328P
10 RST (1)
11 MOSI (17)
12 MISO (18)
13 SCK (19)
• Ejecutar el programa avrdude en línea de comandos, por ejemplo:
c:\...\avrdude -p m328p -P com19 -b 19200 -c avrisp -U flash:w:nom_archivo.hex
Avrdude es parte de WinAvr, la ayuda para las opciones se obtiene con -? o se
puede obtener en el sitio: http://www.ladyada.net/learn/avr/avrdude.htm, fue hecho
para Linux y por ello se maneja en línea de comandos, pero se pueden descargar 10
interfaces gráficas que facilitan su uso.
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 11
El Microcontrolador
ATMega328P
TEMA 1
EL MICROCONTROLADOR
M. C. Felipe Santiago Espinosa
Octubre / 2019
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).
13
APLICACIONES DE LOS MCU
14
Crecimiento en el mercado
15
15
Microprocesadores y Microcontroladores
Aunque los microprocesadores y microcontroladores son
dispositivos con algunas similitudes, existen diferencias
importantes entre ellos:
• Microprocesadores • Microcontroladores
• Es una Unidad Central de • Además de la CPU,
Procesamiento en un contiene: RAM, ROM,
circuito integrado. interfaz serial, interfaz
paralela, manejo de
interrupciones,
temporizadores, etc. Todo
en un circuito integrado.
16
Limitantes en un Microcontrolador
MCU (gama baja) µP
Velocidad de
20 MHz ~ GHz
procesamiento
Capacidad de 8 kB (instrucciones)
~Terabytes
direccionamiento 1 kB (datos)
8 bits
Tamaño de los Palabras de 32 o 64
Manejo directo de 1
datos bits
bit
17
APLICACIONES
• Microprocesadores • Microcontroladores
Los microprocesadores son Los microcontroladores
comúnmente usados como CPU desempeñan actividades
en las computadoras. orientadas a control.
También se encuentran en Son la base para los Sistemas
sistemas con procesamiento
intensivo, como consolas de Embebidos.
juegos o equipo de video de alta Sistemas con un proceso único o
definición. tarea principal bajo ejecución.
Además, se encuentran en las Sus limitaciones no son una
SBC (Single Board Computer). restricción para este tipo de
Generalmente están en sistemas aplicaciones.
multitareas.
18
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 concuerrencia en los
forma concurrente.
recursos, su atención por la
CPU será secuencial.
19
Microcontroladores v.s. FPGA’s
La principal ventaja de los MCU’s con respecto a
los FPGA’s es que el tiempo para el desarrollo de
una aplicación es mucho menor con un MCU que
con un FPGA.
En contraparte, un microcontrolador puede ser
descrito y “personalizado” dentro de un FPGA.
Emplear uno u otro dispositivo dependerá de la
aplicación a desarrollar.
20
¿QUÉ ELEGIR PARA UN SISTEMA?
1. Evaluar si un MCU de gama baja es suficiente para
administrar al sistema.
2. Si se requiere de más velocidad o capacidad de
direccionamiento, la alternativa es un MCU con más
prestaciones o una SBC.
3. Si se va a hacer un procesamiento aritmético
intensivo, puede optarse por un procesador digital
de señales (DSP, Digital Signal Processor).
4. Cuando se requiera de un hardware especializado, a
la medida del sistema, que trabaje a altas
velocidades y con módulos concurrentes, la mejor
opción es el uso de un FPGA.
21
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
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.
22
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
23
23
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 25
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 50 dispositivos que comparten el núcleo, pero difieren en
recursos.
26
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
27
27
ASPECTO EXTERNO
ATMEGA328
Incluye 3 puertos, todas las terminales con más de una
función alterna.
PB – 8 bits 28
PC – 7 bits
PD – 8 bits
Núcleo AVR
29
INTERIOR DEL MICROCONTROLADOR (ATMEGA328P)
30
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.
31
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.) 32
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.
33
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.
34
AVR CPU CORE
Mapa de memoria
35
Memoria de Programa
0x0000 Memoria Flash de 32 Kbytes (16 K
16 bits
x 16 bits), en el ATMega328P.
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.
36
Memoria de Datos
SRAM EEPROM 37
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.
38
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. 39
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.
40
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 41
– C: Bandera de Acarreo
41
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.
42
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.
43
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 de SRAM)
RD
El acceso a memoria requiere de un ciclos de
44
reloj adicional.
PUERTOS DE ENTRADA/SALIDA
Incluye 3 puertos, todas las terminales con más de una función alterna.
45
PB – 8 bits
PC – 7 bits
PD – 8 bits
Puertos de Entrada/Salida
Se requiere de tres registros I/O para el manejo de cada puerto:
DDRx: Registro que define la dirección del puerto con el
apoyo de un buffer de 3 estados. Las direcciones se pueden
configurar de manera independiente, para cada terminal.
1 – Salida
0 – Entrada
PORTx: Registro conectado a la terminal del puerto a través
del buffer de 3 estados, en PORTx se escribe cuando el
puerto está configurado como salida. Si el puerto es entrada
sirve para habilitar un resistor de Pull-Up.
PINx: Si el puerto es entrada, este registro sirve para hacer
lecturas directas en las terminales. Cuando es salida, al
escribir un 1 lógico se conmuta el valor almacenado.
46
Puertos de Entrada/Salida
El bit PUD (Pull-Up
disable) está en el
registro MCUCR (MCU 47
Control Register).
47
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
48
Puertos de Entrada/Salida
( Configuraciones )
DDRxn PORTxn PUD E/S Pull-Up Comentario
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
49
EJEMPLOS:
1. Muestre el código requerido para configurar la
parte alta del puerto B como entradas y la parte
baja como salidas, y habilite los resistores de
Pull-Up de las 2 entradas más significativas.
2. 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.
50
El Microcontrolador
ATMega328P
TEMA 2
PROGRAMACIÓN EN ALTO NIVEL
M. C. Felipe Santiago Espinosa
Octubre de 2019
PROCESO DE PROGRAMACIÓN
52
¿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.
53
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. 54
55
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
55
56
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
56
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
57
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.
58
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 59
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
60
-- 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++;
61
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
62
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 63
}
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);
64
ELEMENTOS DEL LENGUAJE
Repetición por Contador:
Expresión1
F
Expresión2
Expresión3 V
Proposición
for (expr1; expr2; expr3)
proposición
65
66
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_t x, y;
int a, 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; 66
pcad = cadena;
67
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 };
67
68
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]);
68
69
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 . . .
69
70
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.
70
EJEMPLO 1. PARPADEO DE UN LED
• Realice un programa que haga parpadear un LED conectado en la
terminal PB0 a una frecuencia aproximada de 1 Hz (periodo de 1
seg.), considerando un ciclo útil del 50 % (½ seg. encendido y ½ seg.
apagado).
71
EJEMPLO 2. DISEÑO DE UNA ALU DE 4 BITS
Construya una ALU de 4 bits considerando la distribución de puertos de la
figura y el comportamiento mostrado en la tabla:
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
72
EJEMPLO 2. DISEÑO DE UNA ALU DE 4 BITS
73
EJEMPLO 3. CONTADOR CON SALIDA EN 7 SEGMENTOS
Desarrolle un programa que incremente la salida cada
que se presiona un botón:
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
Considere un arreglo de constantes en D 1 0 1 1 1 1 0 0x5E
Flash para los códigos en 7 segmentos. E 1 1 1 1 0 0 1 0x79
74
F 1 1 1 0 0 0 1 0x71
EJEMPLO 3. CONTADOR CON SALIDA
EN 7 SEGMENTOS
El valor del contador se debe mantener 75
entre 0 y 15.
EJEMPLO 4. MÁQUINA DE ESTADOS PARA
UNA PUERTA AUTOMÁTICA
Sensor Objetivo PortD[1:0] Operación
SP Detector de personas 00 Sin movimiento
TA Puerta completamente abierta 01 Abriendo la puerta
TC Puerta completamente cerrada 10 Cerrando la puerta
11 Sin movimiento
76
EJEMPLO 4. MÁQUINA DE ESTADOS
PARA UNA PUERTA AUTOMÁTICA
77
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á llamada
si no se detecta un botón presionado.
Implementar y documentar los resultados. 78