Microcontroladores y sistemas embebidos
Unidad 2: Programación (ATmega)
Ing. Oscar Alonso Rosete Beas
Semana 22 Marzo Rev:3 ciclo 2021-1
oscarrosete.com
oscarrosete.com
Sesiones Previas
Unidad 2. Programación
2.1. Introducción a los lenguajes de programación en microcontroladores.
2.2. Arquitectura y lenguaje de programación Ensamblador.
2.3. Modos de direccionamiento.
2.4. Memoria RAM.
2.5. Lenguaje C.
oscarrosete.com
Agenda
Unidad 3: Recursos de los microcontroladores.
-
3.1. Puertos paralelo de Entrada/Salida.
-
3.2. Manejo de Temporización básica y contadores.
-
3.3. Interrupciones.
-
3.4. Puertos Seriales.
-
3.5. Convertidores A-D y D-A.
oscarrosete.com
Competencias de la unidad
- Identificar los elementos de programación que se utilizan en la implementación de sistemas embebidos con microcontroladores, para conocer la estructura y función de los compiladores, interpretadores, programadores y sus topologías.
- Resumir las características arquitectura de un microcontrolador para comprender su programación en lenguajes de bajo y de alto nivel.
- Realizar Programas en lenguajes de bajo y de alto nivel en aplicaciones de sistemas que muestren las funciones básicas de los microcontroladores.
- Mediante lecturas, investigación documental, exposiciones y prácticas de laboratorio. Con una actitud proactiva, creativa y colaborativa.
oscarrosete.com
ATmega328P en ensamblador
oscarrosete.com
AVR Assembler source (AVRASM2)
Extraido de https://onlinedocs.microchip.com/pr/GUID-E06F3258-483F-4A7B-B1F8-69933E029363-en-US-2/index.html
Las líneas pueden tener una de las siguientes 4 formas:
- [etiqueta:] instrucción [operandos] [comentario]
- [etiqueta:] directivas [operandos] [comentario]
- Comentarios
- Lineas vacías
Un comentario puede tener la siguiente forma:
; [Text]
oscarrosete.com
AVRASM2
Keywords
Las palabras claves (keywords) son reservadas y no pueden ser redefinidas. Entre estas se incluyen instrucciones mnemotécnicas y funciones.
Las palabras claves son reconocidas sin importar si se utilizan mayúsculas o minúsculas.
Por ejemplo, add y ADD hacen referencia a la misma operación.
Preprocessor Directives
AVRASM2 considera todas las lineas que comienzan con # como su primer caracter una directiva de preprocesamiento.
oscarrosete.com
AVRSAM2
Comentarios
Los comentarios como tradicionalmente en ensamblador comienzan con ; , sin embargo, también reconoce comentarios en formato de lenguaje c..
Continuación de lineas
Como en lenguaje C, las lineas del código fuente pueden continuarse al dejar como el ultimo carácter en la linea como una diagonal (\).
oscarrosete.com
Decimal (default) | 10 | |
---|---|---|
Hexadecimal | 0x0a | $0a |
Binario | 0b00001000 | 0b_0000_1000 |
Octal | 077 | 0_77 |
AVRSAM2 constantes enteras y operandos
AVRASM2 permite utilizar guiones bajos (_) como separadores para mejorar la legibilidad. Pueden utilizarse en cualquier lugar exceptuando el primer carácter o el especificador de la base.
Por ejemplo, no seria valido utilizar 0_B11 o _0b11.
oscarrosete.com
AVRSAM2 operandos
Las etiquetas definidas por el usuario, obtienen el valor del contador de ubicación en el lugar que aparecen.
PC tiene el valor actual del contador de memoria de programa
Las variables son definidas por el usuario a través de la directiva set. Las constantes por la directiva equ. Los registros pueden ser referenciados a través de símbolos utilizando la directiva def.
.equ/.set/.def
Extraído de AVR Assembler pg.33
oscarrosete.com
AVRSAM2 Ejemplo DEF
DEF
Asigna un nombre simbólico a un registro. Un registro puede tener varios nombres simbólicos.
Sintaxis
.DEF Symbol=Register
https://onlinedocs.microchip.com/pr/GUID-E06F3258-483F-4A7B-B1F8-69933E029363-en-US-2/index.html
Ejemplo
oscarrosete.com
Referencia AVR assembler online
oscarrosete.com
Referencia AVR assembler pdf
oscarrosete.com
+Información
oscarrosete.com
Nomenclatura de registros y operandos
Rd: Registro de destino o precedencia en el archivo de registros.
Rr: Registro de procedencia en el archivo de registros.
R: Resultado después de haber ejecutado la instrucción.
K: Dato constante
k: Dirección constante
b: Bit en el archivo de registros o registro de I/O
s: Bit in registro de estado (3-bit)
A: ubicación I/O
Extraído de: Atmel AVR Instruction Set Manual pg. 1
AVR Conjunto de instrucciones
AVR Conjunto de instrucciones
Ejemplo:
ldi r16,$10 ; Almacena número decimal 16 en registro 16
ldi r24, 0x0A
Tabla ilustrativa extraida de: Atmel AVR Instruction Set Manual pg 25
oscarrosete.com
Divididas en instrucciones aritméticas y logicas, salto , transferencia de datos, manipulación de bit y control de cpu.
AVR Conjunto de instrucciones
oscarrosete.com
Load Immediate (LDI)
Descripción general: Carga directamente una constante de 8-bits a un registro del archivo de registros ubicado entre el 16 y el 31.
Extraído de: Atmel AVR Instruction Set Manual pg. 115
AVR Conjunto de instrucciones
oscarrosete.com
OUT-Store Register to I/O Location
Descripción general: almacena un dato del registro Rr a un espacio I/O (Puertos, Timers, etc)
Extraído de: Atmel AVR Instruction Set Manual pg. 134
AVR Conjunto de instrucciones
oscarrosete.com
Relative Jump (RJMP)
Descripción general: Salto relativo a una ubicación de memoria de programa, también existe JMP.
Extraído de: Atmel AVR Instruction Set Manual pg. 142
AVR Conjunto de instrucciones
oscarrosete.com
Set Bit in I/O Register (SBI)
Descripción general: Habilita un bit específico en un registro I/O.
Extraído de: Atmel AVR Instruction Set Manual pg. 151
AVR Conjunto de instrucciones
oscarrosete.com
Set Bits in Register (SBR)
Descripción general: Habilita bits específicos en el registro Rd.
Extraído de: Atmel AVR Instruction Set Manual pg. 156
AVR Conjunto de instrucciones
Extraído de: Atmel AVR Instruction Set Manual pg. 14
oscarrosete.com
Register Direct, Single Register Rd
Direccionamiento directo (registro individual)
AVR Conjunto de instrucciones
Referencia AVR pdf
oscarrosete.com
+Información
ATmega328P
oscarrosete.com
Información general
32 Registros de Propósito General de 8 bits
131 instrucciones
Dos temporizadores/contadores de 8 bits y 1 adicional de 16 bits.
23 líneas I/O programables
PortB 8, PortC 7, PortD 8. Existen funciones alternas para los puertos.
Extraído de: ATmega48A/PA/88A/PA/168A/PA/328/P pg. 13
oscarrosete.com
I/O
Tres registros en memoria relacionadas a I/O son asignados a cada puerto, el registro de datos PORTx, registro de direccion de datos – DDRx, y el puerto de terminales de entrada– PINx.
Los puertos son bidireccional con resistencias pull-ups internas.
ATmega328P
Extraído de: ATmega48A/PA/88A/PA/168A/PA/328/P pg. 85
oscarrosete.com
ATmega328P
Extraído de: ATmega48A/PA/88A/PA/168A/PA/328/P pg. 100
oscarrosete.com
El bit DDxn en el registro DDRx selecciona la dirección del pin. Si a DDxn se le asigna un valor lógico de 1, Pxn se configura como un pin de salida. Si DDxn se le asigna un valor lógico 0, Pxn sera una terminal de entrada.
Si a PORTxn se le asigna un valor lógico de 1 al ser configurado como terminal de entrada, la resistencia pull-up es activada. para des habilitarla es necesario asignar un 0.
Si a PORTxn se le asigna un valor lógico de 1 al ser configurado como terminal de salida, la terminal de salida tendrá un voltaje en nivel alto. De manera similar con un valor lógico 0 , la terminal tendrá voltaje bajo.
ATmega328P
Extraído de: ATmega48A/PA/88A/PA/168A/PA/328/P pg. 85
oscarrosete.com
Cambio de valores de los bits
La escritura de un valor logico de 1 a PINxn habilita el valor de PORTxn, independientemente del valor de DDRxn. Nota que la instrucción SBI/CBI puede ser utilizada para habilitar un bit único en un puerto.
Lectura de valor del pin
Independientemente de la configuración como I/O, la lectura de la terminal se puede realizar a través del bit del registro PINxn.
ATmega328P
Extraído de: ATmega48A/PA/88A/PA/168A/PA/328/P pg. 85 y 86
oscarrosete.com
ATmega328P
Configurar un pin individual (PB4) como salida y mantener los otros sin cambio:
DDRB |= 1 << 4; ó DDRB |= 0b0001 0000; ó DDRB |= 0x10;
Código ensamblador equivalente:
sbi 0x04, 4 ;
Los registros I/O en el rango 0x00 - 0x1F pueden manipularse con la utilización de SBI y CBI instructions.
Extraído de: ATmega48A/PA/88A/PA/168A/PA/328/P pg. 100
oscarrosete.com
Ejemplo 1 en Atmel Studio 7
Código ensamblador equivalente:
sbi 0x04, 4 ;
cbi 0x04, 4;
oscarrosete.com
Ejemplo 2 en Atmel Studio 7
Requisitos previos de investigación
- Identificar las instrucciones o metodología utilizada en el ATmega 328p para comparar un bit (btfss/btfsc para pic16f84a)
- Identificar las instrucciones o metodología utilizada en el ATmega 328p para realizar un retardo (conjunto de instrucciones nop y decfsz para pic16f84a)
- Investigar método de software para eliminar señales de rebote.
oscarrosete.com
Ejercicios ATmega 1
Considerando un proceso industrial donde hay un troquel y un operador es el encargado de iniciar la secuencia, se solicita un sistema de seguridad industrial en el cual solo se da inicio al proceso cuando el operador está presionando dos botones (Pulsador 1 y Pulsador 2) en su área de trabajo, a partir de lo cual habrá un retraso de 2 segundos momento en el cual se activará una notificación auditiva (LED1), por último 2 segundos después se realizará la activación del troquel (LED2).
Utilizando un ATmega 328p, realizar el código en ensamblador y la simulación en ATMEL Studio 7 haciendo uso de sus puertos de I/O.
oscarrosete.com
Ejercicios ATmega 2
-
Diseñar un contador de 0 a FFh que se podrá observar en un display de 7 segmentos, ánodo o cátodo común.
-
El contador se incrementará cuando un interruptor en la entrada cambie de estado.
-
Tendrá entrada 1 switch SPST. El contador deberá de tener activada la resistencia del Pull-UP de la entrada, deberá de ser de transición de subida (se incrementa al soltar el interruptor) y libre de cualquier ruido.
oscarrosete.com
Ejercicios ATmega 2
-
Utilizando un ATmega 328p, realizar el código en ensamblador y la simulación en ATMEL Studio 7 haciendo uso de sus puertos de I/O.
oscarrosete.com
+Información
oscarrosete.com
Duración instrucciones
Extraído de: Atmel AVR Instruction Set Manual pg. 22
oscarrosete.com
Duración instrucciones
Extraído de: Atmel AVR Instruction Set Manual pg. 25
Extraído de: Atmel AVR Instruction Set Manual pg. 23
F=20MHZ
T=0.05 µs
Con una señal de reloj con frecuencia de 20 MHz cada instrucción LDI duraría 0.05 µs y RJMP .1µs.
oscarrosete.com
Medición tiempo ATMEL STUDIO
Para abrir processor status
1. Start with debugging
2. Debug-->windows--> Processor Status
oscarrosete.com
Medición tiempo ATMEL STUDIO
Con el apoyo de breakpoints y stopwatch visualizamos el conteo de ciclos de la instrucción y el tiempo de duración.
LDI duraría 0.05 µs
oscarrosete.com
Medición tiempo ATMEL STUDIO
Con el apoyo de breakpoints y stopwatch visualizamos el conteo de ciclos de la instrucción y el tiempo de duración.
rjmp duraría 0.10 µs
oscarrosete.com
For Loop ATmega328p
ldi r16, 0
loop1:
inc r16
cpi r16, 10
brne loop1
For loop of 10 iterations
Cycle analysis
For ldi,inc,cpi 1 cycle
For brne
1 if condition is false 2 if condition is true
ldi: 1 cycle,
First 9 iterations(r16=0,1,...8): 4 cycles
In total 9*4=36
Last iteration
3 cycles
36+3+1=40 cycles in total
oscarrosete.com
For Loop ATmega328p
ldi r16, 0
loop1:
inc r16
cpi r16, 10
brne loop1
36+3+1=40 cycles in total
oscarrosete.com
Estructura básica Subrutina
jmp main
del_1:
;lineas
ret
main:
rcall del_1
- Utilizamos instruccion jmp para ubicarnos en la posición de memoria de programa donde se encuentra la etiqueta main
- con rcall llamamos a la subrutina
- retornamos al codigo principal con ret
Nota:
rcall dura 3 ciclos
ret dura 4 ciclos
Dispositivos con PC de16-bit
oscarrosete.com
Código de referencia
oscarrosete.com
Entrada individual ATmega328p
oscarrosete.com
Entradas múltiples ATmega328p
Extraído de: Atmel AVR Instruction Set Manual pg. 100
Extraído de: Atmel AVR Instruction Set Manual pg. 81
oscarrosete.com
Código de referencia
oscarrosete.com
Disassembly ATmega328p
Referencia ATmega328P
oscarrosete.com
+Información
ATMEL STUDIO 7 Instalación
Continúa
oscarrosete.com
ATMEL STUDIO Debugging
oscarrosete.com
ATMEL STUDIO Debugging
ldi r17,(1<<DDB3)|(1<<DDB2)|(1<<DDB1)|(1<<DDB0)= en registro 17 guardar 0000 1111
oscarrosete.com
+Información
Copy of Atmega328p 1
By oscar_rosete
Copy of Atmega328p 1
- 745