Anda di halaman 1dari 9

Pre-informe de laboratorio N 1

Laboratorio 1 Microcontroladores (MCU): Sistema de Cerradura Digital. (Agosto 2012)


Germn F. Crdenas, Christopher A. Flores y Janeth E. Laines, Ingeniera Civil Biomdica, DIE Profesor: Miguel E. Figueroa Ayudante: Enrique I. Germany

Resumen En el laboratorio se implementar un sistema de cerradura digital que operar con una clave digital de 4 bits. Mediante 4 pulsadores normalmente abiertos se controlarn los distintos estados del sistema (Cerrar, configuracin e ingreso de 0 y 1). Cada estado podr ser visualizado por LEDs externos. La clave ingresada ser se podr ver mediante los LEDs disponibles en la tarjeta del microcontrolador Atmel Atmega 64. El programa ser escrito en lenguaje Assembly. Palabras clavesAssembly, microcontrolador

III. OBJETIVOS -Implementar un sistema de cerradura digital -Manejar conexin de elementos externos a la tarjeta Digilent Cerebot II -Programar el microcontrolador Atmel ATmega 64 en lenguaje Assembly, familiarizndose con la utilizacin de registros y puertas de E/S

I. INTRODUCCIN

IV. METODOLOGA -Simular programa Assembly en Proteus -Montar en protoboard LEDs, resistencias correspondientes y push bottons. -Cargar en MCU el programa -Encender el MCU y verificar funcionamiento

n microcontrolador es un dispositivo electrnico programable. Posee una Unidad Central de Procesamiento (CPU), memoria y perfifricos de entrada/salida. El microcontrolador a utililizar en el laboratorio es el Atmel ATmega 64, que posee las siguientes caractersticas: Reloj de hasta 16 [MHz], 64 [Kb] de flash de programa, 2 [Kb] de EEPROM de datos, 4 [Kb] de RAM, registros generales (32) y especializados, entre otros, pudiendo ser programado en lenguaje C, assembly (bajo nivel) o Basic. En el presente laboratorio se implementar un sistema de cerradura digital en assembly.

V. A. Solucin propuesta

DESARROLLO

II. COMPONENTES Y EQUIPOS - Microcontrolador Atmel ATmega 64 - Cable alimentacin microcontrolador - Protoboard - 4 Push-buttons N.A - Cable JTAG -Cable USB - 3 LEDs rojo, verde amarillo - 4 Resistencias de 330 [] - Cables -Alicates -Ordenador -Software AVR Studio -Software AVR Programmer

El sistema de cerradura digital posee 3 estados: Abierto (A), indicado por un LED verde; Cerrado (L), indicado por un LED rojo y Configuracin (C), indicado por un LED amarillo. El programa s iniciarn con la cerradura en estado abierto, desde donde se podr acceder a las distintas opciones, segn se presiones el botn. Se muestra un diagrama del funcionamiento en la fig.1. B. Cdigo .include "m64def.inc" .equ Delay5ms = 10000 .equ Delay500ms = 100 .CSEG main: ldi r16, 0xf0

Pre-informe de laboratorio N 1

Fig. 1. Diagrama de funcionamiento

