Está en la página 1de 23

Lab.

N° 07 Conversión AD

PROGRAMACIÓN DE
MICROCONTROLADORES
IV CICLO
INFORME
Laboratorio N° 7

“CONVERSIÓN AD”
Integrantes:
BASURTO BERNAL, Candy Massiel
GUERREROS GUTIERREZ, Jose Jefferson
HUAMAN CHIPANA, Elio
YOPAN CUIPAL, Juber Antony

Profesor:
Ciriaco Martínez, Cesar Augusto

Fecha de realización: 21 de Abril

Fecha de Entrega: 28 de Abril

2017-1
1
Lab. N° 07 Conversión AD

Índice general

1. Introducción……………………………………………………………………………3
2. Objetivos generales…………………………………………………………………..4
3. Objetivos específicos.………………………………………………………………...4
4. Fundamento Teorico………………………………………………………………….4
4.1 Convertidores analógicos-digitales.…………………………………………….4
4.2 Registros……………....................................................................................4
4.3 ADRESH: ADRESL………………………………………………………….......5
4.4 Pasos para llevar a cabo una conversión:……………………………….........5
5. Procediminto…………………………………………………………………………....6
5.1 Copiar el siguiente programa, analiza.................................................................6
¿Qué sucede en el ADC?..............................................................................................7
¿En qué consiste el primer programa?........................................................7
¿Cuál es la fórmula que nos indica la resolución del adc de 8bits?...............7
¿Para un voltaje 2.8V, de cuánto es la conversión binaria?........................................7
¿Por qué utilizamos el puerto B?....................................................................7
Explicar brevemente la función de la librería adc.asm………………………...7
5.2 Copiar el siguiente programa, analiza……………………………………………...7
En qué consiste el segundo programa?.........................................................8
¿Hasta cuánto puede ser el valor cargado de W?..........................................8
¿Por qué se usan dos puertos de salida para este programa?.......................8
¿Cuáles es la ecuación para la resolución en el segundo programa? ………8
¿En qué canal del PIC se está ingresando las variaciones de voltaje dc? ....8
5.3 Mostrar evidencia de ejecución de los programas……………………………….9
Capturar ventanas que muestran el resultado del ensamble del proyecto....9
Capturar ventanas que muestren la simulación paso a paso........................9
Comentar la función de las instrucciones......................................................9
Tomar fotos a los módulos de trabajo ………………………………………….9
6. Aplicasion……………………………………………………………………………....9
7. Comcluiones………………………………………………………………………….10
8. Observaciones………………………………………………………………………10
9. Biblografias.………………………………………………………………………....10

2
Lab. N° 07 Conversión AD

1. Introducción:

El microcontrolador PIC16F877 de Microchip puede realizar una gran variedad de funciones, pero el que
vamos a estudiar es conversor analógico-digital. Antes de ingresar de lleno en el funcionamiento vamos
a comentar los elementos principales del convertidor análogo a digital. Las señales que se envían a través
de un medio guiado como un cable o no guiado como es el aire son de tipo continuo y pueden tomar
infinitos valores a lo largo del tiempo. El interés por digitalizar una señal puede surgir por varios motivos:
el hecho de querer guardar en un soporte digital o transmitirla digitalmente para poder reconstruirla,
poder tratar con programas. Acotando la señal en un intervalo de tiempo y unos valores mínimos y
máximos de tensión tenemos que tener en cuenta dos factores fundamentales a la hora de almacenar
dicha señal en un formato adecuado que pueda almacenarse digitalmente en unos y ceros se tiene que
muestrear y cuantificar. El muestreo implica que tenemos que coger una muestra de la señal cada tiempo
ya que no hay memoria suficiente capaz de almacenar los infinitos puntos de una señal en un intervalo
cualquiera de tiempo.

3
Lab. N° 07 Conversión AD

2. Objetivo General:

 Convertidor analógico/digital del PIC16F877A utilizando registros tales como ADRESH, ADRESL,
ADCON0 y ADCON1.

3. Objetivos Específico:

 Utilizar las instrucciones para programar al microcontrolador PIC16F877


 Utilizar software de desarrollo proporcionada por el fabricante.
 Implementación hardware.

