9
INSTITUTO POLITÉCNICO NACIONAL Unidad Profesional Interdisciplinaria en Ingeni Tecnologías Avanzadas Ingeniería Mecatrnica Microprocesadores! Microcontroladores e Interfaz Pr"ctica #$ %&tinas en A'% Al&(nos) Grande Roldán Carlos Medina Torres Jael Sebastian Sánchez Mata Mario Israel Tovar Daphne *r&po) 2MV4 Profesor) Trejo Salazar David enja!"n +ec,a de -ntrega) 2# de $nero de 2%&#

Practica1

Embed Size (px)

DESCRIPTION

Introducción a la programación de AVRS

Citation preview

INSTITUTO POLITCNICO NACIONAL

Unidad Profesional Interdisciplinaria en Ingeniera y Tecnologas Avanzadas Ingeniera Mecatrnica Microprocesadores, Microcontroladores e Interfaz

Prctica 1. Rutinas en AVR

Alumnos: Grande Roldn CarlosMedina Torres Jael Sebastian Snchez Mata Mario IsraelTovar Daphne

Grupo: 2MV4

Profesor: Trejo Salazar David Benjamn

Fecha de Entrega: 25 de Enero de 2015OBJETIVO. Que el alumno conozca la utilizacin y el funcionamiento de las Rutinas en AVR, as como las instrucciones bsicas y banderas.

INTRODUCCINLas rutinas pre generadas en ensamblador se utilizan para ahorrarse tiempo de diseo en generar un cdigo que ya han hecho otros o que puedes generar tu mismo y necesitarlo en ms de un proyecto y as no tener que volver a escribirlo o disearlo.La extensin de archivo por defecto en rutinas es .lib y contienen nicamente las instrucciones necesarias para el trabajo al que se destinan.Para incluir una sub-rutina o librera en nuestro programa tendremos que usar la directiva include de la manera siguiente:include "rutina.lib"Una vez hecho esto, ser como si tuvisemos las lneas de cdigo contenidas en la librera, incluidas en el listado principal del programa .asm y accederemos a las partes de la librera utilizando la llamada a subrutinas "CALL" ya que todas las funciones contenidas en las libreras retornan con la instruccin "RETURN" o similar que devuelven el proceso del programa a la posicin siguiente a la instruccin "CALL".Instrucciones Bsicas y Banderas

El juego de Instrucciones Bsico dentro de AVR, puede clasificarse de la siguiente manera:

Instrucciones de transferencia de datos Instrucciones aritmtico-lgicas Instrucciones de salto Instrucciones de manejo de bits Instrucciones de control del sistema.

Por otro lado, los banderines (flags) que reflejan el resultado de la ejecucin de algunas instrucciones (principalmente aritmticas, lgicas, etc.) son los siguientes:

- Bit C (Carry) - Bit Z (Zero). Se pone a 1 para resultado cero, 0 en otro caso. - Bit N (Negative). Bit 7 del resultado.

PROCEDIMIENTO Y DESARROLLO.

Ejercicio 1. Realizar un programa ensamblador tenga programadas 4 secuencias de 8 leds y pueda tener la opcin de ponerlo a dos velocidades de cambio distintas (400 ms, y 100 ms), en el diseo incluir un botn de on/off.

Paso 1. Primeramente se procede a implementar la solucin mediante la generacin de cdigo en ensamblador, se recurre a la apertura de la herramienta Atmel Studio para la programacin del AVR.

Fig. 1 Acceso a la herramienta Atmel Studio 6.0

Paso 2. Una vez que abrimos el software de programacin del AVR, generamos un nuevo proyecto mediante la ruta Project/ New Project y seleccionamos la opcin AVR Assambler indicando a su vez el nombre y la ruta del proyecto como se muestra en la Fig. 2; posteriormente en la ventana Device Selection (Fig. 3) , seleccionamos el integrado a utilizar; en nuestro caso ser el de la familia Atmega 328P.

Fig. 2 Asignacin de nombre y ruta de Proyecto.

Fig. 3 Ventana de dilogo de asignacin de seleccin de microchip.

Paso 3. Posteriormente, procederemos a la generacin de nuestro archivo .asm cuyos bloques principales se describen a continuacin:

.include "m328Pdef.inc" .cseg .org 0X0 ldi r16, low(ramend)En este bloque se muestra la utilizacin de la librera "m328Pdef.inc" como principio, para posteriormente inicializar/enmascarar nuestros puertos de entrada y salida; en esta caso el B y el D respectivamente.

out spl,r16 ldi r16, high(ramend) out sph, r16 ser r16 out ddrd,r16 clr r16 out ddrb ,r16

loop: on_off: ldi r21,0X00 out portd,r21 En este bloque de loop, implementamos a su vez una sub-rutina on_off que inicializa en cero el puerto de salida D hasta que nuestro interruptor destinado este en uno y pueda ejecutar la estructura principal de nuestro programa.

