Vous êtes sur la page 1sur 70

LOS MICROCONTROLADORES

AVR DE ATMEL

Curso - Taller
1
M. C. Felipe Santiago Espinosa Abril/ 2013
Objetivo
2
Que el participante conozca la organizacin de los
microcontroladores AVR y utilice los recursos del
ATMega8 para el desarrollo de aplicaciones,
programando en Lenguaje C.
Contenido
3
1. Organizacin de los Microcontroladores AVR
2. Programacin en Lenguaje C
3. Interrupciones Externas, Temporizadores y PWM
4. Informacin Analgica
5. Comunicacin Serial
6. Manejo de LCD y Teclado Matricial
Libro de
Referencia
4
Curso Taller

Los Microcontroladores AVR de ATMEL
Organizacin de los Microcontroladores AVR
1
M. C. Felipe Santiago Espinosa

Abril/2013
Microcontrolador
6
Un Microcontrolador es un Circuito Integrado con
tecnologa VLSI, el cual contiene una Unidad Central de
Procesos (CPU), memoria para cdigo, memoria para
datos, adems de otros recursos necesarios para el
desarrollo de aplicaciones, por lo general con un
propsito especfico.

Un Microcontrolador es de hecho una computadora
completa situada en un nico chip.

Un Microcontrolador tambin suelen ser referidos como
MCU (Micro-Controller Unit).
Organizacin de un
Microcontrolador
Aplicaciones de los MCU
8
Microcontroladores AVR de Atmel
9
Los AVR son dispositivos de alto rendimiento. Sus
caractersticas principales son:
Arquitectura RISC
Arquitectura Harvard
Ejecucin de una instruccin en 1 ciclo de reloj
1 MIPS por 1 MHz
Arquitectura del tipo Registro-Registro, con 32 Registros de
propsito general
Operacin en un rango de voltaje de 1.8 a 5.5 V
Tecnologa de memoria sobresaliente, 3 tecnologas
diferentes en el mismo dispositivo: Flash, EEPROM y SRAM
Microcontroladores AVR de ATMEL
10

La familia de microcontroladores AVR es numerosa, incluye ms de 70
dispositivos que comparten el ncleo, pero difieren en recursos.

XMEGA
megaAVR
tinyAVR
ncleo
AVR
Caractersticas
T
a
m
a

o
AVR: Alf-Egil Bogen, Vegard Wollan, RISC Processor
11
Organizacin
de los AVR
Procesamiento de Instrucciones
12
Fase de Ejecucin
13
El ATMega8
14
Incluye 3 puertos,
todas las terminales
con una funcin
alterna.

PB 8 bits
PC 7 bits
PD 8 bits
Principales caractersticas de un ATMega8
15
Flash para cdigo 8 Kbyte
Programacin in-system
(ISP)
Si
EEPROM para datos 512 Bytes
SRAM para datos 1024 Bytes ADC de 10-bits (canales) 8 (6 en encapsulado PDIP)
Terminales I/O 23 Comparador Analgico Si
Frec. Max. 16 Watchdog Timer Si
Rango de Vcc 2.7-5.5 Oscilador Interno Si
Temporizadores de
16 bits
1
Multiplicador por
Hardware
Si
Temporizadores de
8 bits
2 Fuentes de Interrupcin 19
Canales PWM 3 Interfaz TWI Si
Reloj de Tiempo
Real
Si Interrupciones Externas 2
SPI
Maestro/Esclavo
1
Facilidades para Auto-
Programacin
Si
USART 1 Encapsulados PDIP 28 TQFP 32 MLF 32
Espacios de memoria
16
Archivo de Registros
17
Contiene 32 registros de propsito
general de 8 bits, habilitados para un
acceso rpido.

6 registros pueden ser usados como
apuntadores de 16 bits para
direccionamiento indirecto en el espacio
de datos. Para ello, estos registros se
denominan X, Y y Z.

El registro Z tambin puede usarse como
apuntador a la memoria de programa.

Arquitectura Optimizada para ejecutar
cdigo C compilado.