Pre-informe de laboratorio N 1 out PORTC, r16 ;activa los pullup de la puerta C out DDRE, r16 ;define la puerta E como salida (leds del micro) ldi r16, 0x0f out DDRA, r16 ;define la puerta A como salida (leds de estado) ldi r16, 0x00 out DDRC, r16 ;define la puerta C como entrada (botones) out PORTE, r16 ;carga 0x00 en puerta E como valor inicial ldi r16, 0xff ldi r17 , 0x00 ;inicializa todos los registros usados en 0x00 ldi r18 , 0x00 ldi r19 , 0x00 ldi r20 , 0x00 ldi r21 , 0x00 ;clave recien ingresada ldi r22 , 0x00 ldi r23 , 0x00 ldi r24 , 0x00 ldi r25 , 0x00 ldi r26 , 0x00 ;contador de presiones de boton para reiniciar los led de clave ldi r27 , 0x01 ;leds de estado (Puerta A) ldi r29 , 0x00 ;registra si se apreto el boton config, si es igual a 0x01 el boton fue apretado ldi r16 , 0xd0 mov r1 , r16 ;CLAVE MAESTRA en r1 ldi r16 , 0x00 mov r2 , r16 ;clave guardada en r2 ldi r16, 0xff mov r3, r16 ;mascara parpadeo mov r4, r16 ;copia mascara de parpadeo, para reestablecerla ldi r28, Delay500ms ldi r16, 0x05 mov r6,r16 ;numero maximo de intentos en r6 clr r5 ;contador de intentos En esta seccin de cdigo, se incluye la librera m64def para la utilizacin de rtulos en los puertos, y se declaran los registros a utilizar. Se rotulan variables a utilizar en el tiempo, fundamental para el parpadeo del LED amarillo. (Configuracin). El puerto C se configura como entrada para la conexin de los pulsadores, mientras que los puertos A y E sern salida, pues all se encendern los LEDs start: cpi r27, 0x01 ;comprueba si est en estado abierto breq readclose ;se salta la lectura de los botones 1 y 0 para inhabilitarlos si est en abierto ;Lectura boton 0 read0: in r17, PINC ;guarda los datos de los botones en r17 cpi r26, 0x04 ;compara contador con el numero 0x04, para saber si se ingreso una clave completa breq decision ;salta a decision si se cumple la igualdad cpi r29, 0x01 ;comprueba si esta en modo config breq parpadeo ;salta a parpadeo si esta en modo config rjmp show ;salta a show

andi r17, 0x01 ;aisla el bit PC0 (boton 0) lsl r18 ;corre el registro de estados del boton 0 or r18, r17 ;guarda el nuevo bit0 de entrada en registro de estados del boton 0 andi r18, 0x03 ;aisla los dos ultimos bit del registro de estados del boton 0 cpi r18, 0x02 ;compara el estado del boton 0 con el valor 0x02 breq boton0 ;salta a la seccin boton0 si los bits 0 y 1 de r18 y el valor 0x02 son iguales ;Lectura boton 1 read1: in r19, PINC ;guarda los datos de los botones en r19 andi r19, 0x02 ;aisla el bit PC1 (boton 1) lsl r20 ;corre el registro de estados del boton 1 or r20, r19 ;guarda el nuevo bit0 de entrada en registro de estados del boton 1 andi r20, 0x06 ;aisla los bits 1 y 2 del registro de estados del boton 1 cpi r20, 0x04 ;compara el estado del boton 1 con el valor 0x04 breq boton1 ;salta a la seccion boton 1 ;Lectura boton close readclose: in r22, PINC andi r22, 0x04 lsl r23 or r23, r22 andi r23, 0x0C cpi r23, 0x08 breq botonclose ;Lectura boton config readconfig: in r24, PINC andi r24, 0x08 lsl r25 or r25, r24 andi r25, 0x18 cpi r25, 0x10 breq botonconfig En esta seccin de cdigo se inicializan los botones conectados en el puerto C, esperando el cambio de 1 a 0 segn cada estado. Se hace una comparacin permanente, esperando por la transicin de los botones y salta al cdigo que le corresponde a cada caso.

Pre-informe de laboratorio N 1

decision: ldi r26, 0x00 ;devuelve el contador de presiones de boton a 0x00 cpi r29, 0x01 ;compara el valor del registro r29 el cual es igual a 0x01 cuando se apreta el boton config, si no es 0x00 breq newkey ;salta a la seccion newkey si se cumple la condicion cp r21, r1 ;compara el valor de la clave ingresada con la clave maestra breq open cp r5,r6 ;compara la cuenta de intentos con el numero maximo de intentos brsh botonclose ;salta a blocked si se ingresa 5 o mas intentos fallidos cp r21, r2 ;compara el valor de la clave ingresada con la guardada breq open ;salta a open si se cumple inc r5 ;cuenta intentos fallidos rjmp botonclose ;salta a botonclose si no se cumple