sbis pinb,3 jmp on_off

in r16, PinBandi r16, 0X03cpi r16,0X03brne otra1rcall rut_3jmp loopEn esta parte mostramos el ejemplo de la ejecucin del seleccionador de Rutina de 4 bits mediante la comparacin del Puerto de Entrada asignado a los interruptores destinados a dicha accin.

otra1:cpi r16, $02brne otra2rcall rut_2jmp loop

rut_0:ldi r17,0X55out portd,r17Este bloque representa la estructura principal de nuestro programa; ya que muestra la carga de la secuencia asignada dependiendo de la comparacin de rutina realizada en el bloque anterior, adems ejecuta el delay aplicado a la velocidad de cambio seleccionada por el usuario.

sbis pinb,2rcall t_100mssbic pinb, 2rcall t_400msldi r17,0XAAout portd,r17sbis pinb,2rcall t_100mssbic pinb, 2rcall t_400msret

t_100ms:; ----------------------------- ; delaying 99990 cycles: ldi R18, $A5WGLOOP0: ldi R19, $C9WGLOOP1: dec R19 brne WGLOOP1Finalmente la aplicacin de la rutina de retraso para el seleccionador de velocidad de cambio.

dec R18 brne WGLOOP0; ----------------------------- ; delaying 9 cycles: ldi R18, $03WGLOOP2: dec R18 brne WGLOOP2; ----------------------------- ; delaying 1 cycle: nop; ============================= ret

Paso 4. Una vez generado el cdigo, procedemos a la verificacin de errores mediante la construccin de la solucin en el Men Build/ Build Solution.

Fig. 4 Verificacin del cdigo.

Paso 5. Si no se generaron en errores, continuamos a verificar el funcionamiento de nuestro programa mediante un software de simulacin. En este caso usaremos la herramienta ISIS de Proteus.

Fig. 5 Implementacin del Cdigo en el software de diseo.

Ejercicio 2.

Ejercicio 3

Conclusiones

Dentro de la presente prctica, pude implementar a mayor detalle las instrucciones bsicas para la programacin en AVR, cosa que adiferencia de la prctica 0 no habamos logrado en su totalidad.

Me di cuenta que el manejo de rutinas simplifica mucho el diseo para la poramacin en ensamblador y mediante la ayuda de estas pude ir ligando cada parte del programa sin ningn problema.

Por Jael Sebastian Medina Torres

En la primera practica despues de poder reconocer y poder manejar mejer el lenguaje ensamblador empezamos con un tema para poder dividir el programa en pequeos segmentos de codigo llamado rutinas. Por otro lado el uso de las rutinas nos ayudo a conceptualizar lo visto el clase , sabiendo que las rutinas deviden el codigo en diferentes segmentos.

Carlos Grande Roldn

Bibliografas

http://www.x-robotics.com/rutinas.htm

http://www.dte.us.es/personal/pparra/EdC-T4-AVR-v0-1a-parte

Anexo conclusin Prctica 0

Esta prctica me sirvi mucho de parteaguas para el entendimiento en general de la herramienta de programacin para AVR Atmel Studio as como el manejo y comprensin de la estructura general del integrado AVR 328P.

Considero que este prctica fue de suma utilidad para poder involucrarnos lo suficiente dentro del entorno de los microcontroladores para as poder desarrollar futuros proyectos de mayor complejidad.

Por Jael Sebastian Medina Torres

En la practica 0 se pudo apreciar y conocer a fondo los conceptos basicos y lo necesario para poder utilizar el AVR ATMEGA328P, pudimos hacer uso del programador por primera vez y su funcionamiento.

Fue la primera practica para poder familiarizarnos con la programacion en ensamblador con los fundamentos para poder realizar futuras practicas.

Carlos Grande Roldn

Anexo conclusin Prctica 2

Para esta prctica, pude darme cuenta del uso general de las Interrupciones dentro del lenguaje ensamblador mediante la herramienta de utilizacin Atmel Studio. Mediante la prctica, al trabajar con el uso del timer en sus diferentes configuraciones como lo son Over-Flow, fast PWM o CTC, pude darme cuenta de la utilidad que estas tienen dentro de la programacin de nuestro integrado 328P. Sin duda considero que el manejo de estas instrucciones es una parte fundamental que debemos manejar para la programacin en AVR.

Por Jael Sebastian Medina Torres

En la segunda practica se estudio el manejo de la interrupcin timer , que es muy util cuando se tiene un conjunto de codigo que se tiene que ejecutar cada determinado tiempo , mientras que en el codigo principal puede seguir ejecutando y cuando se llama a la interrupcion regresa al mismo momento que fue llamado.Tambien se hace el uso de PWM para poder variar la intensidad y frecuencia.

Carlos Grande Roldn