4. Marco Teórico:

4.1. Convertidores analógicos-digitales.

Los convertidores A/D son dispositivos electrónicos que establecen una relación biunívoca entre el
valor de la señal en su entrada y la palabra digital obtenida en su salida. La relación se establece en
la mayoría de los casos, con la ayuda de una tensión de referencia.

La conversión A/D tiene su fundamento teórico en el teorema de muestreo y en los conceptos de


cuantificación y codificación.

Una primera clasificación de los convertidores A/D, es la siguiente:

 Conversores de transformación directa.


 Conversores con transformación (D/A) intermedia, auxiliar.

4.2. Registros

El conversor analógico digital usa cuatro registros para realizar la conversión:

A/D result high register (ADRESH)


A/D result low register (ADRESL)
A/D control register0 (ADCON0)
A/D control register1 (ADCON1)

ADCON0 (address: 1FH)

Controla las operaciones del módulo A/D.

Imagen 1. Registro ADCON0

4
Lab. N° 07 Conversión AD

4.3. ADRESH: ADRESL

Estos registros contienen los 10 bits del resultado de la conversión A/D. Cada uno de estos registros
es de 8 bits por lo que entre los dos suman un total de 16 bits. El conversor A/D tiene flexibilidad para
ajustar a la derecha o a la izquierda los 10 bits que son el resultado de la conversión en los 16 bits de
los registros de resultado. El bit de selección de formato (ADFM; bit 7 del registro ADCON1) controla
esta justificación. Con el bit de selección de formato a 1 la justificación será a la derecha, y puesto a
0 la justificación será a la izquierda. Los bits sobrantes se guardan con ceros.

Cuando la conversión A/D esta desactivada estos registros son usados como dos registros de 8 bits
de uso general

Imagen 2. Registros Desactivados.

4.4. Pasos para llevar a cabo una conversión:

Configuración del módulo A/D


Configuración de los puertos analógicos y de la referencia de voltaje (ADCON1: bits 3- 0)
Selección del canal de entrada (ADCON0 bits 5-3)
Selección del reloj de conversión (ADCON0: bits 7-6)
Encender el modulo A/D (ADCON0: bit 1)
Configuración de las interrupciones A/D (si se desea)
Espera del tiempo de adquisición requerido
Empezar la conversión.
Interrupción del A/D

Leer el resultado almacenado en ADRESH: ADRESL borrar el bit ADIF si se requiere.

*ADIF: bit interruptor del conversor A/D; 1 = conversión A/D completa (debe ser borrado en software), 0
= conversión A/D no completa.

**ADIE: bit de activación de la interrupción del convertidor A/D; 1 = activa la interrupción del convertidor,
0 = desactiva la interrupción del convertidor

5
Lab. N° 07 Conversión AD

Imagen 3. A/D Convertidor.

5. Procedimiento:

5.1. Copiar el siguiente programa, analizar, comentar, simular e implementar:

;---------------------------------------------
; Ejemplo de conversión ADC: 8bits
; Curso PIC16F877
; --------------------------------------------
- list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
Config 0x3f32
cblock 0x20
endc
org 0000h
;---------------------------------
banco 1
clrf trisb ;comentar:
banco 0

clrf portb ;comentar:


movlw .0 ;comentar:
call Inicio_ADC ;comentar:
repite

6
Lab. N° 07 Conversión AD
call ADC8Bits ;comentar:
movf RegADC1,0 ;comentar:
movwf portb ;comentar:
goto repite
;---------------------------------
include<electronicpic16f877.asm>
include<adc.asm> ;comentar:
end

Programación del Procedimiento 5.1. Solucion:

;---------------------------------------------

;Ejemplo de conversión ADC:8bits ;Curso PIC16F877


;---------------------------------------------