cpi r27, 0x01 ;compara el r27 con 0x01, para saber si esta abierto brne start ;vuelve a start si no esta abierto config: ldi r27, 0x04 ;para encender la luz del bit PA2 ldi r29, 0x01 ;cambia a 0x01 el r29 para verificar luego si lo que se ingrese a continuacion se guardara como nueva clave o no rjmp start ;vuelve a start para recibir la nueva clave newkey: mov r2, r21 ;guarda la nueva clave ingresada ldi r29, 0x00 ;reinicia r29 a 0x00 para que no se vuelva a guardar la sgte clave ingresada mov r3, r4 ;fuerza la mascara a 0xff al terminar de ingresar la nueva clave open: ;enciende la luz de abierto ldi r27, 0x01 ;enciende la luz verde ldi r21, 0x00 ;apaga los led del micro clr r5 rjmp start ;vuelve a start parpadeo: ldi r27, 0x04 ;devuelve el estado de r27 al de antes de aplicar la mascara subi r28, 1 ;Se cuentan 100 veces (decremento) para repetir el loop de 5ms 100 veces, pues 5ms*100ms=500ms aprox. cpi r28, 0x00 brne show ;Si no ha llegado a cero, se salta a show ldi r28, Delay500ms ;Si lleg a cero, se reinicia la cuenta (en 100) para contar otros nuevos 500ms com r3 ;invierte la mascara show: ;muestra la clave y la luz de estado de la cerradura and r27, r3 ;aplica la mascara y se pierde el estado anterior de r27, pero se recupera en la primera linea de parpadeo out PORTE, r21 ;muestra el registro r21 (clave) en los led del micro out PORTA, r27 ;muestra el estado de la cerradura en los led de estado delay: ; Loop de 5ms sin hacer nada

boton0: ;corre el registro de clave agregando un 0 por la derecha y suma 1 al contador lsl r21 ;corre el r21 ingresando un 0 por la derecha inc r26 ;suma 1 al contador de botones rjmp start ;vuelve a start

En esta seccin de cdigo se llevan a cabo las opciones de configuracin de la contrasea (mximo de intentos, ingreso de nueva contrasea, contador de cantidad de nmeros ingresados para que se reinicie al llegar a 4 dgitos). En caso de bloqueo se puede accesar (abir puerta) mediante una contrasea maestra: 1101.

boton1: ;corre el registro de clave y le aplica un or con 0x01 para agregar un uno al registro y suma 1 al contador lsl r21 ;corre el registro r21 ingresando un 0 por la derecha inc r26 ;suma uno al contador de botones ori r21, 0x10 ;hace un or entre r21 y 0x10 para convertir el ultimo 0 en 1 rjmp start ;vuelve a start botonclose: ;enciende la luz de cerrado ldi r27, 0x02 ;se enciende la luz roja ldi r21, 0x00 ;se apagan los led del micro rjmp start ;vuelve a start botonconfig: ;comprueba si los led de estado estan en abierto para configurar y si no vuelve a start

ldi r31, high(Delay5ms) ldi r30, low(Delay5ms) loop_delay5ms: sbiw r31:r30, 1 brne loop_delay5ms rjmp start ; Salta a start y comienza un nuevo ciclo

Pre-informe de laboratorio N 1 .include "m64def.inc" En esta seccin de cdigo se definen las opciones que se ejecutarn tras efectuarse los saltos de las distintas etapas del cdigo. .CSEG main: ldi r31, 0xf0 out DDRE, r31 ldi r31, 0x07 out DDRA, r31 ldi r31, 0x00 out DDRC, r31 ldi r31, 0xff out PORTC, r31 ldi r30, 0x00 ldi r29, 0x00

B.1 Cdigos de prueba -Encender LED ROJO. Con este cdigo de prueba se pretende probar si la captacin del botn 3 (para ir a cerrado) funciona y luego se debe prender el LED rojo .include "m64def.inc" .CSEG main: ldi r31, 0xf0 out DDRE, r31 ldi r31, 0x07 out DDRA, r31 ldi r31, 0x00 out DDRC, r31 ldi r31, 0xff out PORTC, r31 ldi r30, 0x00 ldi r29, 0x00