7 0 Dir.
R0 0x00
R1 0x01
R2 0x02
. . .
R13 0x0D
R14 0x0E
R15 0x0F
R16 0x10
R17 0x11
. . .
X {
R26 (XL) 0x1A
R27 (XH) 0x1B
Y {
R28 (YL) 0x1C
R29 (YH) 0x1D
Z {
R30 (ZL) 0x1E
R31 (ZH) 0x1F
Memoria Flash para el programa
18
Su tamao vara entre los
miembros de la familia AVR.

Est organizada en
palabras de 16 bits porque
la mayora de las
instrucciones utilizan una
palabra.

Para el ATMega8 es de 8
KB, el rango de direcciones
es de 0x000 a 0xFFF.
Vectores de Interrupciones
19
SRAM
Memoria de datos
20
EEPROM
8 bits
Archivo de
Registros
Registros
I/O
SRAM de
propsito
general
32
64
1024
0x000
0x01F
0x020
0x05F
0x060
0x45F
8 bits
0x000
0x1FF
(a) (b)
Son 1120 localidades de 8 bits, incluyen:

- Un Archivo de Registros de 32 localidades.
- 64 Registros I / O.
- 1024 localidades de propsito general.
Memoria SRAM de datos
21
Archivo de Registros
R0
R1
R2
. . .
R29
R30
R31
Registros I/O
0x00
0x01
0x02
. . .
0x3D
0x3E
0x3F
SRAM Interna
0x0060
0x0061
. . .
0x045E
0x045F
Direcciones en el espacio de datos
0x0000
0x0001
0x0002
. . .
0x001D
0x001E
0x001F
0x0020
0x0021
0x0022
. . .
0x005D
0x005E
0x005F
Registros I/O
22
Son 64 Registros e incluyen a los Puertos de Entrada/Salida,
as como registros para la configuracin, el control y el estado
de los perifricos con que cuenta el ATmega8.
Registro de ESTADO (SREG: 0x3F o 0x5F)
I:


T:


H:

S:

V:

N:

Z:

C:

Habilitador global de Interrupciones,
con un 1 lgico, las interrupciones son habilitadas.

Para respaldo de un bit, se usa con instrucciones de Carga y
Almacenamiento de bits (en ensamblador).

Bandera de acarreo de los 4 bits inferiores (Half)

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

Bandera de Sobreflujo, en operaciones de complemento a dos.

Bandera de Negativo

Bandera de Cero

Bandera de Acarreo
Se generan con operaciones
Aritmticas y lgicas
23
La pila es implementada en el espacio de propsito general (que es de 1024
bytes).

Es usada durante las llamadas de funciones o rutinas para el servicio de
interrupciones.

El registro SP es el apuntador al tope de la pila. Realmente el SP se compone de
2 registros, para la parte alta (SPH) y para la parte baja (SPL), esto para
direccionar al espacio completo de memoria.

La pila tiene un crecimiento hacia abajo, es decir, de las direcciones altas de
memoria a las direcciones bajas.

Al programar en alto nivel, la inicializacin del apuntador y el manejo de la pila
quedarn transparentes al programador.
El Apuntador de Pila (SP)
24
$3E
$3D
25
El compilador intentar almacenar a las variables en registros, sin embargo,
si el nmero de registros no es suficiente emplear a la SRAM de propsito
general.

En bajo nivel se realizarn cargas y almacenamientos. En alto nivel, el
manejo de la memoria queda transparente al programador.
Archivo de Registros
R0
R1
R2
. . .
R29
R30
R31
SRAM Interna
0x0060
0x0061
. . .
0x045E
0x045F
Carga
( ) load, LD
Almacenamiento
( ) store, ST
Acceso al espacio de propsito general
26
El tamao de la EEPROM es de 512 bytes en una ATMega8.

Su acceso requiere de 3 registros I/O:

EEAR - Para la direccin (0x1F, 0x1E).



EEDR - Para el dato (0x1D)


EECR - Para el control (0x1C)



El entorno de desarrollo incluye una biblioteca de funciones para su
manejo.
Acceso a la EEPROM
Bits del registro de CONTROL :
EERIE:



EEMWE:





EEWE:





EERE:
EEPROM Ready Interrupt Enable
En alto habilita la interrupcin por EEPROM. La EEPROM genera
una interrupcin cuando EEWE es limpiado.

EEPROM Master Write Enable
Determina si la puesta en alto de EEWE producir una escritura en
la EEPROM. Al ponerse en alto, se cuenta con 4 ciclos para iniciar la
escritura con EEWE, de lo contrario se limpiar automticamente por
Hardware.

EEPROM Write Enable
Debe ponerse en alto para dar inicio a un ciclo de escritura. Se
limpiar automticamente por Hardware al finalizar la escritura. Un
programa de usuario puede monitorear este bit o si se pone en alto
a EERIE se producir una interrupcin.

EEPROM Read Enable
Debe ponerse en alto para un ciclo de lectura, se limpiar
automticamente por Hardware. El dato ledo est disponible de
manera inmediata. No es posible realizar una lectura si hay una
escritura en proceso.
27
Funcin de Escritura en EEPROM :
// Recibe el dato y la direccin a escribir

void EEPROM_write (unsigned char dato,
unsigned int direccion )
{
// Asegura que no hay escritura en proceso
while ( EECR & 1 << EEWE )
;

// Establece la direccin
EEAR = direccion;

// Coloca el dato
EEDR = dato;

// Pone en alto al habilitador maestro
EECR |= ( 1 << EEMWE );

// Inicia la escritura
EECR |= ( 1 << EEWE );
}
28
Funcin de Lectura en EEPROM :
// Regresa el dato ledo, se recibe la direccin

unsigned char EEPROM_read(unsigned int direccion)
{
// Asegura que no hay una escritura en proceso
while ( EECR & 1 << EEWE)
;
// Establece la direccin
EEAR = direccion;

// Inicia la lectura
EECR |= ( 1 << EERE );

// Regresa el dato
return EEDR;
}
29
Puertos de Entrada/Salida
30
Incluye 3 puertos,
todas las terminales
con una funcin
alterna.

PB 8 bits
PC 7 bits
PD 8 bits
Puertos de Entrada/Salida
31
Para cada puerto se manejan tres registros, dentro del espacio de
registros I/O

PORTx: Un registro de lectura/escritura sobre un lacth, conectado a la
terminal del puerto. En ste se escribe cuando el puerto est
configurado como salida.

DDRx: Un registro de lectura/escritura que define la direccin del
puerto. Las direcciones pueden configurarse de manera independiente,
para cada terminal.
1 Salida
0 Entrada

PINx: Un registro solo de lectura, para hacer lecturas directas en las
terminales de los puertos.

Puertos de
Entrada/Salida
El bit PUD (Pull-Up
disable) est en el
registro SFIOR
(Special Function
IO Register).
32
D Q
Q
CLR
RESET
DDRxn
WDDRx
RDDRx
D Q
Q
CLR
RESET
PORTxn
WPORTx
RPORTx
RPINx
PUD
D D Q Q
Q Q
PINxn
SINCRONIZACIN
SLEEP
clk
I/O
Pxn
B
U
S

D
E

D
A
T
O
S
INTERIOR DEL
MICROCONTROLADOR
Terminal del
Puerto
n
x
Puertos de Entrada/Salida
( Configuraciones )
33
DDRxn PORTxn
PUD
(en SFIOR)
E/S Pull-Up Comentario
0 0 X Entrada No Entrada sin resistor de Pull-Up
0 1 0 Entrada Si Entrada con resistor de Pull-Up
0 1 1 Entrada No Entrada sin resistor de Pull-Up
1 0 X Salida No Salida en bajo
1 1 X Salida No Salida en alto
Registros para el manejo de los puertos
34
7 6 5 4 3 2 1 0
0x18 PORTB7 PORTB6 PORTB5 PORTB4 PORTB3 PORTB2 PORTB1 PORTB0 PORTB
0x17 DDRB7 DDRB6 DDRB5 DDRB4 DDRB3 DDRB2 DDRB1 DDRB0 DDRB
0x16 PINB7 PINB6 PINB5 PINB4 PINB3 PINB2 PINB1 PINB0 PINB
0x15 - PORTC6 PORTC5 PORTC4 PORTC3 PORTC2 PORTC1 PORTC0 PORTC
0x14 - DDRC6 DDRC5 DDRC4 DDRC3 DDRC2 DDRC1 DDRC0 DDRC
0x13 - PINC6 PINC5 PINC4 PINC3 PINC2 PINC1 PINC0 PINC
0x12 PORTD7 PORTD6 PORTD5 PORTD4 PORTD3 PORTD2 PORTD1 PORTD0 PORTD
0x11 DDRD7 DDRD6 DDRD5 DDRD4 DDRD3 DDRD2 DDRD1 DDRD0 DDRD
0x10 PIND7 PIND6 PIND5 PIND4 PIND3 PIND2 PIND1 PIND0 PIND
Ejemplos
35
1. Muestre el cdigo requerido para configurar los
pines de la parte alta del puerto B como
entradas y los de la parte baja como salidas, y
habilite los resistores de Pull-Up de las 2
entradas ms significativas.

2. Muestre la secuencia de cdigo que configure al
puerto B como entrada y al puerto D como
salida, para luego transferir continuamente la
informacin del puerto B al puerto D.
Programacin en Lenguaje C
2
Curso Taller

Los Microcontroladores AVR de ATMEL
M. C. Felipe Santiago Espinosa

Abril/2013
El microcontrolador puede ser programado en alto nivel o
directamente en Ensamblador.
A nivel Ensamblador, el repertorio de instrucciones del
ATMega8 incluye 128 instrucciones, las cuales estn
organizadas en 5 grupos:
Instrucciones Aritmticas y lgicas (28)
Instrucciones de control de flujo (Bifurcaciones) (34)
Instrucciones de transferencia de datos (35)
Instrucciones para el manejo y evaluacin de bits (28)
Instrucciones especiales (3)

La mayora de las instrucciones son de 16 bits.


Instrucciones
37
Entorno de desarrollo
38
El AVR Studio 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 edicin de programas, la invocacin del
compilador con exhibicin de resultados, su simulacin y
depuracin en lenguaje C.
Herramienta desarrollada
y distribuida libremente
por ATMEL.
El AVRStudio
39
El Compilador de C
40
Avr-GCC es un compilador incluido en una suite
conocida como WinAVR, la cual es parte del
proyecto GNU.
Despus de instalar a la suite, el compilador
ser llamado automticamente desde el
entorno del AVR Studio cada vez que sea
requerido, su uso quedar transparente al
programador.
Adems del compilador, la suite incluye un
conjunto de bibliotecas con funciones enfocadas
a los recursos de los AVR.
El compilador est orientado al estndar ANSI
C, se pueden emplear a todos los elementos
del lenguaje, como tipos de datos y estructuras
de control de flujo.
ISIS de Proteus :

Edicin de Esquemticos
Simulacin Visual de Sistemas
ARES:

Desarrollo de Circuitos
Impresos
Simulador Visual
41
42
Tipo Tamao (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

Tipos de datos
43
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
Definiciones en WinAVR
Variables: Datos que van a ser ledos o escritos continuamente. La
SRAM es el espacio de almacenamiento por default.

unsigned char x, y;
unsigned int a, b, c;

Si es posible, el compilador utilizar los registros de propsito 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;

pcad = cadena;
44
Datos en SRAM
Constantes: Datos que no cambiarn durante la ejecucin normal de
un programa.

Si las constantes se manejan en memoria FLASH se liberarn
espacios significativos de SRAM. til para cadenas de texto o tablas
de bsqueda (arreglos con constantes).

Se requiere el uso de la palabra reservada const e incluir al atributo
PROGMEM, definido en la biblioteca pgmspace.h (en WinAVR).

Ejemplos de declaraciones:

const char cadena[] PROGMEM = Cadena con un mensaje constante;
const unsigned char tabla[] PROGMEM = { 0x24, 0x36, 0x48, 0x5A, 0x6C };

45
Datos en Flash
La declaracin de constantes debe hacerse en un mbito global.

Para el acceso se utilizan las funciones de la biblioteca pgmspace.h

Ejemplos:

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 direccin del dato en FLASH.

x = pgm_read_byte(&tabla[i]);
Datos en FLASH
46
Es posible el manejo de apuntadores, un apuntador a datos en
memoria FLASH se declara como PGM_P.

La biblioteca incluye funciones que trabajan con bloques completos
de memoria FLASH.

strcpy_P: Sirve para leer una cadena de memoria FLASH y
depositarla en SRAM.

char buf[32]; // Buffer destino, en SRAM
PGM_P p; // Apuntador a memoria FLASH

p = cadena; // p apunta a la cadena en FLASH
strcpy_P(buf, p); // copia de FLASH a SRAM


47
Datos en FLASH
Las variables en las que se requiera conservar su contenido an en
ausencia de energa, debern almacenarse en la EEPROM.

Deber utilizarse el atributo EEMEM, definido en la biblioteca eeprom.h,
tambin en WinAVR.

Son declaraciones globales y se deben hacer antes de cualquier
declaracin enfocada hacia la SRAM.

#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 . . .
48
Datos en EEPROM
El acceso a los datos en la EEPROM se puede realizar con los
registros EEAR, EEDR y EECR (ver seccin anterior).

Sin embargo, en la biblioteca eeprom.h se cuenta con funciones
para realizar el acceso, ejemplos:

eeprom_read_byte: Lee un byte de la EEPROM, en la direccin que
recibe como argumento.

eeprom_write_byte: Escribe un byte en la EEPROM, como
argumentos recibe la direccin y el dato.

Tambin se incluyen funciones para datos de 16 y 32 bits, as como
para el manejo de bloques de memoria.

49
Datos en EEPROM
30
z *= 12; equivale a z = z * 12;
k /= 2; equivale a k = k / 2;
Operadores y expresiones
Operadores Aritmticos
Operador Descripcin Ejemplo
* Multiplicacin a*b
/ Divisin a/b
% Mdulo (residuo) a % b
+ Suma a + b
- Resta a - b
Operadores de Asignacin
Operador Descripcin Ejemplo
= Asignacin
simple
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
Una expresin es una combinacin de variables y operadores.
Una proposicin es una expresin finalizada con ;
Una proposicin compuesta o bloque debe encerrarse en llaves { }
50
51
Operadores de Incremento/Decremento
Operador Descripcin Ejemplo
++ Incremento a++, ++a
-- Decremento a--, --a
En una expresin simple es
equivalente:

a++; <-> ++a;

Sin embargo:
b = a++; // copia e incrementa
b = ++a; // incrementa y copia

Operadores Relacionales
Operador Descripcin Ejemplo
< Menor que a < b
> Mayor que a > b
<= Menor o igual
que
a <= b
>= Mayor o igual
que
a >= b
== Igual a == b
!= Diferente (no
igual)
a != b
El resultado de aplicar un operador
relacional es: verdadero o falso.

Los operadores relacionales se
ocupan en estructuras selectivas y
repetitivas.

El lenguaje considera al 0 como
falso y cualquier valor diferente de
0 como verdadero.

31
Operadores
Operadores Lgicos (entre expresiones)
Operador Descripcin Ejemplo
&& AND lgico a && b
|| OR lgico a || b
! NOT lgico ! a
Para hacer expresiones complejas
combinando expresiones simples.

Cada expresin simple ser
verdadera o falsa. Por lo que la
expresin resultante tambin ser:
verdadera o falsa.
Operadores para la manipulacin de bits
Operador Descripcin Ejemplo
& AND bit a bit a & b
| OR bit a bit a | b
^ OR exclusivo bit a bit a ^ b
<< Desplazamiento a la
izquierda (llena con
ceros)
a = a << 2
>> Desplazamiento a la
derecha
(llena con ceros)
a = a >> 2
~ Complemento a 1 a = ~b
Las variables son
secuencias de 1s y 0s.

Con estos operadores
se revisan las variables
bit a bit para generar
informacin diferente.

En los AVR se emplean
para evaluar o
modificar un bit, sin
considerar los dems
(mscaras).

52
31
Operadores
Operador ternario
Expresin1 ? Expresin2 : Expresin3;

Otros Operadores de Asignacin
Operador Descripcin Ejemplo
&= 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
Los operadores de
manipulacin de bits
tambin se pueden
combinar para hacer
asignaciones en forma
simplificada.
nico operador con 3 operandos. Se revisa la Expresin1, si es
verdadera se ejecuta la Expresin 2, pero si es falsa se
ejecutar la Expresin3.
53
54
Precedencia y asociatividad de operadores
OPERADORES ASOCIATIVIDAD
( ) [ ] -> Izquierda a derecha
! ~ ++ -- * & (tipo) sizeof (unarios) Derecha a izquierda
* / % Izquierda a derecha
+ - Izquierda a derecha
<< >> Izquierda a derecha
< <= > >= Izquierda a derecha
== != Izquierda a derecha
& Izquierda a derecha
^ Izquierda a derecha
| Izquierda a derecha
&& Izquierda a derecha
|| Izquierda a derecha
?= Derecha a izquierda
= += -= *= /= %= &= ^= |= <<= >>= Derecha a izquierda
13
La programacin estructurada es el conjunto de tcnicas que
incorporan: Diseo descendente, Recursos Abstractos y
Estructuras.

Esto significa que:

Todo programa tiene un diseo modular
Cada mdulo se disea con la metodologa descendente
Cada mdulo se codifica utilizando las estructuras de
control bsicas
Secuenciales
Selectivas
Repetitivas
(ausencia total de GOTO)
Programacin Estructurada
55
13
En un programa estructurado slo existen dos maneras de
combinar las estructuras de control y son apilndolas y
anidndolas.
Anidadas
Apiladas
Traslapadas
Programacin Estructurada
56
Estructuras de Control
Pseudocdigo:
accin_1
accin_2

accin_n
Diagrama de flujo: Cdigo
// Ejemplos
a = conta + 5;
x = y + z;
contador++;
Seleccin Simple
Pseudocdigo: Diagrama de flujo: Cdigo
si(condicin)
acciones
fin_si
if(expresin)
Proposicin

Secuenciales
57
Pseudocdigo: Diagrama de flujo: Cdigo
Seleccin Mltiple
Pseudocdigo: Diagrama de flujo: Cdigo
Seleccin Doble
si(condicin)
acciones1
si_no
accione2
fin_si
if(expresin)
proposicin1
else
proposicin2
Segn_sea (expresin)
valor1: acciones1
valor2: acciones2
. . .
valorn: accionesN
Otros valores:
otras_acciones
fin_segun
switch (expresin){
case exp-const:
proposiciones
case exp-const:
proposiciones
default:
proposiciones
}
58
Pseudocdigo: Diagrama de flujo: Cdigo
Repetitiva por Condicin (hacer-mientras)
Pseudocdigo: Diagrama de flujo: Cdigo
Repetitiva por Condicin (mientras)
mientras(condicin)
acciones
fin_mientras
hacer
acciones
mientras(condicin)
do
proposicin

while(expresin);
while(expresin)
proposicin
59
Pseudocdigo:
Diagrama de flujo:
Cdigo
Repetitiva por Contador
para init mientras cond con [inc|dec]
acciones
fin_para
for (expr1; expr2; expr3)

proposicin
Generalmente la expresin 1 es una inicializacin, la expresin 2 es una
condicin y la expresin 3 es un incremento o decremento.

Una estructura Repetitiva por Contador debe utilizarse cuando se conoce de
antemano el nmero de veces que se repetir la proposicin.
60
1. Empiece con el diagrama de flujo ms simple
2. Cualquier rectngulo de accin puede ser
remplazado por dos rectngulos de accin en
secuencia.
3. Cualquier rectngulo de accin puede ser
sustituido por cualquier estructura de control.
4. Las reglas 2 y 3 pueden ser aplicadas tan
frecuentemente como se desee y en cualquier
orden.
Reglas para crear programas estructurados:
61
Prcticas de Evaluacin
62
M. C. Felipe Santiago Espinosa
Enero/ 2013

Sistemas Mecatrnicos
Proceso de Desarrollo
63
1. Planteamiento del problema
2. Diseo del Hardware (en papel)
3. Diseo del Software (Diagrama de Flujo)
4. Desarrollo del Software (AVRStudio)
5. Simulacin Visual (Proteus)
6. Programacin del Microcontrolador e
Implementacin del Hardware
7. Evaluacin de resultados
8. Correcciones
1. Parpadeo de un LED
Realice un programa que haga parpadear un LED conectado
en la terminal PB0, considerando segundo encendido y
segundo apagado.
64
El WinAVR incluye a la biblioteca <util/delay.h>, la cual cuenta con funciones para
retrasos:

_delay_us(double_ms)
_delay_ms(double_ms)

Para una adecuada operacin, se debe indicar la frecuencia de operacin del
MCU:

#define F_CPU 1000000UL

Para _delay_ms(double_ms), el retraso mximo es de 262.14 ms/F_CPU, con la
frecuencia en MHz.
Construya una ALU de 4 bits utilizando un ATMega8: Los
operandos se deben leer en el puerto B (nibble bajo para
un operando y nibble alto para el otro operando), el
resultado se debe generar en el puerto D y con los 3 bits
menos significativos del puerto C se debe definir la
operacin.
65
PortC[2:0] Operacin
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
2. Diseo de una ALU de 4 bits
Desarrolle un programa que lea los 4 bits menos
significativos del Puerto D [PD3:PD0] y genere su cdigo
en 7 segmentos en el Puerto B.
66
3. Decodificador de binario a 7 segmentos
Desarrolle un programa que continuamente revise el
estado de un BOTN conectado en el bit 0 del Puerto D,
si el botn es presionado, se debe incrementar un
contador binario que se mostrar en el Puerto B.

Inicialmente la salida deber tener el valor de 0.

Nota: Al presionar un botn, el usuario tarda entre 200 y
300 ms, que contrasta con las operaciones del MCU, las
cuales estn en el orden de S.

67
4. Contador de eventos
Combine los ejercicios 3 y 4 para que el contador de
eventos genere las salidas en 7 segmentos.

El valor mximo del contador ser 15 (en el display se
mostrar F) y de ah iniciar nuevamente en 0.
68
5. Contador de eventos con salida en un display de 7
segmentos
69
Ejercicios
1. Implemente un sistema que maneje 2 semforos con los 3
colores bsicos (Rojo, Amarillo y Verde), siguiendo la
secuencia de tiempos mostrada en la tabla siguiente:








Para el parpadeo en el color verde, considere medio
segundo encendido y medio segundo apagado.
Rojo1 Amarillo1 Verde1 Rojo2 Amarillo2 Verde2 Tiempo (Seg)
1 0 0 0 0 1 10
1 0 0 0 0 parpadeo 5
1 0 0 0 1 0 5
0 0 1 1 0 0 10
0 0 parpadeo 1 0 0 5
0 1 0 1 0 0 5
70
2. Disee un decodificador de 3 a 8, es decir, un circuito que
reciba 3 entradas y active slo una de 8 salidas,
manejando lgica positiva.

3. Realice un comparador de dos datos de 4 bits (A y B),
tomando ambas entradas en el puerto B, nibble bajo para
A y nibble alto para B. Genere tres salidas en el puerto C,
activando una a la vez, cuando A > B, A == B A < B.

4. Codifique los nombres de los integrantes del equipo en 7
segmentos e implemente un circuito con un display y un
botn, cuando el circuito se encienda muestre en el
display la primera letra, cada vez que el botn se presione
avance para mostrar el carcter siguiente. Una vez que se
alcance el final, inicie nuevamente con el primer carcter.

Vous aimerez peut-être aussi