list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
__config 0x3f32
cblock 0x20
endc
org 0000h
;---------------------------------
banco 1
clrf trisb ;comentar:Definimos al Trisb como salidas
banco 0
clrf portb ;comentar:Ponemos al Portb en 0
movlw .0 ;comentar:Aqui escogemos en que canal entrará la señal análoga
call Inicio_ADC ;comentar:Llamamos a la subrutina para iniciar la conversión
repite
call ADC8Bits ;comentar:Empieza ka conversión a 8 bitsde una señal análoga
movf RegADC1,0 ;comentar:Los datos del registro RegADC1, se guardan en W
movwf portb ;comentar:Enviar los datos de W a los pines del PORTB
goto repite
;---------------------------------

include<electronicpic16f877.asm>
include<adc.asm> ;comentar:Lbrera para convertir una señal Análoga a Digital
end

7
Lab. N° 07 Conversión AD

Creación nueva de programación en MPLab:

Pasos a realizar:

Imagen 4. New proyecto se ejecutara de la creación de la nueva programación que se desea realizar.

Imagen 5. Visualizar nuestro proyecto vamos a la barra de menú

8
Lab. N° 07 Conversión AD

Imagen 6. Habilitar el simulador del MPLAB, para esto damos click en Debugger.

Imagen 7. Un nuevo archivo (Hoja de texto en blanco).

9
Lab. N° 07 Conversión AD

Imagen 8. Ventana de Guardar como buscamos nuestra carpeta que hemos creado.

Imagen 9. Programación 5.1 en MPLab.

10
Lab. N° 07 Conversión AD

Imagen 10. Implementación en Proteus.

11
Lab. N° 07 Conversión AD
Cuestionario de la programación:

 ¿Qué sucede en el ADC?

En convertidor de ADC solo toma los valores variables de las señales de entrada para luego convertirlo
en código binario.

 ¿En qué consiste el primer programa?

Este programa nos permite convertir una señal análoga de 0 a 5 voltios en una señal digital de
8 bits de 00000000 a 11111111 (0 a 255).

 ¿Cuál es la fórmula que nos indica la resolución del adc de 8bits?

La fórmula esta expresado entre la división de Vmax-entra entre dos elevado al número de bits.

Vref  Vref
2n  1
Donde:

Vref+: voltaje máximo de referencia


Vref-: voltaje mínimo de referencia
n: número de bits

Calculando: Para 8 bits la resolució de 19,6mV/bit

 ¿Para un voltaje 2.8V, de cuánto es la conversión binaria?

La conversión binaria seria ‘111100010b’

 ¿Por qué utilizamos el puerto B?

Se utilizó el puerto B porque este tiene 8 bits, también se pudo haber usado el puerto C y D.

 Explicar brevemente la función de la librería adc.asm

Esta librería sirve para activar el registro ADCON0 y luego realizar una conversión de una señal análoga a
digital de 8 o 10 bits.

 ¿En qué canal del PIC está ingresando el voltaje?

Se utilizó el canal 0 o el bit 0 del Port A.

5.2. Copiar el siguiente programa, analizar, comentar, simular e implementar:

;------------------------------------------------------
;Ejemplo de conversión ADC:10bits
;Curso PIC16F877

12
Lab. N° 07 Conversión AD
; -----------------------------------------------------
- list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
config 0x3f32
cblock 0x20
endc

org 0000h
; --------------------------------
- banco 1
clrf trisb ;comentar:
clrf trisc ;comentar:
banco 0

clrf portb ;comentar:


clrf portc ;comentar:
movlw .5 ;comentar:
call Inicio_ADC ;comentar:
repite
call ADC10Bits ;comentar:
movf RegADC1,0 ;comentar:
movwf portb ;comentar:
movf RegADC2,0 ;comentar:
movwf portc ;comentar:
goto repite
; --------------------------------
- include<electronicpic16f877.asm>
include<adc.asm> ;comentar:
end
Programación del Procedimiento 5.2. Solucion:
;------------------------------------------------------
;Ejemplo de conversión ADC:10bits ;Curso PIC16F877
;------------------------------------------------------
list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
__config 0x3f32
cblock 0x20
endc
org 0000h
;---------------------------------
banco 1
clrf trisb ;comentar:Se declara el TRISB como salida
clrf trisc ;comentar:Se declara el TRISC como salida
banco 0
clrf portb ;comentar:Se pone el PORTB en 0
clrf portc ;comentar:Se pone el PORTB en 0
movlw .0 ;comentar:Se selecciona el canal 0 del conversor
call Inicio_ADC ;comentar:Hace el llamado
repite
call ADC10Bits ;comentar:Se hace el llamado a la subrutina ADC10BITS
movf RegADC1,0 ;comentar:Movemos los datos del RegADC1 a W
13
Lab. N° 07 Conversión AD