VERDE: ldi r24, 0x01 out PORTA , r24 in r31, PINC andi r31, 0x08 lsl r29 or r29, r31 andi r29, 0x18 cpi r29, 0x10 breq AMARILLO rjmp VERDE

VERDE: ldi r24, 0x01 out PORTA , r24

AMARILLO: in r31, PINC andi r31, 0x04 lsl r30 or r30, r31 andi r30, 0x0C cpi r30, 0x08 breq ROJO rjmp VERDE ldi r31, 0x04 rjmp AMARILLO

ROJO: ldi r31, 0x02 rjmp rojo -Cdigo prueba 2: Encender el LED Amarillo, lo mismo que el cdigo 1, Aqu lo que se pretende es saber si la captacin de el botn 4 esta correcta y que luego se encienda el LED amarillo

-Cdigo prueba 3: Guardar clave. Este cdigo prueba depende del cdigo anterior, si est bien el anterior se puede probar ste, porque sino no tendramos como comprobar que se guard la clave correctamente. Consiste en que al estar en el estado abierto y apretando el botn correspondiente , me enve al estado de configuracin, y aqu ingresar una nueva clave, la cual en un principio es 0x00 y esta definida en el principio del cdigo como CLAVE, al ingresar al estado configuracin borramos todo lo que haya en CLAVE, y luego verificamos qu botones se estn ingresando (solo el botn 1 y 2), s se apret el botn 1, que ingresa al primer bit de la entrada PORTC, nos indica que hemos apretado un 1, si es as hacemos un salto a la etiqueta G1, por otro lado , si apretamos el segundo botn, el cual no informa que estamos ingresando ceros a la clave, nos traslada a la etiqueta G0. En G1 primero hacemos un corrimiento a la izquierda a CLAVE, para desplazar el bit ingresado con anterioridad, luego le hacemos un or con un 1, el cual ser como sumarle 1. En G0, simplemente hacemos un corrimiento, el cual hace que se ingrese solo un cero.

Pre-informe de laboratorio N 1 Adems tuvimos la precaucin de que nuestra nueva clave ingresada solo tenga 4 bits, para ellos ocupamos un registro el cual se inicializa en cero en el main y al ingresar a G0 o a G1 se le incrementa 1, hasta cuando llega a 4, nos traslada nuevamente a verde. Para concluir , probaremos los leds que nos indica qu clave ingresamos (Leds del PORTE), si vemos en el main, nos damos cuenta , que son los bits mas significativos del PORTE, es por eso que cuando nuestro contador de cuantos ingresos llega a 4 , nos traslada a RC, y copiamos lo que contiene la nueva clave, lo transcribimos a un registro temporal , se le hace 4 corrimientos hacia la izquierda , para que la combinacin de bits (clave) quede en los 4 bits ms significativos y de ah lo mandamos al PORTE, mostrndonos los 4 leds, representando la nueva clave .include "m64def.inc" .def CLAVE= r16 .CSEG main: ldi r31, 0xf0 out DDRE, r31 ldi r31, 0x07 out DDRA, r31 ldi r31, 0x00 out DDRC, r31 ldi r31, 0xff out PORTC, r31 ldi CLAVE, 0x00 ldi r17, 0x00 ldi r19, 0x00 ldi PRU, 0x00 ldi r17, 0x00 ldi r28, 0x00 ldi r27, 0x00 ldi r25, 0x00 ldi r26, 0x00 VERDE: ldi r24, 0x01 out PORTA , r24 in r31, PINC andi r31, 0x08 lsl r29 or r29, r31 andi r29, 0x18 cpi r29, 0x10 breq AMARILLO rjmp VERDE ldi r22, 0x04 out PORTA , r22

cpi r17, 0x04 breq RC in r31, PINC andi r31 , 0x01 lsl r28 or r28, r31 andi r28, 0x03 cpi r28, 0x02 breq G1 in r31, PINC andi r31,0x02 lsl r27 or r27, r31 andi r27, 0x06 cpi r27, 0x04 breq G0

ldi r22, 0x00 out PORTA , r22

