Microcontroladores. Guía 6 1 Facultad: Ingeniería Escuela: Electrónica Asignatura: Microcontroladores Lugar de ejecución: Laboratorio de microprocesadores, Edif. 3 Electrónica. Tema: Comunicación serie entre PIC y PC. Objetivo general • Utilizar el módulo USART en los microcontroladores PIC para comunicar computadoras personales y sistemas embebidos que realizan tareas de control y monitoreo. Objetivos específicos • • • • Conocer la forma de inicialización del módulo USART. Definir los parámetros de comunicación de puerto serie (velocidad, número de bits de datos, número de bits de parada y paridad) y configurar ambos extremos (PC y MCU) para que los usen simultáneamente. Controlar sistemas externos tomando decisiones desde una PC. Monitorear sistemas externos a través de un microcontrolador conectado a una PC. 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. 1 Resistencia de 680Ω. 1 LED. 1 Resistencia de 10KΩ. 1 Botón pulsador simple. Cable UTP categoría 5. 1 Cable serie DTE/DCE. 1 Adaptador de puerto serie para el entrenador CP-PIC877 V1.0 R1. 2 Microcontroladores. Guía 6 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. 2. Una vez ensamblado el circuito, conecte el cable plano a la Microcontroladores. Guía 6 3 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 para utilización de puerto serie y comunicacion con PC 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 datos en memoria Mis_Variables udata DatoRX res 1 PROG1 code ;======================================================================== ;Rutina principal ;---------------clrf PORTC ;Se coloca el latch de salida a 0 bsf STATUS, RP0 ;Se selecciona el banco 1 movlw 0x0C0 movwf TRISC ;Los pines del puerto serie deben ser configurados ;como entrada para que el modulo USART opere movlw 0x26 movwf TXSTA ;Configuracion del puerto serie: 8 bits, TX ;habilitada, modo asincrono y alta velocidad (los ;demas bits desactivan otras caracteristicas) movlw d'25' movwf SPBRG ;Establece la velocidad del puerto a 9600 baudios, ;usando un oscilador a 4MHz bcf STATUS, RP0 ;Selecciona banco 0 movlw 0x90 movwf RCSTA ;Configuracion del puerto serie: Puerto habilitado, ;8 bits, recepcion continua habilitada y no detectar ;direcciones (los demas bits no tienen efecto) Rutina: call Recibir ;Inicialmente llama a la rutina de recepcion de datos Microcontroladores. Guía 6 4 btfss STATUS, C goto Rutina ;Verifica si se ha recibido un dato ;De no ser asi, sigue esperando a que haya datos movwf DatoRX ;Hubo dato, asi que se guarda movlw '1' subwf DatoRX, w btfsc STATUS, Z call EncenderLED ;Se verifica si se recibio un '1' (ascii 0x31) movlw '0' subwf DatoRX, w btfsc STATUS, Z call ApagarLED ;Se verifica ahora si se recibio un '0' (ascii 0x30) ;De ser asi, va a la rutina de encendido ;De ser asi, va a la rutina de apagado ;NOTA: En caso que el caracter recibido no sea ni un '1' ni un '0', ;entonces el mismo es ignorado goto Rutina ;Una vez hecho el proceso, lo repite ;Subrutina de encendido de LED ;----------------------------EncenderLED: bsf PORTC, 0 ;Primeramente enciende el LED ;Luego envia los caracteres "ON" seguidos de un retorno de linea movlw 'O' call Transmitir movlw 'N' call Transmitir movlw 0x0D call Transmitir movlw 0x0A call Transmitir return ;Subrutina de apagado de LED ;--------------------------ApagarLED: bcf PORTC, 0 ;Apaga el LED ;Luego envia los caracteres "OFF" seguidos de un retorno de linea movlw 'O' call Transmitir movlw 'F' call Transmitir movlw 'F' call Transmitir movlw 0x0D call Transmitir Microcontroladores. Guía 6 5 movlw 0x0A call Transmitir return ;Subrutina de transmision de datos ;--------------------------------;Esta rutina envia un dato por el puerto serie (modulo USART). En caso que ;el buffer de salida este lleno, espera a que haya espacio para enviar el ;dato. ;Entradas: ; w = Dato a transmitir ;Salidas: ; ninguna (El dato es enviado por el puerto serie) Transmitir: ;Primeramente verifica y espera a que el puerto serie este listo para ;transmitir (que tenga espacio en el buffer), esto se puede hacer ;verificando que la bandera de interrupcion del modulo este activada ;(notese que esta bandera opera aun cuando la interrupcion esta ;desactivada) btfss PIR1, TXIF goto $-1 ;Para enviar el dato, simplemente se escribe el mismo al registro de ;transmision movwf TXREG return ;Subrutina de recepcion de datos ;------------------------------;Esta rutina se encarga de tomar los datos recibidos por el puerto serie. ;Si no existen datos disponibles en el momento de llamar a la subrutina, ;la misma retorna inmediatamente. ;Entradas: ; ninguna ;Salidas: ; STATUS<C> = Indica si se tiene un dato: 1 = hay dato, 0 = no hay dato ; w = El dato recibido, en caso que se tenga uno Recibir: bcf STATUS, C ;Limpia el acarreo inicialmente btfss PIR1, RCIF return ;Verifica si hay un dato en el buffer ;En caso de no haber, regresa con el acarreo en 0 movf RCREG, w bsf STATUS, C return ;En caso de haber, lo toma del registro de recepcion ;Luego establece la bandera de acarreo ;Finalmente retorna end Listado 1 – Código fuente del programa a implementar. Microcontroladores. Guía 6 6 5. Agregue al proyecto el archivo de de guión de enlace (linker script) con el nombre “16f877.lkr”. 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 de entrenamiento conectando el cable de poder a la misma y luego conectando la cincha que viene del programador al conector amarillo. 8. Conecte el adaptador para puerto serie que se la ha proporcionado. Este se ubicará en el conector rotulado como “RS232” de la tarjeta de entrenamiento. Conecte también el cable DCT/DCE entre el puerto COM1 de la PC y dicho adaptador. Una vez hechas las conexiones, encienda la fuente de 5V. 9. 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. 10. 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. 11. A continuación ejecute el programa “Hyper Terminal”. Este se encuentra disponible junto con el sistema operativo Windows, para abrirlo diríjase a: Inicio->Todos los programas->Accesorios->Comunicaciones->Hyper Terminal 12. En caso que ejecute Hyper Terminal por primera vez, aparecerán un par de cuadros de diálogo donde se le solicita en que configure el país y código de área, así como el sistema de marcación a utilizar. Como no se utilizará este software para establecer comunicaciones por módem, deje estos cuadros de diálogo con sus valores por defecto y haga clic en aceptar. 13. En la ventana ilustrada en la siguiente figura se le solicitará un nombre y un icono para identificar la conexión. Seleccione cualquier icono e introduzca el nombre “Conexión con entrenador PIC”. Microcontroladores. Guía 6 7 Figura 3 – Cuadro de diálogo para identificación de la conexión. 14. A continuación aparecerá un cuadro de diálogo donde se debe seleccionar el dispositivo de comunicación a utilizar. Seleccione el puerto serie “COM1”. Note que los demás campos se desactivan automáticamente al seleccionar este puerto, puesto que no aplican. Figura 4 – Selección del dispositivo de comunicaciones. 15. Finalmente aparece un último cuadro de diálogo donde se solicita la configuración del puerto serie. Asegúrese de seleccionar los siguientes parámetros: Velocidad de 9600 baudios, 8 bits de datos, sin paridad, 1 bit de parada y sin control de flujo. Microcontroladores. Guía 6 8 Figura 5 – Configuración del puerto serie. 16. Una vez definidos todos los parámetros, se mostrará la ventana principal de Hyper Terminal. La operación de Hyper Terminal es la siguiente: Todos los caracteres digitados en el teclado, se envían por el puerto serie, y en este caso, son enviados al microcontrolador. • Asimismo, todos los datos que el microcontrolador envía por el puerto serie, son mostrados inmediatamente como caracteres en pantalla. • Lo que el usuario digita en el teclado no aparece en pantalla, es decir, los caracteres no hacen “eco” (esto sin embargo puede cambiarse en las opciones). • Todas las operaciones que hace Hyper Terminal son a nivel de caracteres ASCII. Si se desea hacer envío de números binarios, deberán hacerse a través de un programa distinto. 17. Una vez en la ventana principal, digite un número “1”. ¿Que ocurrió con el LED?______________________ • ¿Qué mensaje aparece en pantalla?__________________________. 18. Luego, presione el número “0” en el teclado de su PC. Describa que es lo que ocurre con el LED: ________________________ ¿Qué mensaje se muestra en pantalla?___________________ 19. Presione en repetidas ocasiones las teclas. Note como el sistema 9 Microcontroladores. Guía 6 siempre contesta adecuadamente a cada comando. 20. A continuación proceda a modificar el programa. En esta ocasión lo que se requiere es que se pueda leer el estado del botón, para lo cual el microcontrolador deberá mandar los mensajes “1” o “0” repetidamente, indicando siempre el estado actual del botón. Recuerde configurar el puerto A como entrada y desactivar los canales del ADC por medio del registro ADCON1. Asimismo incluya una rutina de retardo, para que los datos sean enviados a un ritmo regular y sin saturar la ventana de Hyper Terminal. 21. Corrobore el funcionamiento de instructor cuando lo tenga listo. su programa y notifique a su 22. 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. Análisis de resultados • • Durante la práctica se observa que al presionar la tecla “1” aparece un mensaje distinto en la pantalla y no la tecla que presionó. ¿A que se debe este comportamiento? Suponga que necesita controlar con la PC un total de 8 salidas digitales por medio del microcontrolador conectado al puerto serie. ¿Qué modificaciones habría que hacer al programa para lograrlo? Investigación complementaria • • ¿Qué significa que un cable sea DTE/DCE? ¿Qué otros tipos de cable existen para interfases RS-232? ¿Es posible usar 2 bits de parada en la comunicación serie con PIC16F877? Explique. 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. 10 Microcontroladores. Guía 6 Hoja de cotejo: 6 Guía 6:Comunicación serie entre PIC y PC. Alumno: Puesto No: Docente: GL: Fecha: EVALUACION % 1-4 CONOCIMIENTO 25 APLICACIÓN DEL CONOCIMIENTO 25 Explica deficientemente cómo opera el módulo USART del PIC. No creó el programa correctamente y posee muchos errores. El circuito armado presenta problemas y no opera. No hizo las modificaciones del paso 20 o las mismas no son correctas. Es un observador pasivo. 25 20 ACTITUD 2.5 2.5 TOTAL 100 Es ordenado pero no hace un uso adecuado de los recursos. 5-7 8-10 Explica como opera el módulo, pero desconoce algunos registros. Explica claramente cómo opera el módulo. Creó el programa y se compila, pero no funciona ya en el dispositivo. 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. 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. Hace un manejo responsable y adecuado de los recursos conforme a pautas de seguridad e higiene. Nota