Publicado el 10 de Junio del 2020
744 visualizaciones desde el 10 de Junio del 2020
100,5 KB
8 paginas
Creado hace 13a (18/07/2011)
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 módulo ADC en los
microcontroladores PIC.
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 ;Se coloca RA0 como entrada (analoga). El resto son
movwf TRISA ;salidas (incluyendo a RA1 y RA2).
clrf TRISC ;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 ;Inicia la conversion del ADC
btfsc ADCON0, GO_DONE ;Espera a que la conversion termine por
goto $-1 ;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 mostrando una
cantidad en hexadecimal. ¿Que cantidad presentan?
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
Comentarios de: Tema: Utilización del módulo ADC en los microcontroladores PIC (0)
No hay comentarios