movwf portb ;comentar:Enviamos los datos del W al PORTB


movf RegADC2,0 ;comentar:Movemos los datos del RegADC2 a W
movwf portc ;comentar:En viamos los datos de W a PORTC
goto repite
;---------------------------------
include<electronicpic16f877.asm>
include<adc.asm> ;comentar:
end

La mima creación de 8 bits se utilizara par el de 10 bits:

Imagen 11. En la ventana New Project tenemos que poner el nombre del proyecto.

Imagen 12. Para visualizar nuestro proyecto.

14
Lab. N° 07 Conversión AD

Imagen 13. Habilitar el simulador del MPLAB, para esto damos click en Debugger.

Imagen 14. Para visualizar nuestro proyecto.

Imagen 15. Programación de 10 bits.

15
Lab. N° 07 Conversión AD

Imagen 16. Implementación en el Proteus del 10 bits.

16
Lab. N° 07 Conversión AD

Cuestionario de la programación:

 ¿En qué consiste el segundo programa?

Este programa es similar al programa anterior, con excepción que este funciona con 10 bits. Podemos
decir que este programa te da una mejor resolución-

 ¿Hasta cuánto puede ser el valor cargado de W antes de llamar a Inicio_ADC?

Antes de hacer uso del INICIO ADC estaríamos utilizando todos los bits de ambos puertos B y C.

 ¿Por qué se usan dos puertos de salida para este programa?

Debido a que en este programa se utilizar 10 bits y en cada puerto solo hay 8 bits, es necesario
compensar esto con 2 bits más del puerto C

 ¿Cuáles es la ecuación para la resolución en el segundo programa?

(Vref  Vref ) Vref


Re solución  
1024 1024

Vref+: voltaje máximo de referencia


Vref-: voltaje mínimo de referencia

 ¿En qué canal del PIC se está ingresando las variaciones de voltaje dc?

En este caso también se hizo uso del canal 0 para introducir la tensión variable.

6. Aplicación de lo aprendido

Deberá ser conciso y redactado con lenguaje propio. Estará basado en las lecturas recomendadas o
cualquier otra información relacionada con el tema. En cualquier caso no será mayor de tres (03) páginas

Programación:
;---------------------------------------------
;Ejemplo de conversión ADC:8bits
;Curso PIC16F877
;---------------------------------------------
list p=16f877a
include<p16f877a.inc>
include<macro16f877.inc>
__config 0x3f32
cblock 0x20
endc
org 0000h
;---------------------------------
banco 1
clrf trisb
banco 0
clrf portb
cursor off

17
Lab. N° 07 Conversión AD
call Inicio_lcd

repite
movlw .0 ; canal 0
call Inicio_ADC

call ADC8Bits
movf RegADC1,0
movwf NumMult1 ;coloco el numero convertidoa NumMult1

movlw .47 ; constante para ser multiuplicada


movwf NumMult2

mensaje .10
desplazaderecha

call Mult8x8Bits

;------- primer numero DECENA DE MILLAR convertido y luego a ascci para enviarlo al LCD
movlw .48
addwf NumB2
putv NumB2

;------- segundo numero UNIDAD DE MILLAR convertido y luego a ascci para enviarlo al LCD
movlw .48
addwf NumB1
putv NumB1

;------- tercer numero CENTENA convertido y luego a ascci para enviarlo al LCD
movlw .48
addwf NumA3
putv NumA3

ponerc '.' ; SE COLOCA EL PUNTO DECIMAL

;------- cuarto numero DECENA convertido y luego a ascci para enviarlo al LCD
movlw .48
addwf NumA2
putv NumA2

