Tema: Utilización del módulo ADC en los microcontroladores PIC.

Anuncio
Microcontroladores. Guía 4
1
Facultad: Ingeniería
Escuela: Electrónica
Asignatura: Microcontroladores
Lugar de ejecución: Laboratorio de
microprocesadores, Edif. 3 Electrónica.
Tema: Utilización del
microcontroladores PIC.
módulo
ADC
en
los
Objetivo general
•
Utilizar el módulo ADC de los microcontroladores PIC para diseñar
sistemas que interactúen con componentes analógicos.
Objetivos específicos
•
•
•
Conocer la forma de inicialización del módulo ADC así como la
forma en que se inician las conversiones y se verifica su
finalización.
Utilizar la técnica de alineación a la izquierda para realizar
lecturas de 8 bits.
Utilizar display de 7 segmentos para representar cantidades en
hexadecimal.
Materiales y equipo
•
•
•
•
•
•
•
•
•
•
•
•
•
Computadora personal con puerto paralelo, sistema operativo
Windows XP, software MPLAB y WinPic800.
Tarjeta de entrenamiento CP-PIC877 V1.0 R1.
Programador ET-CAB10PIN V2.
Fuente de poder de 12V con borne redondo de 5mm.
Cable de cinta plana de 28 pines con conector para breadboard.
Breadboard.
2 display de 7 segmentos de ánodo común.
7 resistencias limitadoras de 330Ω.
2 transistores 2N3904 (NPN).
2 resistencias de 2.2KΩ.
Potenciómetro de 1KΩ.
Multímetro digital.
Cable UTP categoría 5.
Microcontroladores. Guía 4
2
Procedimiento
1. Construya el circuito que se le presenta en la figura 1. Dicho
circuito se conectará a la tarjeta de entrenamiento con el
diagrama de pines que aparece en la figura 2.
Figura 1 – Diagrama de conexión para el circuito en la breadboard.
Figura 2 – Organización de los pines de I/O de la tarjeta entrenadora.
Microcontroladores. Guía 4
3
2. Una vez ensamblado el circuito, conecte el cable plano a la
tarjeta entrenadora. Solicite a su instructor de laboratorio que
verifique su circuito (el circuito se encenderá más adelante).
3. A continuación ejecute el programa MPLAB. Cree un nuevo proyecto
con el PIC16F877.
4. Agregue un nuevo archivo de código fuente llamado “Principal.asm”
(no olvide agregar la extensión .asm cuando lo guarde). Y copie el
siguiente programa en el archivo:
;Programa de ejemplo para utilización de ADC con display de 7 segmentos
list p=16f877
;Definición del microcontrolador a usar
#include <p16f877.inc> ;Cabecera que define los registros del MCU
;Bits de configuración del MCU
cfg1 equ _CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_ON
cfg2 equ _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC
__config cfg1 & cfg2
;Declaracion de constantes
CatodoDig0 equ d'1' ;Se definen las constantes a 1 y 2 para indicar que
CatodoDig1 equ d'2' ;los catodos comunes se controlan con RA1 y RA2
;Declaracion de datos en memoria
Mis_Variables udata
Valor_ADC res 1
;Variable que guarda el resultado de la conversion
ConteoRetardo res 1 ;Variable que guarda el conteo de retardo
PROG1 code
;========================================================================
;Rutina principal
;---------------;Esta rutina se encuentra en la direccion 0x00000 (vector de arranque)
clrf PORTA
;Se coloca el valor de los puertos a 0 antes de
clrf PORTC
;establecerlos como salida
bsf STATUS, RP0
;Se selecciona el banco 1
;Se inicializa el registro ADCON1 del ADC
movlw 0x0E
;Configura los canales para usar solo RA0/AN0 y
movwf ADCON1
;selecciona la justificacion a la izquierda
movlw 0x01
movwf TRISA
clrf TRISC
;Se coloca RA0 como entrada (analoga). El resto son
;salidas (incluyendo a RA1 y RA2).
;Todo el puerto C se establece como salidas
bcf STATUS, RP0
;Selecciona el banco 0 nuevamente
Microcontroladores. Guía 4
4
;Se inicaliza ahora el registro ADCON0 del ADC. Notese que se usa
;el reloj interno del ADC debido a que la velocidad no es critica y
;la aplicacion no requiere exactitud en la velocidad de conversion.
movlw 0xC1
;Selecciona el reloj interno, selecciona tambien el
movwf ADCON0
;canal cero del ADC (AN0) y activa el ADC.
;Nota: en caso de usar varios canales, puede modificarse este registro
;para intercambiarlos.
clrf Valor_ADC
;Limpia la variable
Rutina:
bsf ADCON0, GO_DONE
btfsc ADCON0, GO_DONE
goto $-1
;Inicia la conversion del ADC
;Espera a que la conversion termine por
;medio de verificar el mismo bit
movf ADRESH, w
;Toma el resultado del ADC y lo guarda
movwf Valor_ADC
;Nota: Dado que se utilizo la justificacion a la izquierda, se pueden
;tomar solo los 8 bits mas significativos y usarlos como resultado.
;Esto puede realizarse si solo se necesitan 8 bits de resolucion y no
;los 10 que provee el ADC.
;Se actualiza el primer display
movlw 0x0F
;Alista los 4 LSB
andwf Valor_ADC, w
call Tabla_Display
;Se determina la combinacion de segmentos
movwf PORTC
;Coloca el resultado en el puerto C
bsf PORTA, CatodoDig0
;Activa el catodo del display
movlw d'5'
;Espera durante 5ms
call Retardo
bcf PORTA, CatodoDig0
;Desactiva el catodo del display
;Actualiza el segundo display
swapf Valor_ADC, w
;Alista los 4 MSB
andlw 0x0F
call Tabla_Display
;Se determina la combinacion de segmentos
movwf PORTC
;Coloca el resultado en el puerto C
bsf PORTA, CatodoDig1
;Activa el catodo del display
movlw d'5'
;Espera durante 5ms
call Retardo
bcf PORTA, CatodoDig1
;Desactiva el catodo del display
goto Rutina
;Repite el proceso
;========================================================================
;Rutina de retardo variable
;-------------------------;Esta rutina genera un retardo segun la cantidad de milisegundos indicada
;en el acumulador. Si el acumulador vale 0, el retardo es de 256ms.
Retardo:
movwf ConteoRetardo ;Guarda la cuenta de milisegundos en memoria
Microcontroladores. Guía 4
5
Nuevo_Retardo:
movlw d'250'
Retardo_1ms:
addlw -d'1'
;Resta uno a la cuenta en el acumulador - 1 clock
btfss STATUS, Z
;Verifica si la cuenta llego a cero
- 1 clock
goto Retardo_1ms
;Continua iterando mientras no termina - 2 clock
;Calculo para el retardo interno:
;T = 4 x Numero de iteraciones x Intrucciones por iteracion
;
-----------------------------------------------------;
frecuencia de oscilador
;T = 4 x 250 x 4
;
----------;
4MHz
;T = 1ms
decfsz ConteoRetardo, f ;Decrementa la cuenta de milisegundos
goto Nuevo_Retardo
;Mientras no sea cero, repite
return
;Cuando llega a cero, retorna
;========================================================================
;Rutina de tabla de conversion para display de 7 segmentos.
;---------------------------------------------------------;Esta rutina toma el valor de un digito hexadecimal en W, y lo convierte
;al valor que activa los segmentos del display para desplegarlo.
Tabla_Display:
addwf PCL, f
;Distribucion de los segmentos
;
gfedcba
Digito
retlw b'00111111'
;0
retlw b'00000110'
;1
retlw b'01011011'
;2
retlw b'01001111'
;3
retlw b'01100110'
;4
retlw b'01101101'
;5
retlw b'01111101'
;6
retlw b'00000111'
;7
retlw b'01111111'
;8
retlw b'01101111'
;9
retlw b'01110111'
;A
retlw b'01111100'
;b
retlw b'00111001'
;C
retlw b'01011110'
;d
retlw b'01111001'
;E
retlw b'01110001'
;F
end
;Fin del programa
Listado 2 – Código fuente de la librería a implementar.
5. Agregue al proyecto el archivo de de guión de enlace (linker
script) con el nombre “16f877.lkr”.
Microcontroladores. Guía 4
6
6. Compile el programa y verifique que no se generen errores.
7. Prepare el programador conectando primero la cincha plana al
último conector del extremo del tablero, a continuación conecte el
programador al puerto paralelo de su PC. Prepare la tarjeta
conectando el cable de poder a la misma y luego conectando la
cincha que viene del programador al conector amarillo. Finalmente
encienda la fuente.
8. Ejecute a continuación el programa WinPic800. Asegúrese de que
está elegido el programador “ETT-LOW VPP ICSP” en el puerto
paralelo correcto. Ejecute la rutina de detección automática de
dispositivo para que el software quede configurado.
9. Cargue el archivo .hex generado al compilar el programa y
descárguelo en el PIC. Una vez terminado, corrobore que el
programa
fue
programado
correctamente
con
la
rutina
de
comprobación del WinPic800.
10. En estos momentos los display deberían estar
cantidad en hexadecimal. ¿Que cantidad presentan?
mostrando
una
11. Ajuste la perilla del potenciómetro y verifique que la lectura
del display cambia conforme la mueve.
12. Ajuste la tensión en el pin RA0 a 0V ayudándose del multímetro.
¿Que valor se presenta en los display? Anótelo:_________
13. Ahora ajuste la tensión en RA0 a 5V y anote el resultado: _______
14. Finalmente, ajuste la tensión a 2.5V y anote el resultado: ______
15. Con la ayuda de su instructor modifique el programa de manera que
el microcontrolador muestre el mensaje “HI” en los display en caso
que el voltaje exceda los 4V, y que muestre el mensaje “LO” en
caso que se reduzca por debajo de 1V. Una vez realizados los
cambios, compile su programa y descárguelo a su tarjeta de
entrenamiento para verificar su funcionamiento.
16. Apague la tarjeta de entrenamiento, desconecte el programador de
la tarjeta y la PC, y apague su computadora. Deje todo en orden en
su puesto de trabajo y entregue los materiales a su instructor.
Microcontroladores. Guía 4
7
Análisis de resultados
•
•
¿Los valores medidos en los pasos 12, 13 y 14 son adecuados?
Determine los valores teóricos y compárelos con los obtenidos.
Si se tuviera un sensor de temperatura conectado al ADC, ¿de qué
manera podría activarse un ventilador en caso que la temperatura
exceda cierto valor? ¿Que cambios habría que realizar al
programa presentado en la práctica para lograrlo?
Investigación complementaria
•
•
Investigue qué aplicaciones puede dársele a un ADC para sistemas
de control de lazo cerrado.
¿Qué es y en que consiste el efecto conocido como “aliasing”?
¿Qué relación posee con el ADC?
Referencias bibliográficas
•
•
Hoja técnica del microcontrolador PIC16F877A:
http://ww1.microchip.com/downloads/en/DeviceDoc/39582b.pdf
Palacios, Enrique - Remiro, Fernando y López, Lucas.
Microcontrolador PIC16F84: Desarrollo de proyectos. Segunda
edición. Coedición Alfaomega RA-MA.
8
Microcontroladores. Guía 4
Hoja de cotejo: 4
Guía 4:Utilización del módulo ADC en los microcontroladores PIC.
Alumno:
Puesto No:
Docente:
GL:
Fecha:
EVALUACION
%
1-4
5-7
CONOCIMIENTO
25
Explica
deficientemente
cómo opera el
módulo ADC.
Explica cómo
opera el módulo,
pero desconoce
sus registros.
APLICACIÓN
DEL
CONOCIMIENTO
25
No creó el
programa
correctamente y
posee muchos
errores.
El circuito armado
presenta
problemas y no
opera.
No hizo las
modificaciones del
paso 15 o las
mismas no son
correctas.
Es un observador
pasivo.
Creó el programa y
se compila, pero
no funciona ya en
el dispositivo.
25
20
ACTITUD
2.5
2.5
TOTAL
100
Es ordenado pero
no hace un uso
adecuado de los
recursos.
El circuito
ensamblado
presenta algunos
problemas.
Hizo las
modificaciones
pero los resultados
difieren de lo
esperado.
Participa
ocasionalmente o
lo hace
constantemente
pero sin
coordinarse con su
compañero.
Hace un uso
adecuado de lo
recursos, respeta
las pautas de
seguridad, pero es
desordenado.
8-10
Explica
claramente cómo
opera el módulo
ADC y sus
registros.
El programa
creado se compila
y funciona
correctamente en
el dispositivo.
El circuito
ensamblado
funciona
correctamente.
Hizo las
modificaciones y
producen los
resultados
correctos.
Participa
propositiva e
integralmente en
toda la práctica.
Hace un manejo
responsable y
adecuado de los
recursos conforme
a pautas de
seguridad e
higiene.
Nota
Descargar