Parte 1
Capítulo 1
Programando........................................................................................................................3
Capítulo 2
Primer programa en AVR (encender un LED)..................................................................7
Capítulo 3
Encabezado.........................................................................................................................17
3.1. Directiva .ORG: indica el origen o inicio del programa........................................30
3.2. Directiva .CSEG: Code Segment...........................................................................33
3.3. Directiva .ESEG: EEPROM Segment...................................................................39
3.4. Directiva .DSEG: Data Segment...........................................................................44
3.4.1. Problema en el segmento .DSEG........................................................................48
Capítulo 4
Configuración.....................................................................................................................49
4.1. Stack Pointer..........................................................................................................49
Capítulo 5
Cuerpo del programa........................................................................................................55
5.1. Subrutinas..............................................................................................................55
5.2. Puertos...................................................................................................................56
Capítulo 6
Pull-up y pull-down...........................................................................................................59
Capítulo 7
Ciclo While.........................................................................................................................63
Capítulo 8
Programa 2 (botón enciende LED)...................................................................................65
Capítulo 9
Programa 3 (puerto bidireccional)...................................................................................67
Curso practico para programacion de AVR.indb 9 26/7/24 13:13
X Contenido
Curso práctico para programación de AVR ? Ernesto Paredes Martínez M arcombo
Capítulo 10
Programa 4 (máscara).......................................................................................................73
Capítulo 11
Programa 5 (subrutina de un segundo)...........................................................................75
Capítulo 12
Ciclo For.............................................................................................................................81
12.1. Programa 6 (retraso de 1 minuto usando el ciclo For).......................................82
Capítulo 13
Debouncer (función antirrebote)......................................................................................85
13.1. Programa 7 (Delay_Debouncer)........................................................................86
Capítulo 14
Programa 8 (control de un motor de pasos unipolar).....................................................89
Capítulo 15
Programa 9 (control de velocidad de un motor CD).......................................................93
Capítulo 16
Direccionamientos..............................................................................................................97
16.1. Direccionamiento directo de un solo registro....................................................97
16.2. Direccionamiento directo de dos registros........................................................98
16.3. Direccionamiento directo de I/O.......................................................................98
16.4. Direccionamiento directo de datos....................................................................99
16.5. Direccionamiento indirecto de datos con desplazamiento...............................100
16.6. Direccionamiento indirecto de datos...............................................................100
16.7. Direccionamiento indirecto de datos con predecremento................................101
16.8. Direccionamiento indirecto de datos con postincremento...............................101
16.9. Direccionamiento a la memoria del programa.................................................102
16.10. Direccionamiento indirecto a la memoria del programa, IJMP e ICALL.......103
16.11. Direccionamiento relativo a la memoria del programa...................................103
Capítulo 17
Instrucciones orientadas al bit........................................................................................107
Capítulo 18
Interrupciones.................................................................................................................. 111
18.1. Programa 10 (encender un LED con una interrupción INT0)...........................119
Curso practico para programacion de AVR.indb 10 26/7/24 13:13
Contenido XI
Marcombo C urso práctico para programación de AVR ? Ernesto Paredes Martínez
Capítulo 19
Reset entre los AVR..........................................................................................................129
Capítulo 20
Instrucciones del control del MCU.................................................................................135
Capítulo 21
Error de Branch out of range.........................................................................................143
21.1. Branch: saltos a las subrutinas...........................................................................144
Capítulo 22
Uso del teclado y display LCD........................................................................................147
22.1. Programa 11 (desplegar mensajes en el display LCD)......................................157
22.2. Programa 12 (desplegar los caracteres del teclado en el display).....................160
Capítulo 23
Álgebra booleana con AVR.............................................................................................169
23.1. Programa 13 (ecuación booleana a través de programación AVR)...................169
Capítulo 24
Flip-Flops con AVR..........................................................................................................177
24.1. Programa 14 (Flip-Flop con AVR)....................................................................178
Capítulo 25
Lectura/escritura en EEPROM......................................................................................181
25.1. Programa 15 (memorización de un teclado matricial en la EEPROM).............183
Capítulo 26
Instrucciones Push y Pop................................................................................................191
26.1. Push: salvar el valor de un registro en el Stack.................................................191
26.2. Pop: recuperar el valor de un registro del Stack................................................191
26.3. Error en el uso del Stack Pointer con interrupciones.........................................196
26.4. Error en el uso del Stack Pointer con saltos RCALL........................................199
Capítulo 27
Instrucciones ST/STD/STS - LD/LDS............................................................................203
Capítulo 28
PWM.................................................................................................................................207
28.1. Control del servomotor......................................................................................213
Curso practico para programacion de AVR.indb 11 26/7/24 13:13
XII Contenido
Curso práctico para programación de AVR ? Ernesto Paredes Martínez M arcombo
Capítulo 29
Contador de 24 y 32 bits (ascendente y descendente)...................................................221
Capítulo 30
Expresiones (Expressions)...............................................................................................225
30.1. Operandos (Operands).......................................................................................225
30.2. Operadores (Operators).....................................................................................225
30.3. Funciones (Functions).......................................................................................232
Capítulo 31
Macros...............................................................................................................................237
Capítulo 32
Directivas..........................................................................................................................243
32.1. Directiva #DEFINE.........................................................................................243
32.2. Directiva DEF: establecer una etiqueta en un registro....................................244
32.3. Directiva UNDEF: indefinir o ?desnombrar? el nombre
simbólico de un registro (quitar la etiqueta a un registro)...............................247
32.4. Directiva EQU: hacer un símbolo igual que una expresión
(asignar un valor a una etiqueta)......................................................................248
32.5. Directiva SET: establece que un símbolo sea igual a una expresión...............250
32.6. Directiva DEVICE...........................................................................................250
32.7. Directiva CSEGSIZE: tamaño de la memoria del programa
(Program Memory Size)..................................................................................251
32.8. Directivas IF, ELSE, ENDIF: condicionales (conditional assembly)..............251
32.9. Directivas IFDEF, IFNDEF: condicionales (conditional assembly)...............253
32.10. Directiva ELIF: condicionales (conditional assembly)...................................254
32.11. Directiva ERROR: saca la palabra ?ERROR? con una
cadena de caracteres (string)............................................................................255
32.12. Directiva WARNING: saca la palabra ?WARNING?
con una cadena de caracteres (string)..............................................................256
32.13. Directiva MESSAGE: saca la palabra ?MESSAGE?
con una cadena de caracteres (string)..............................................................257
32.14. Directiva EXIT: salirse del archivo.................................................................258
32.15. Directivas LIST ? NOLIST: genera un archivo ?listfile .lst?..........................260
32.16. Directiva LISTMAC: expansión del contenido de una macro........................263
Parte 2
Capítulo 33
Comunicación entre un AVR y un ordenador...............................................................267
Curso practico para programacion de AVR.indb 12 26/7/24 13:13
Contenido XIII
Marcombo C urso práctico para programación de AVR ? Ernesto Paredes Martínez
Capítulo 34
Comunicación entre los AVR..........................................................................................275
34.1. Comunicación entre los AVR usando SPI-USI..................................................275
34.2. Comunicación USI 3-hilos (3-Wire)..................................................................280
34.3. Comunicación entre los AVR usando una comunicación híbrida síncrona.......287
Capítulo 35
Comunicación entre los AVR a distancia.......................................................................295
35.1. Comunicación a distancia con una interfaz RS-485..........................................295
35.2. Comunicación a distancia usando XBEE..........................................................296
Capítulo 36
Generador de un pulso de reloj para una sincronía (Clock Recovery).......................305
36.1. Codificador Manchester.....................................................................................310
Capítulo 37
Lectura de un convertidor ADC0804 en un display LCD............................................321
37.1. Convertidor ADC del ATtiny13.........................................................................326
Capítulo 38
Voltímetro digital de 8 bits..............................................................................................329
Capítulo 39
Sensor de temperatura PT100........................................................................................339
39.1. Instrucción de multiplicación MUL...................................................................342
Capítulo 40
Generador de funciones usando un convertidor DAC0800.........................................353
40.1. Trazador de figuras de dos dimensiones............................................................358
Capítulo 41
Sensor de proximidad ultrasónico HC-SR04.................................................................361
41.1. Multiplicación de un número de 24 bits por uno de 16 bits..............................364
Capítulo 42
Puente de Wheatstone......................................................................................................379
42.1. Potenciómetro digital.........................................................................................380
Capítulo 43
Circuito de cruce por cero para un Dimmer 120 VCA.................................................389
Curso practico para programacion de AVR.indb 13 26/7/24 13:13
XIV Contenido
Curso práctico para programación de AVR ? Ernesto Paredes Martínez M arcombo
Capítulo 44
Resolución de ecuaciones con AVR.................................................................................399
44.1. Raíz cuadrada en AVR.......................................................................................400
Capítulo 45
Crear un PLC con AVR...................................................................................................417
Capítulo 46
Tarjeta Programadora Universal...................................................................................421
Capítulo 47
Cómo hacer una tarjeta tipo Arduino............................................................................423
47.1. ¿Qué es el Bootloader?......................................................................................426
47.2. Partes de la tarjeta Arduino................................................................................442
47.3. Montando nuestra tarjeta tipo Arduino..............................................................444
Palabras finales ..................................................................................................................453
Índice analítico...................................................................................................................455
Descubra el poder de los microcontroladores AVR Si desea saber por qué los AVR son microcontroladores amigables en la programación y disfrutar de sus ventajas, ha llegado al libro indicado. En él, se adentrará de forma paulatina en los fundamentos y aplicaciones avanzadas de estos potentes dispositivos. Aprenderá a programar en lenguaje ensamblador usando el programa AVR Studio 4, explorando un amplio rango de voltajes de operación y frecuencias de oscilación, junto con una variedad de registros de usuario que facilitan la programación y la experimentación. Además, la lectura de este libro no requiere experiencia previa, ya que cada concepto y procedimiento se desglosa en una guía paso a paso clara y accesible, complementada con circuitos prácticos, secciones de código y tips esenciales para dominar la programación de los AVR. APRENDA: ? A programar un microcontrolador AVR. ? A usar comandos, operandos, macros y demás cualidades del AVR. CONOZCA: ? Algunos circuitos eléctricos empleados en la programación del AVR. ? Un diagrama eléctrico de una base multi-AVR para programar varios microcontroladores de Atmel en un mismo módulo-programador. No espere más para desarrollar sus habilidades y poner en práctica proyectos reales, incluyendo códigos y diagramas eléctricos. Ernesto Paredes Martínez es máster en Ciencias. Actualmente, imparte clases en el Centro de Estudios Superiores Navales y cuenta con una condecoración militar al Mérito Docente. Fue oficial militar de la misma institución e imparte cátedras como civil. Ha sido profesor de la asignatura de Miconcontroladores AVR durante más de 10 años.