A lo largo del texto, realizo una descripción del hardware y el software de los
microcontroladores ATMega8 y ATMega16, mostrando cómo los diferentes recursos
de hardware pueden ser manejados en Ensamblador o en Lenguaje C. Éste es un aspecto
interesante, dado que pretendo mostrar las ventajas o inconvenientes de desarrollar
aplicaciones en diferentes niveles de programación. Para todos los recursos internos, he
documentado ejemplos completos, los cuales fueron previamente implementados como
prácticas en la Universidad Tecnológica de la Mixteca.
Dispongo de un capítulo dedicado al manejo de dispositivos externos y concluyo con
la propuesta de una metodología que se puede emplear para construir sistemas con
más requerimientos, la cual ilustro con el desarrollo de dos sistemas relativamente
complejos.
Agradezco a la Universidad Tecnológica de la Mixteca las facilidades para llevar a
cabo la redacción de este libro, deseo sea de utilidad para las futuras generaciones de
ésta y otras instituciones. También agradezco a todos los alumnos y profesores que, de
una u otra manera, colaboraron en la realización y revisión de este texto.
Felipe. Santiago Espinosa
[email protected]
Author(s): Felipe santiago espinosa
Series: 1
Edition: Universidad tecnológica de la mixteca
Publisher: Universidad tecnológica de la mixteca
Year: 2012
Language: Spanish
Pages: 387
City: mexico
Tags: AVR
Índice
Prólogo 13
1. Introducción a los Microcontroladores 15
1.1 Sistemas Electrónicos 15
1.2 Controladores y Microcontroladores 16
1.3 Microprocesadores y Microcontroladores 17
1.4 FPGAs y Microcontroladores 19
1.5 Organización de los Microcontroladores 20
1.5.1 La Unidad Central de Procesamiento (CPU) 21
1.5.1.1 Organización de una CPU 22
1.5.1.2 Tareas de la CPU 24
1.5.2 Sistema de Memoria 24
1.5.3 Oscilador 25
1.5.4 Temporizador/Contador 26
1.5.5 Perro Guardián (WDT, watchdog timer) 27
1.5.6 Puerto Serie 27
1.5.7 Entradas/Salidas Digitales 28
1.5.8 Entradas/Salidas Analógicas 28
1.6 Clasifcación de los Microcontroladores 29
1.7 Criterios para la Selección de los Elementos de Procesamiento 30
1.8 Ejercicios 32
2. Organización de los Microntroladores AVR de ATMEL 35
2.1 Características Generales 35
2.2 El Núcleo AVR 37
2.2.1 Ejecución de Instrucciones 38
2.2.2 Archivo de Registros 39
2.3 Memoria de Programa 40
2.4 Memoria de Datos 42
2.4.1 Espacio de SRAM 43
2.4.1.1 Registros I/O 43
2.4.1.2 SRAM de Propósito General 47
2.4.2 Espacio de EEPROM 48
2.5 Puertos de Entrada/Salida 51
2.6 Sistema de Interrupciones 55
2.6.1 Manejo de Interrupciones 59
2.7 Inicialización del Sistema (reset) 60
2.8 Reloj del Sistema 64
2.8.1 Resonador Cerámico o Cristal Externo 66
2.8.2 Cristal de Baja Frecuencia Externo 66
2.8.3 Oscilador RC Externo 67
2.8.4 Oscilador RC Calibrado Interno 688
2.8.5 Reloj Externo 69
2.9 Modos de Bajo Consumo de Energía 70
2.10 Ejercicios 73
3. Programación de los Microcontroladores 75
3.1 Repertorio de Instrucciones 75
3.1.1 Instrucciones Aritméticas y Lógicas 75
3.1.2 Instrucciones para el Control de Flujo 79
3.1.3 Instrucciones de Transferencia de Datos 82
3.1.4 Instrucciones para el Manejo de Bits 85
3.1.5 Instrucciones Especiales 87
3.2 Modos de Direccionamiento 88
3.2.1 Direccionamiento Directo por Registro 88
3.2.2 Direccionamiento Directo a Registros I/O 89
3.2.3 Direccionamiento Directo a Memoria de Datos 90
3.2.4 Direccionamiento Indirecto a Memoria de Datos 90
3.2.5 Direccionamiento Indirecto a Memoria de Código 92
3.2.6 Direccionamiento Inmediato 93
3.2.7 Direccionamientos en Bifurcaciones 93
3.2.7.1 Bifurcaciones con Direccionamiento Relativo 94
3.2.7.2 Bifurcaciones con Direccionamiento Indirecto 94
3.2.7.3 Bifurcaciones con Direccionamiento Absoluto 95
3.3 Programación en Lenguaje Ensamblador 95
3.3.1 Directiva INCLUDE 96
3.3.2 Directivas CSEG, DSEG y ESEG 96
3.3.3 Directiva DB y DW 97
3.3.4 Directiva EQU 98
3.3.5 Directiva ORG 98
3.3.6 Directivas HIGH y LOW 99
3.3.7 Directiva BYTE 99
3.4 Programación en Lenguaje C 100
3.4.1 Tipos de Datos 100
3.4.2 Operadores Lógicos y para el Manejo de Bits 101
3.4.3 Tipos de Memoria 102
3.4.3.1 Datos en SRAM 102
3.4.3.2 Datos en FLASH 103
3.4.3.3 Datos en EEPROM 104
3.5 Programas de Ejemplo 105
3.5.1 Parpadeo de un LED 105
3.5.2 Decodifcador de Binario a 7 Segmentos 108
3.5.3 Diseño de una ALU de 4 Bits 111
3.6 Relación entre Lenguaje C y Ensamblador 114
3.7 Ejercicios 1169
4. Interrupciones Externas, Temporizadores y PWM 119
4.1 Interrupciones Externas 119
4.1.1 Confguración de las Interrupciones Externas 120
4.1.2 Habilitación y Estado de las Interrupciones Externas 121
4.1.3 Ejemplos de Uso de Interrupciones Externas 122
4.2 Temporizadores 128
4.2.1 Eventos de los Temporizadores 128
4.2.1.1 Desbordamientos 128
4.2.1.2 Coincidencias por Comparación 129
4.2.1.3 Captura de Entrada 130
4.2.2 Respuesta a los Eventos 130
4.2.2.1 Sondeo (Polling) 130
4.2.2.2 Uso de Interrupciones 131
4.2.2.3 Respuesta Automática 131
4.2.3 Pre-escalador 132
4.2.4 Temporización Externa 133
4.2.5 Registros Compartidos por los Temporizadores 134
4.2.6 Organización y Registros del Temporizador 0 136
4.2.6.1 Generación de Formas de Onda con el Temporizador 0 137
4.2.6.2 Respuesta Automática en la Terminal OC0 138
4.2.6.3 Selección del Reloj para el Temporizador 0 138
4.2.7 Organización y Registros del Temporizador 1 139
4.2.7.1 Generación de Formas de Onda con el Temporizador 1 141
4.1.2.1 Respuesta Automática en las Terminales OC1A y OC1B 141
4.2.7.3 Selección del Reloj para el Temporizador 1 142
4.2.7.4 Acceso a los Registros de 16 Bits del Temporizador 1 142
4.1.3 Organización y Registros del Temporizador 2 143
4.2.8.1 Generación de Formas de Onda con el Temporizador 2 146
4.2.8.2 Respuesta Automática en la Terminal OC2 146
4.2.8.3 Selección del Reloj para el Temporizador 2 146
4.2.9 Ejemplos de Uso de los Temporizadores 147
4.3 Modulación por Ancho de Pulso (PWM) 154
4.3.1 Generación de PWM con los Microcontroladores AVR 155
4.3.2 PWM Rápido 156
4.3.3 PWM con Fase Correcta 157
4.3.4 PWM con Fase y Frecuencia Correcta 158
4.3.5 El Temporizador 0 y la Generación de PWM 159
4.3.6 El Temporizador 1 y la Generación de PWM 160
4.3.7 El Temporizador 2 y la Generación de PWM 162
4.3.8 Ejemplos de Uso de las Señales PWM 162
4.4 Ejercicios 165
5. Recursos para el Manejo de Información Analógica 167
5.1 Convertidor Analógico a Digital 167
5.1.1 Proceso de Conversión Analógico a Digital 16710
5.1.2 Hardware para la Conversión Digital a Analógico 169
5.1.3 Hardware para la Conversión Analógico a Digital 169
5.1.3.1 ADC de Aproximaciones Sucesivas 170
5.1.4 El ADC de un AVR 171
5.1.5 Registros para el Manejo del ADC 176
5.1.6 Ejemplos de Uso del Convertidor Analógico a Digital 178
5.2 Comparador Analógico 183
5.2.1 Organización del Comparador Analógico 183
5.2.2 Registros para el Manejo del AC 184
5.2.3 Ejemplos de uso del Comparador Analógico 186
5.3 Ejercicios 189
6. Interfaces para una Comunicación Serial 191
6.1 Comunicación Serial a través de la USART 191
6.1.1 Organización de la USART 192
6.1.1.1 Generación de Reloj y Modos de Operación 193
6.1.1.2 Transmisión de Datos 196
6.1.1.3 Recepción de Datos 197
6.1.2 Transmisión y Recepción de Datos de 9 Bits 198
6.1.3 Comunicación entre Múltiples Microcontroladores 198
6.1.4 Registros para el Manejo de la USART 200
6.1.5 Ejemplos de Uso de la USART 204
6.2 Comunicación Serial por SPI 208
6.2.1 Organización de la Interfaz SPI en los AVR 209
6.2.2 Modos de Transferencias SPI 211
6.2.3 Funcionalidad de la Terminal SS 212
6.2.4 Registros para el Manejo de la Interfaz SPI 214
6.2.5 Ejemplos de Uso de la Interfaz SPI 215
6.3 Comunicación Serial por TWI 222
6.3.1 Transferencias de Datos vía TWI 223
6.3.1.1 Formato de los Paquetes de Dirección 223
6.3.1.2 Formato de los Paquetes de Datos 224
6.3.1.3 Transmisión Completa: Dirección y Datos 224
6.3.2 Sistemas Multi-Maestros 225
6.3.3 Organización de la Interfaz TWI 227
6.3.3.1 Terminales SCL y SDA 227
6.3.3.2 Generador de Bit Rate 227
6.3.3.3 Unidad de Interfaz con el Bus 228
6.3.3.4 Unidad de Comparación de Dirección 228
6.3.3.5 Unidad de Control 228
6.3.4 Registros para el Manejo de la Interfaz TWI 229
6.3.5 Modos de Transmisión y Códigos de Estado 232
6.3.5.1 Modo Maestro Transmisor 232
6.3.1.1 Modo Maestro Receptor 234
6.3.5.4 Modo Esclavo Receptor 23611
6.3.5.4 Modo Esclavo Transmisor 239
6.3.5.5 Estados Misceláneos 241
6.3.6 Ejemplos de Uso de la Interfaz TWI 241
6.4 Ejercicios 248
7. Recursos Especiales 251
7.1 Watchdog Timer de un AVR 251
7.1.1 Registro para el Manejo del WDT 252
7.2 Sección de Arranque en la Memoria de Programa 253
7.2.1 Organización de la Memoria Flash 254
7.2.2 Acceso a la Sección de Arranque 256
7.2.3 Cargador para Autoprogramación 258
7.2.3.1 Restricciones de Acceso en la Memoria Flash 258
7.2.3.2 Capacidades para Leer-Mientras-Escribe 260
7.2.3.3 Escritura y Borrado en la Memoria Flash 261
7.2.3.4 Direccionamiento de la Flash para Autoprogramación 264
7.2.3.5 Programación de la Flash 266
7.3 Bits de Confguración y Seguridad 266
7.4 Interfaz JTAG 269
7.4.1 Organización General de la Interfaz JTAG 269
7.4.2 La Interfaz JTAG y los Mecanismos para la Depuración en un AVR 270
7.5 Ejercicios 272
8. Interfaz y Manejo de Dispositivos Externos 273
8.1 Interruptores y Botones 273
8.2 Teclado Matricial 274
8.2.1 Decodifcadores Integrados para Teclados Matriciales 277
8.3 Interfaz con LEDs y Displays de 7 Segmentos 278
8.4 Manejo de un Display de Cristal Líquido 281
8.4.1 Espacios de Memoria en el Controlador de un LCD 282
8.4.2 Conexión de un LCD con un Microcontrolador 285
8.4.3 Transferencias de Datos 287
8.4.4 Comandos para el Acceso de un LCD 289
8.4.4.1 Limpieza del Display 290
8.4.4.2 Regreso del Cursor al Inicio 290
8.4.4.3 Ajuste de Entrada de Datos 290
8.4.4.4 Encendido/Apagado del Display 291
8.4.4.5 Desplazamiento del Cursor y del Display 291
8.4.4.6 Confgura la Función del Display 291
8.4.4.7 Confgura Dirección en CGRAM 292
8.4.4.8 Confgura Dirección en DDRAM 292
8.4.4.9 Lee la Bandera de Ocupado y la Dirección 292
8.4.4.10 Escribe Dato en CGRAM o en DDRAM 292
8.4.4.11 Lee Dato de CGRAM o de DDRAM 293
8.4.5 Inicialización del LCD 293
8.5 Manejo de Motores 29512
8.5.1 Motores de CD 295
8.5.2 Motores Paso a Paso 298
8.5.2.1 Polarización y Operación de un Motor Bipolar 299
8.5.2.2 Polarización y Operación de un Motor Unipolar 301
8.5.3 Servomotores 306
8.6 Interfaz con Sensores 307
8.7 Interfaz con una Computadora Personal 308
8.7.1 Puerto Serie 309
8.7.2 Puerto Paralelo 311
8.7.3 Puerto USB 313
8.7.3.1 Adaptador de USB a RS-232 314
8.7.3.2 Circuitos Integrados Controladores 314
8.7.3.3 Módulos de Evaluación y Prototipado 315
8.7.3.4 Uso de un AVR con Controlador USB Integrado 317
8.8 Ejercicios 318
9. Desarrollo de Sistemas 321
9.1 Metodología de Desarrollo 321
9.2 Ejemplos de Diseño 325
9.2.1 Reloj de Tiempo Real con Alarma 325
9.2.1.1 Planteamiento del Problema 326
9.2.1.2 Requerimientos de Hardware y Software 328
9.2.1.3 Diseño del Hardware 329
9.2.1.4 Diseño del Software 330
9.2.1.5 Implementación del Hardware 335
9.2.1.6 Implementación del Software 335
9.2.1.7 Integración y Evaluación 340
9.2.1.8 Ajustes y Correcciones 341
9.2.2 Chapa Electrónica 342
9.2.2.1 Planteamiento del Problema 342
9.2.2.2 Requerimientos de Hardware y Software 345
9.2.2.3 Diseño del Hardware 346
9.2.2.4 Diseño del Software 347
9.2.2.5 Implementación del Hardware 350
9.2.2.6 Implementación del Software 350
9.2.2.7 Integración y Evaluación 355
9.2.2.8 Ajustes y Correcciones 355
9.3 Sistemas Propuestos 356
APENDICE A 361
APENDICE B 363
APENDICE C 367
APENDICE D 375
INDICE TEMATICO 377