Tema: Comunicación serie entre PIC y PC.

Anuncio
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
Descargar