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