UNIVERSIDAD MAYOR DE SAN
ANDRESFACULTAD DE TECNOLOGIA
ELECTRONICA Y TELECOMUNICACIONES
LABORATORIO N° 1
PUERTOS ANALÓGICOS DEL
MICROCONTROLADOR ATMEGA 32
INTEGRANTES:
- Argani Mamani Pedro Alejandro
- Jiménez Motiño Gustavo Adolfo
- Parisaca Mamani Gregory Adailton
- Guarena Mano José Carlos
DOCENTE: Lic. Arturo Marín
MATERIA: Laboratorio de microcontroladores II
LA PAZ – BOLIVIA
MICROCONTROLADOR ATMEGA 32
1. Objetivos: El estudiante al finalizar este laboratorio:
➢ Conoce los registros del microcontrolador ATMEGA 32 encargados de controlar los
puertos analógicos.
➢ Desarrolla programas que permiten leer datos analógicos de sensores de diferente
naturaleza.
2. Fundamento teórico:
El microcontrolador ATMEGA posee 8 pines habilitados para la conversión analógica
digital; el principio de conversión es por aproximaciones sucesivas y su resolución es de
10 bits. Algunas de las características del conversor analógico digital son las siguientes:
▪ 0,5 LSB no lineal
▪ 13 a 260 µs tiempo de conversión
▪ 8 canales de entrada multiplexados en una sola terminación
▪ 7 canales de entrada diferenciales
▪ Voltaje de referencia seleccionable a 2,56 V
▪ Interrupción de conversión completa del ADC
También se incorpora un módulo de muestreo y retención el cual asegura que el voltaje de
entrada al ADC se mantenga constante durante la conversión. En el proceso de
conversión se utiliza un terminal de alimentación separado (AVcc) el cual debe tener un
voltaje igual al Vcc general del microcontrolador, salvo una pequeña diferencia de no más
de ±0.3 V. El microcontrolador soporta 16 combinaciones de voltajes de entrada
diferenciales. Los pines de entrada ADC1 y ADC0 además de ADC2 y ADC3 están
equipadas con una etapa de ganancia programable, con etapas de amplificación de 0 dB
(1x), 20 dB (10x) y 46 dB (200x). Con una ganancia de 1x o 10 x la resolución es de 8 bits
en tano que con una ganancia de 200 x la resolución es de 7 bits.
3. TRABAJO DE LABORATORIO
1. Armar el siguiente circuito con el microcontrolador ATMEGA 32 para digitalizar una
señal analógica introducida por el pin PA.0 (Puerto A pin 0). Comprobar el funcionamiento
del código que también se proporciona.
DIAGRAMA DE FLUJO
INICIO
CONFIGURAR LA
HABILITACION DEL PUERTO
ANALOGICO EL PUERTO B Y
PUERTO D COMO SALIDA
INGRESAR VOLTAJE POR
EL PUERTO ANALOGICO
HACIA EL CONVESOR
IMPRIMIR POR DISPLAY Y BARRA DE LEDS ELDATO
INGRESADO ANALOGICAMENTE
FIN
CODIGO FUENTE COMENTADA
DIAGRAMA ESQUEMATICO DEL CIRCUITO
2. Realizar un programa en lenguaje ensamblador para ATMEGA 32 que permita leer el valor de dos
señales de tensión analógicas introducidas por los canales según la tabla adjunta. El valor leído será
visualizado a través de LEDs conectados al puerto D (8 bits) y al puerto B (2 bits). La selección del
canal será realizada por medio de un pulsador conectado al pin PB7. Además debe mostrarse el
canal seleccionado mediante un display 7 segmentos conectado al puerto C. Este programa será
evaluado para obtener la primera firma.
DIAGRAMA DE FLUJO
INICIO
CONFIGURAR EL PUERTO ANALOGICO EN LOS CANALES 3 Y 6, BOTON
EN PUERTO B Y EL PUERTO B Y EL PUERTO D COMO SALIDA
SI NO
SE PRESIONO
EL BOTON DE
PORTB
SE PRESIONO EL BOTON DEL SE PRECIONO EL BOTON
PORTB Y SE MUESTRA DEL PORTB Y SE MUESTRA
DATOS DEL CANAL 3 DATOS DEL CANAL 6
IMPRIMIR POR DISPLAY Y BARRA DE LEDS ELDATO
INGRESADO ANALOGICAMENTE EL VALOR Y EL CANAL
FIN
CODIGO FUENTE COMENTADA
.INCLUDE"M32DEF.INC"
.ORG 0x00
RJMP INICIO
INICIO:
LDI R16, HIGH (RAMEND)
OUT SPH, R16
LDI R16,LOW(RAMEND)
OUT SPL,R16 ; INICIALIZANDO EL PUNTERO DE PILA
CBI DDRB,7 ;BIT 7 DEL PUERTO B CONFIGURADO COMO
ENTRADA
SBI DDRB,0 ;BIT 0 DEL PUERTO B CONFIGURADO COMO
SALIDA
SBI DDRB,1 ;BIT 1 DEL PUERTO B CONFIGURADO COMO
SALIDA
CBI DDRA,3 ;BIT 3 DEL PUERTO A CONFIGURADO COMO
ENTRADA
CBI DDRA,6 ;BIT 6 DEL PUERTO A CONFIGURADO COMO
ENTRADA
SER R16 ;R16=0b11111111
OUT DDRD, R16 ;CONFIGURANDO EL PUERTO D COMO
SALIDA
SER R16 ;R16=0b11111111
OUT DDRC, R16 ;CONFIGURANDO EL PUERTO C COMO
SALIDA
LDI R16,0x85
OUT ADCSRA,R16 ;HABILITAMOS EL ADC Y SELECCIONAMOS
CK/32
PRINCIPAL: SBIS PINB,7
RJMP CANAL3
RJMP CANAL6
CANAL3: LDI R16,0x43
OUT ADMUX,R16 ;CONFIGURAMOS VREF=AVCC,
JUSTIFICADO A LA DERECHA, CANAL ADC3
LDI R17,0x4F
OUT PORTC,R17
RJMP LEER_ADC
CANAL6: LDI R16,0x046
OUT ADMUX,R16 ;CONFIGURAMOS VREF=AVCC,
JUSTIFICADO A LA DERECHA, CANAL ADC6
LDI R17,0x7D
OUT PORTC,R17
LEER_ADC: SBI ADCSRA,ADSC ;INICIA LA CONVERSION
BUCLE: SBIS ADCSRA,ADIF ;SALTA SIGUIETE INSTRUCCION SI LA
CONVERSION A TERMINADO
RJMP BUCLE
SBI ADCSRA, ADIF ;ESCRIBIMOS UN 1 PARA LIMPIAR LA
BANDERA ADIF
IN R16,ADCL ;CARGAMOS EL CONTENIDO DEL REGISTRO
ADCL A R16
OUT PORTD, R16 ;VISUALIZAMOS POR EL PUERTO D
IN R16,ADCH ;CARGAMOS EL CONTENIDO DEL REGISTRO
ADCH A R16
OUT PORTB,R16 ;VISUALIZAMOS POR EL PUERTO B
RJMP PRINCIPAL
DIAGRAMA ESQUEMATICO DEL CIRCUITO
CANAL 6 AL NO PRESIONAR BOTON
CANAL 3 AL PRESIONAR BOTON
3. Realizar un programa en lenguaje ensamblador para ATMEGA 32 que permita leer el valor de
cuatro señales de tensión analógicas introducidas por los canales según el orden proporcionado en
la tabla adjunta. El valor leído será visualizado a través de LEDs conectados al puerto D (8 bits) y al
puerto B (2 bits). La selección de los canales será realizada por medio de dos switches conectados
a los pines PB6 y PB7. Además añadir un display 7 segmentos al puerto C para visualizar el canal
seleccionado. Este programa será evaluado para obtener la segunda firma.
DIAGRAMA DE FLUJO
INICIO
CONFIGURAR EL PUERTO ANALOGICO EN LOS CANALES 3 ,2, 6 Y 7, SWITCH EN
PUERTO B Y EL PUERTO B Y EL PUERTO D COMO SALIDA
SE PRESIONO
EL SWITCH
SE PRESIONO EL SE PRESIONO EL SE PRESIONO EL SE PRESIONO EL
SWITCH 00 DEL PORTB SWITCH 01 DEL PORTB SWITCH 10 DEL PORTB SWITCH 11 DEL PORTB
Y SE MUESTRA DATOS Y SE MUESTRA DATOS Y SE MUESTRA DATOS Y SE MUESTRA DATOS
DEL CANAL 6 DEL CANAL 7 DEL CANAL 2 DEL CANAL 3
IMPRIMIR POR DISPLAY Y BARRA DE LEDS ELDATO
INGRESADO ANALOGICAMENTE EL VALOR Y EL CANAL
FIN
CODIGO FUENTE COMENTADA
.INCLUDE"M32DEF.INC"
.ORG 0x00
RJMP INICIO
INICIO:
LDI R16, HIGH (RAMEND)
OUT SPH, R16
LDI R16,LOW(RAMEND)
OUT SPL,R16 ;INICIALIZANDO EL PUNERO DE PILA
CBI DDRB,7 ;BIT 7 DEL PUERTO B CONFIGURADO COMO ENTRADA
CBI DDRB,6 ;BIT 6 DEL PUERTO B CONFIGURADO COMO ENTRADA
SBI DDRB,0 ;BIT O DEL PUERTO B CONFIGURADO COMO SALIDA
SBI DDRB,1 ;BIT 1 DEL PUERTO B CONFIGURADO COMO SALIDA
CBI DDRA,2 ;BIT 2 DEL PUERTO A CONFIGURADO COMO ENTRADA
CBI DDRA,3 ;BIT 3 DEL PUERTO A CONFIGURADO COMO ENTRADA
CBI DDRA,6 ;BIT 6 DEL PUERTO A CONFIGURADO COMO ENTRADA
CBI DDRA,7 ;BIT 7 DEL PUERTO A CONFIGURADO COMO ENTRADA
SER R16 ;R16=0B11111111
OUT DDRD, R16 ;CONFIGURANDO EL PUERTO D COMO SALIDA
SER R16 ;R16=0B11111111
OUT DDRC, R16 ;CONFIGURANDO EL PUERTO D COMO SALIDA
LDI R16,0x85
OUT ADCSRA,R16 ;HABILITAMOS EL ADC Y SELECCIONAOS CK/32
PRINCIPAL: IN R16,PINB
ANDI R16,0xC0 ;REALIZA UN AND LOGICO ENTRE EL REGISTRO R16 Y
UNA CONSTANTE
CPI R16,0x00 ;REALIZA UNA COMPARACION ENTRE EL R16 Y UNA
CONSTANTE
BREQ CANAL6
CPI R16,0x40 ;REALIZA UNA COMPARACION ENTRE EL R16 Y UNA
CONSTANTE
BREQ CANAL2
CPI R16,0x80 ;REALIZA UNA COMPARACION ENTRE EL R16 Y UNA
CONSTANTE
BREQ CANAL7
CPI R16,0xC0 ;REALIZA UNA COMPARACION ENTRE EL R16 Y UNA
CONSTANTE
BREQ CANAL3
CANAL6: LDI R16,0x46
OUT ADMUX,R16 ;CONFIGURAMOS VREF=AVCC, JUSTIFICADO A LA
DERECHA, CANAL ADC3
LDI R17,0x7D
OUT PORTC,R17
RJMP LEER_ADC
CANAL2: LDI R16,0x42
OUT ADMUX,R16 ;CONFIGURAMOS VREF=AVCC, JUSTIFICADO A LA
DERECHA, CANAL ADC3
LDI R17,0x5B
OUT PORTC,R17
RJMP LEER_ADC
CANAL7: LDI R16,0x47
OUT ADMUX,R16 ;CONFIGURAMOS VREF=AVCC, JUSTIFICADO A LA
DERECHA, CANAL ADC3
LDI R17,0x07
OUT PORTC,R17
RJMP LEER_ADC
CANAL3: LDI R16,0x043
OUT ADMUX,R16 ;CONFIGURAMOS VREF=AVCC, JUSTIFICADO A LA
DERECHA, CANAL ADC3
LDI R17,0x4F
OUT PORTC,R17
LEER_ADC: SBI ADCSRA,ADSC ;INICIA LA CONVERSION
BUCLE: SBIS ADCSRA,ADIF ;SALTA SIGUIETE INSTRUCCION SI LA
CONVERSION A TERMINADO
RJMP BUCLE
SBI ADCSRA, ADIF ;ESCRIBIMOS UN 1 PARA LIMPIAR LA BANDERA ADIF
IN R16,ADCL ;CARGAMOS EL CONTENIDO DEL REGISTRO ADCL A
R16
OUT PORTD, R16 ;VISUALIZAMOS POR EL PUERTO D
IN R16,ADCH ;CARGAMOS EL CONTENIDO DEL REGISTRO ADCL A
R16
OUT PORTB,R16 ;VISUALIZAMOS POR EL PUERTO D
RJMP PRINCIPAL
DIAGRAMA ESQUEMATICO
SE PRESIONO EL SWITCH 00 DEL PORTB Y SE MUESTRA DATOS DEL CANAL 6
SE PRESIONO EL SWITCH 01 DEL PORTB Y SE MUESTRA DATOS DEL CANAL 7
SE PRESIONO EL SWITCH 10 DEL PORTB Y SE MUESTRA DATOS DEL CANAL 2
SE PRESIONO EL SWITCH 11 DEL PORTB Y SE MUESTRA DATOS DEL CANAL 3
CONCLUCIONES
➢ Al desarrollar el programa se encontro solamente la dificuldad de la selección de
canales, se realizo un programa concreto para lograr hacer correr el programa.
➢ El implementar las instrucciones como por ejemplo la instrucción ADIF nos ayudo a
realizar un complemento basico para la programacion.