Вы находитесь на странице: 1из 6

Informe de laboratorio N 3

Laboratorio 2 Microcontroladores (MCU): Conversin Anlogo-Digital (Septiembre 2012)


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

Resumen Se implementar la conversin digital de los voltajes generados por ngulos de un acelermetro, cuyo proceasamiento se realizar en un microcontrolador Atmega 64. Dichos ngulos se visualizarn a travs de 3 displays 7 segmentos nodo comn. Se trabajar en cuatro modos: El primero representar el rango en que se encuentran los tres ngulos simultneamente, mientras que en los otros tres, se podr visulaizar el valor de cado uno.
Palabras claves Atmega64, diplay 7 segmentos, acelermetro

III. COMPONENTES Y EQUIPOS - Microcontrolador Atmel ATmega 64 - Cable alimentacin microcontrolador - Protoboard - 1 Push-button N.A - 4 Cable JTAG -Cable USB - 3 display 7 segmentos nodo comn -Acelermetro ADXL335 -3 potencimetros 1 K [] - Cables -Alicates -Multmero -Ordenador -Software AVR Studio -Software AVR Programmer

I. INTRODUCCIN

n microcontrolador es un dispositivo 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. Una interrupcin es un llamado a procedimiento que afecta el actual estado de trabajo del MCU para ejecutar una nueva funcin. En el laboratorio, un push botn realizar interrupciones al proceso de conversin anlogo-digital para desplegar en pantalla el valor (voltaje) ingresado al MCU por un acelermetro y cambiar los distintos modos de visualizacin. A continuacin se muestran los resultados obtenidos en el laboratorio.

IV. MATERIALES Y MTODO -Simular programa Assembly en Proteus -Montar en protoboard displays correspondientes y el push botton. -Cargar en MCU el programa -Encender el MCU y verificar funcionamiento

V. DESARROLLO A. Solucin propuesta El sistema constar con cuatro estados que sern intercambiados por la accin de un botn, que ver interrumpida su conversin para efectuar el cambio. El sistema comenzar en el primer modo, donde se podr visualizar en los 3 displays el rango del ngulo correspondiente a cada entrada del conversor. Los dems modos entregarn informacin del valor del ngulo en forma individual para cada entrada.

II. OBJETIVOS -Programar un MCU Atmel ATMega64 en lenguaje Assembly utilizando interrupciones -Familiarizarse con la utilizacin del conversor AD que posee el MCU ATMega64 -Familiarizarse con la utilizacin de visores 7 segmentos para el despliegue de resultados

Informe de laboratorio N 3 B. Cdigo /* * adc1.asm * * Created: 28/11/2011 23:22:43 * Author: Administrador */ ldi tmp1, 0xff out PORTE, tmp1

ldi r27, 0x00 ;desplazamiento boton ldi r28, 0x00 ldi r23, 0b01100000

.include "m64def.inc" .def contador_sample = r23 .def bcd0 = r24 .def bcd1 = r25 .def tmp1 = r16 .def tmp2 = r17 .def tmp3 = r18 .def tmp4 = r19 .def bcd2 = r26 .equ NITER_SAMPLE = 10 .equ DELAYMS = 2000 .macro WAITMS ldi ZH, high(DELAYMS*@0) ldi ZL, low(DELAYMS*@0) loop_waitms: sbiw Z, 1 brne loop_waitms .endmacro .CSEG rjmp main .ORG INT4addr WAITMS 5 rjmp boton TABLA: .db 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E main: ldi tmp1, low(RAMEND) out SPL, tmp1 ldi tmp1, high(RAMEND) out SPH, tmp1 ldi tmp1, 0xff out DDRA, tmp1 ldi tmp1, 0xff out DDRC, tmp1 ldi tmp1, 0xff out DDRD, tmp1 ldi tmp1, 0x00 out DDRE, tmp1

// Bit 0 de puerta F es entrada (entrada anloga ADC0) ldi tmp1, 0x00 sts DDRF, tmp1 ; La puerta F est fuera del rango de instrucciones IN/OUT // Configuracin del ADC ldi tmp1, 0b00000000 sts ADCSRB, tmp1 ; ADTS2:ADTS0=000: Conversor en modo free running, no afecta en este caso porque no hay autotrigger clr bcd0 clr bcd1 clr bcd2 call DISPLAYBCD clr contador_sample sei loop: inc contador_sample cpi contador_sample, NITER_SAMPLE brne wait call SAMPLE clr contador_sample wait: WAITMS 5 rjmp loop SAMPLE: out ADMUX, r23 ; REFS1:REFS0=01: ref=AVCC, ADLAR=1: justificado izquierda, MUX4:MUX0=00000: entrada=ADC0 (bit 0 puerta F) ldi tmp1, 0b11011111 out ADCSRA, tmp1 ; ADEN=1; ADC habilitado, ADSC=1: iniciar conversin, ADATE=0: no auto-trigger, ADPS2:ADPS0=110: fclock/64: conversin en 104us loopADC2a: in tmp1, ADCSRA andi tmp1, 0x10 breq loopADC2a in bcd0, ADCH ;ingresa el contenido de ADCH en bcd0 mov bcd1, bcd0 mov bcd2, bcd1

