Está en la página 1de 78

El Microcontrolador

ATMega328P

M. C. Felipe Santiago Espinosa

Instituto de Electrónica y Mecatrónica


Cubículo 19
Octubre/2019

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 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

También podría gustarte