;------- quinto numero UNIDAD convertido y luego a ascci para enviarlo al LCD
movlw .48
addwf NumA1
putv NumA1

;--------Para que salga la unidad de grados centigrados


ponerc'°'
ponerc'C'

;------no es necesario colocar los cursores "CURSOR 2", ya que ahora me voy a ir a la segunda linea

enter ;me voy a la segunda linea

18
Lab. N° 07 Conversión AD

;----------ahora VOLTAJE---------------------

movlw .1 ; canal 1
call Inicio_ADC

call ADC8Bits

movf RegADC1,0
movwf NumMult1

movlw .20 ;constante de multiplicacion


movwf NumMult2

mensaje .11
desplazaderecha

call Mult8x8Bits

;------- numero UNIDAD DE MILLAR convertido y luego a ascci para enviarlo al LCD
movlw .48
addwf NumB1
putv NumB1

ponerc '.' ; PUNTO DECIMAL

;------- numero CENTENA convertido y luego a ascci para enviarlo al LCD


movlw .48
addwf NumA3
putv NumA3

;-------numero DECENA convertido y luego a ascci para enviarlo al LCD


movlw .48
addwf NumA2
putv NumA2

;------- numero UNIDAD convertido y luego a ascci para enviarlo al LCD


movlw .48
addwf NumA1
putv NumA1

ponerc' '
ponerc'V'

milisegundo .100 ; para ver congelado las medidas ese tiempo


borralcd ; al borrar la pantalla lcd , automticamente se va a la primera columna
; y primera fila , asi que no es necesario colocar los "CURSOR 2"
; luego inicias nuevamnete las lecturas
goto repite

19
Lab. N° 07 Conversión AD

;---------------------------------
include<electronicpic16f877.asm>
include<adc.asm>
include<lcd.asm>
include<conversion.asm>
include<mult8x8.asm>
include<Mensaje.asm>

Implementación en el programa Proteus:

6. Conclusiones:

 Los códigos convertidos a binario, son almacenados en los registros RegADC1 cuando se usan 8
bits (RB0-RB7) y RegADC2, cuando se usan 10 bits de datos (RB0-RB7,RC0 y RC1).
 Antes de realizar la conversión, primero se debe elegir el canal por donde ingresará la señal
variable.
 Para el primer programa la resolución es de 19.6mV porque tiene más bits, por otro lado para
el segundo programa la resolución es de 4.89mV por ser solo 8 bits.
 La instrucción call nos va permitir llamar a las librerías en la programación.
 Utilizamos la librería (adc.asm) para utilizar los pines análogos del PIC y botar los valores de la
conversión Análogo-Digital en las salidas RB y RC.

7. Observaciones:

 A mayor cantidad de bits para el conversor ADC se tiene una mejor resolución en la conversión
digital, esto permite representar digitalmente de forma más exacta la señal analógica.
 La programación en Assembler contiene la instrucción “include” que permiten ingresar a otra
hoja de programación de la misma carpeta donde se ha creado el proyecto.
 El PIC 16f877a tiene 8 canales de conversión Análogo-Digital, los cuales van desde AN0 hasta
AN7.

20
Lab. N° 07 Conversión AD
 Se logró convertir una señal variable (analógica) de 0 a 5 voltios a códigos binarios usando el
PIC 16F877A con la principal ayuda de la librería adc.asm.
 En Assembler se pueden crear macros, el cual permite crear instrucciones que facilitan el
desarrollo y elaboración de una programación.

8. Bibliografías:

Recuperado de:
file:///C:/Users/User/Downloads/convertidor_anlogo_digital_pic_16f877a_448.pdf
Recuperado de: http://www.puntoflotante.net/CONVERTIDORAD.htm
Recuperado de:
http://grupovirtus.org/moodle/pluginfile.php/4494/mod_resource/content/1/SEMANA_6/material_2.pdf
Recuperado de: Microchip section 23: basic 10 bit A/D converter
Recuperado de: www.todopic.com.ar

21
Lab. N° 07 Conversión AD

pág. 8

También podría gustarte