Microcontroladores y sistemas embebidos

Unidad 2: Programación (ATmega)

Ing. Oscar Alonso Rosete Beas

Semana 4 Abril Rev:4 ciclo 2023-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 

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

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

T=1/F

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

 

  1. Utilizamos instruccion jmp para ubicarnos en la posición de memoria de programa donde se encuentra la etiqueta main
  2. con rcall llamamos a la subrutina
  3. 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

Atmega328p 1

By Oscar Rosete

Atmega328p 1

  • 230