rjmp AMARILLO G1: lsl CLAVE ori CLAVE, 0x01 inc r17 rjmp AMARILLO

G0: lsl CLAVE inc r17 rjmp AMARILLO RC: clr r17 mov r31, CLAVE lsl r31 lsl r31 lsl r31 out PORTE, r31 rjmp VERDE

AMARILLOB: clr CLAVE AMARILLO:

-Cdigo prueba 4. Este cdigo prueba es muy similar al anterior (3), puesto que ocupa la misma lgica, pero cabe destacar que el ingreso de la clave no se guardara en CLAVE, si no mas bien en PRU, que ser un registro de prueba de clave, y cuando el contador de ingreso llego a 4 , el contador de borrara y lo llevara a ROJOB, donde comparar la clave guardada es decir CLAVE que en este caso es 0x00 con PRU , que es la clave recin ingresada, si son iguales lo enviar al

Pre-informe de laboratorio N 1 estado abierto, si no son iguales comenzara el ingreso de clave nuevamente. Bueno adems en los leds de PORTE se muestran las claves ingresadas, cuando entramos a ROJOB, prendemos los leds, correspondientes a la clave recin ingresada. ROJO: ldi r23, 0x02 out PORTA , r23 cpi r19, 0x04 breq RCC .include "m64def.inc" .def CLAVE= r16 .def PRU= r18 in r31, PINC andi r31 , 0x01 lsl r26 or r26, r31 andi r26, 0x03 cpi r26, 0x02 breq G11 in r31, PINC andi r31,0x02 lsl r20 or r20, r31 andi r20, 0x06 cpi r20, 0x04 breq G00 rjmp ROJO G11: ori PRU, 0x01 lsl PRU inc r19 rjmp ROJO G00: lsl PRU inc r19 rjmp ROJO

.CSEG main: ldi r31, 0xf0 out DDRE, r31 ldi r31, 0x07 out DDRA, r31 ldi r31, 0x00 out DDRC, r31 ldi r31, 0xff out PORTC, r31 ldi CLAVE, 0x00 ldi r17, 0x00 ldi r19, 0x00 ldi PRU, 0x00 ldi r17, 0x00 ldi r28, 0x00 ldi r27, 0x00 ldi r25, 0x00 ldi r26, 0x00 ldi r20, 0x00 ldi r21, 0x00 VERDE: ldi r21, 0x01 out PORTA , r21

RCC: clr r19 rjmp ROJOB in r31, PINC andi r31, 0x04 lsl r30 or r30, r31 andi r30, 0x0C cpi r30, 0x08 breq ROJO rjmp VERDE ROJOB: mov r31, PRU lsl r31 lsl r31 lsl r31 out PORTE, r31 cp CLAVE, PRU breq VERDE clr PRU

C. Implementacin de circuito El circuito a implementar consiste en 4 pulsadores que se conectan al puerto C del microcontrolador. Las resistencias del pull up estn integradas en la tarjeta. Por su parte, los LEDs verde, rojo y amarillo se deben conectar al puerto A del microcontrolador, desde el bit menos significativo, respectivamente. Los LEDs del puerto E (4 bits ms significativos) slo se configurarn mediante assembly para la visualizacin de la contrasea.

Pre-informe de laboratorio N 1

Fig. 2. Circuito a implementar en el laboratorio

VI. CONCLUSIN Los microcontroladores (MCU) son de gran utilidad a la hora de implementar circuitos digitales o analgicos, previo uso de conversores A/D. Su fundamento se basa en el estudio del lenguaje a utilizar, sea ste el C, assembly, Basic, entre otros. La diferencia radica en la cercana (nivel) con el microcontrolador, lo que se traducir en el grado de control. En el caso del lenguaje Assembly se tiene un mayor control bit a bit de los registros a utilizar, lo que logra un aprovechamiento eficiente de los recursos del MCU.

VII. REFERENCIAS [1] Laboratorio de microcontroladores: Gua de laboratorio N 1, Universidad de Concepcin, Departamento de Ingeniera Elctrica, 2011, pp 1-3

Pre-informe de laboratorio N 1

Anda mungkin juga menyukai