Informe de laboratorio N 3 andi bcd0, 0x0F ;selecciona los bits menos significativos de bcd0 andi bcd1, 0x0f ;selecciona los bits menos significativos de bcd1 swap bcd2 ; invierte el contenido de bcd2 andi bcd2, 0x0F ;selecciona los bits menos significativos de bcd2 call DISPLAYBCD ret BCD7SEG: ldi ZH, high(Tabla*2) ;guarda en ZH los bits mas significativos del puntero de la TABLA ldi ZL, low(Tabla*2) ;guarda en ZL los bits menos significativos del puntero de la TABLA clr tmp2 add ZL, tmp1 ; suma tmp1 a ZL adc ZH, tmp2 ; suma tmp2 con carry a ZH lpm tmp1, Z ; guarda el contenido de la tabla apuntda por Z en el registro tmp1 ret DISPLAYBCD: mov tmp1, bcd0 ;guarda el contenido de bcd0, es decir el resultado de la conversion en ADCH menos significativos call BCD7SEG out PORTD, tmp1 ; muestra el contenido de tmp1 en la puerta D mov tmp1, bcd1 call BCD7SEG out PORTC, tmp1 mov tmp1, bcd2 ;guarda el contenido de bcd0, es decir el resultado de la conversion en ADCH mas significativos call BCD7SEG out PORTA, tmp1 ; ; muestra el contenido de tmp1 en la puerta D ret B.1. Cdigos de prueba ;Cdigo 1: Prueba botn y display

;Cdigo utiliza un push botn conectado en el puerto E del ;MCU y despliega en pantalla los nmeros del 0 al 9 en un display 7 segmentos nodo comn

.include "m64def.inc" .macro delay ldi ZH, high(2000*@0) ldi ZL, low(2000*@0) loop: sbiw Z,1 brne loop .endmacro inicializacion: ldi r16, 0x00 out DDRE, r16 ldi r16, 0xff out PORTE, r16 ldi r16, 0xff out DDRA, r16 ldi r19, 0xff ldi r17, 0x00 ldi r18, 0x00 main: cpi r18, 1 breq cero cpi r18, 2 breq uno cpi r18, 3 breq dos cpi r18, 4 breq tres cpi r18, 5 breq cuatro cpi r18, 6 breq cinco cpi r18, 7 breq seis cpi r18, 8 breq siete cpi r18, 9 breq ocho cpi r18, 10 breq nueve boton: out PORTA, r19 (Display)

;Librera

;Macro retardo

;Puerto E es entrada ;Activa pull up

;Puerto E es salida (Display)

;desplazamiento ;contador ;Men comparacin pulsacin boton

boton: WAITMS 5 inc r23 call SAMPLE reti // EL cambio entre modos se logra cambiando el valor de registro del ADMUX para seleccionar otro canal//

;Despliega en pantalla valor registro

Informe de laboratorio N 3 in r16, PINE andi r16, 0x01 lsl r17 or r17, r16 andi r17, 0x03 cpi r17, 0x02 breq contador delay 5 rjmp boton ;Lee push boton ;Cdigo 2: Interrupcin botn

;Cdigo utiliza un push botn para interrumpir lo que est ;ejecutando el MCU para desplegar en 3 displays 7 segmentos ;nodo comn los valores hexadecimales de una tabla .include "m64def.inc" .macro delay ldi ZH, high(2000*@0) ;Macro delay ldi ZL, low(2000*@0) loop: sbiw Z,1 brne loop .endmacro .def contador_sample = r23 .def bcd0 = r24 .def bcd1 = r25 .def tmp1 = r16 .def tmp2 = r17 .CSEG rjmp main .ORG INT4addr rjmp boton TABLA: .db 0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xF8, 0x80, 0x90, 0x88, 0x83, 0xC6, 0xA1, 0x86, 0x8E main: ldi tmp1, low(RAMEND) out SPL, tmp1 ldi tmp1, high(RAMEND) out SPH, tmp1 clr contador_sample ldi tmp1, 0xff out DDRC, tmp1 ldi tmp1, 0x00 out DDRE, tmp1 ldi tmp1, 0xff out PORTE, tmp1

contador: inc r18 rjmp main ;Valores Hexadecimales encendido display 7 segmentos cero: ldi r19, 0xC0 ;h g f e d c b a rjmp boton uno: ldi r19, 0xF9 rjmp boton dos: ldi r19, 0xA4 rjmp boton tres: ldi r19, 0xB0 rjmp boton cuatro: ldi r19, 0x99 rjmp boton cinco: ldi r19, 0x92 rjmp boton seis: ldi r19, 0x82 rjmp boton siete: ldi r19, 0xF8 rjmp boton ocho: ldi r19, 0x80 rjmp boton nueve: ldi r19, 0x90 clr r18 rjmp boton

;a ;f b ;g ;e c ;d ;h

ldi r16, 0b00010000 ; INT0 habilitada out EIMSK, r16 ldi r16, 0b00000011 ; INT0 por canto de subida sts EICRB, r16 sei loop: cpi contador_sample, 0x09 breq limpia rjmp loop

Informe de laboratorio N 3 limpia: clr contador_sample rjmp loop BCD7SEG: ldi ZH, high(Tabla<<1) ldi ZL, low(Tabla<<1) clr tmp2 add ZL, tmp1 adc ZH, tmp2 lpm tmp1, Z ret DISPLAYBCD: call BCD7SEG out PORTC, tmp1 ret boton: inc contador_sample mov tmp1, contador_sample delay 5 call DISPLAYBCD reti C. Implementacin de circuito

El circuito a implementar consiste en 1 pulsador que se conecta al puerto E del microcontrolador. Las resistencias del pull up estn integradas en la tarjeta. Por su parte, los tres displays se deben conectar al puerto A, C y D del microcontrolador. En el Puerto F se ingresarn las seales anlogas, en este caso, se usaron potencimetros

Fig.1. Simulacin en Proteus

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 2, Universidad de Concepcin, Departamento de Ingeniera Elctrica, 2011, pp 1-4

[2] http://es.scribd.com/doc/22595158/Crear-tablas-enensamblador-para-PIC. 23/09/2012; 23:30 hrs.

Informe de laboratorio N 3

Вам также может понравиться