comunicación pic

27
Comunicación PIC-PC vía RS232 Por terminar. Introducción En ocasiones es necesario que un sistema con microcontroladores recoja información que luego ha de ser procesada, por ejemplo temperaturas, potencias consumidas, etc. siendo el sistema de recogida de información mas usual un PC. En otros casos puede ser necesario controlar mediante un PC las entradas y salidas de un dispositivo. También puede utilizarse un PC para actualizar el firmware de un dispositivo. En cualquier caso la forma mas simple de comunicar un dispositivo con microcontroladores con un PC es a través del puerto serie utilizando el estándar RS232 (EIA 232). Los ordenadores de sobremesa o fijos actuales suelen contar con un puerto serie si bien se tiende a que desaparezca y muchos equipos nuevos ya no lo incorporan. Además hace tiempo que no se incluye en los ordenadores portátiles. A pesar de lo anterior todavía sigue siendo útil. En caso de no disponer de ningún puerto podemos utilizar un conversor USB/RS232. Ver en Conversores USB/RS232 . Para realizar pruebas podemos simular un puerto serie en el PC, de tal manera que creamos un puerto virtual al que pueden acceder los programas exactamente igual como si fuese uno real. Ver en Puerto serie virtual VSPD y COMPIM de Proteus . El puerto serie es accesible mediante conectores, siendo el DB9 macho (de 9 patillas) el único que aún puede encontrarse en un PC de sobremesa. Patillaje del conector RS232 en el PC:

Upload: lizeth

Post on 17-Feb-2016

231 views

Category:

Documents


1 download

DESCRIPTION

comunicacion del pic

TRANSCRIPT

Page 1: Comunicación PIC

Comunicación PIC-PC vía RS232Por terminar.

IntroducciónEn ocasiones es necesario que un sistema con microcontroladores recoja información que luego ha de ser procesada, por ejemplo temperaturas, potencias consumidas, etc. siendo el sistema de recogida de información mas usual un PC. En otros casos puede ser necesario controlar mediante un PC las entradas y salidas de un dispositivo. También puede utilizarse un PC para actualizar el firmware de un dispositivo.

En cualquier caso la forma mas simple de comunicar un dispositivo con microcontroladores con un PC es a través del puerto serie utilizando el estándar RS232 (EIA 232).

Los ordenadores de sobremesa o fijos actuales suelen contar con un puerto serie si bien se tiende a que desaparezca y muchos equipos nuevos ya no lo incorporan. Además hace tiempo que no se incluye en los ordenadores portátiles. A pesar de lo anterior todavía sigue siendo útil.

En caso de no disponer de ningún puerto podemos utilizar un conversor USB/RS232. Ver en Conversores USB/RS232.

Para realizar pruebas podemos simular un puerto serie en el PC, de tal manera que creamos un puerto virtual al que pueden acceder los programas exactamente igual como si fuese uno real. Ver en Puerto serie virtual VSPD y COMPIM de Proteus.

El puerto serie es accesible mediante conectores, siendo el DB9 macho (de 9 patillas) el único que aún puede encontrarse en un PC de sobremesa.

Patillaje del conector RS232 en el PC:

Page 2: Comunicación PIC

1. CD2. RXD3. TXD4. DTR5. GND6. DSR7. RTS8. CTS9. RI

(Carrier Detect) Entrada(Receive Data) Entrada(Transmit Data) Salida(Data terminal Ready) Salida(Ground)(Data Set Ready) Entrada(Request To Send) Salida(Clear To Send) Entrada(Ring Indicator) Entrada

Para comunicarse con un microcontrolador bastan con 3 líneas (visto desde el PC):

3, TXD, Transmisión de datos. 2, RXD, Recepción de datos. 5, GND, Masa.

La velocidad de transmisión es un dato importante, y es la cantidad de información enviada por segundo. Se expresa en baudios (bits por segundo) y en los puertos COM de un PC suele utilizarse 4800, 9600 baudios o mas.

Enviar datos en formato serie RS232 de forma asíncrona (la mas simple) es cuestión de hacer que una salida esté a nivel alto o bajo en el momento adecuado. Normalmente, cuando no se transmite, la

Page 3: Comunicación PIC

salida está a nivel alto (1), y cuando empieza el bit de inicio, esta pasa a ser de nivel bajo. A 4800 baudios la duración del bit debe ser de 1/4800 = 208 microsegundos. 8 bits de datos siguen al bit de inicio, cada uno de un periodo. Un nivel alto de más de un periodo es un bit de parada. Debe tenerse en cuenta que primero se mandan los bits menos significativos o LSB (Least Significant Bit).

Es importante tener en cuenta que en el protocolo RS232 utiliza lógica negativa, un nivel alto (1) es de -3V a -15 voltios, y un nivel bajo (0) es de +3V a +15 voltios. Usualmente los valores son +/-12 voltios.

Puesto que un PIC utiliza niveles TTL es necesario un conversor de niveles. El mas utilizado es el circuito integrado MAX232 de Dallas Semiconductor.

El MAX232 convierte los niveles RS232 a TTL y viceversa con sólo una fuente de 5 voltios. Contiene dos driver TTL-RS232 y dos driver RS232-TTL. Necesita 5 condensadores externos de 1 uF para el MAX232 y de 100nF para el MAX232A. (Se coloca uno de los 5 condensadores entre la patilla 16 y masa).

Si se utilizan condensadores electrolíticos hay que tener cuidado y respetar la polaridad al conectarlos al circuito.

 

Page 4: Comunicación PIC

Para mas información ver la comunicación serie.

Utilizando un PIC para la comunicación tenemos dos alternativas:

PIC con hardware específico para el puerto serie, como es el caso del PIC16F876 (a sustituir por el PIC16F886), entre otros (ver patillas 17 y 18). Dispone de una UART (Universal Asynchronous Receiver-Transmitter, Transmisor-Receptor Asíncrono Universal) para controlar los puertos y dispositivos serie.

PIC que no disponen de este hardware por lo que es necesario implementar por software todos los detalles de la comunicación serie. Este es el caso por ejemplo del PIC16F84A.

Page 5: Comunicación PIC

Usaremos el PIC16F84A primero para ver un circuito que envia un mensaje ASCII del PIC al PC implementado por software.

Luego realizaremos un circuito algo mas complejo para comunicar el PC con el PIC, de forma bidireccional también con el PIC16F84A.

Mas adelante se irá profundizando mas en este tema pasando por el 16F886 y el 18F2550, este último con puerto serie USB a 12 Mbit/s.

Ejemplo 1. Enviar un mensaje ASCII del PIC al PCMandaremos el mensaje "Hola mundo" como caracteres ASCII al puerto de comunicaciones serie COM de un PC.

Para enviar caracteres ASCII al PC con el PIC se conecta una salida del PIC al terminal 2 (RXD) del puerto RS232 del PC.

En la figura siguiente se muestra como se envía el dato "01001101". Con la calculadora de Windows en vista "científica" u otro medio hallamos que "01001101" en binario es "77" en decimal. Con una tabla ASCII o simplemente en una zona de texto, como el block de notas, manteniendo pulsada la tecla ALT y marcando el 77 en el teclado numérico, nos encontraremos que "77" es "M" (m mayúscula) en ASCII. Habremos enviado la "M" del PIC al PC.

Page 6: Comunicación PIC

Como la memoria de datos del PIC es escasa y difícil de usar, pondremos el mensaje a enviar en la memoria de programa. Para acceder a ella utilizaremos una tabla. En la subrutina MSGTXT cargamos en el acumulador el offset o desplazamiento que queremos representar, y este valor lo sumamos al contador del programa. Como resultado de la rutina la instrucción RETLW devolverá el valor de los caracteres en el acumulador. Un cero en offset retornará "H", un uno "o", un dos "l", etc.MSGTXT

ADDWF PCL, f ; sumamos offset al PCLRETLW 0x48 ; 'H' 72dRETLW 0x6F ; 'o' 111dRETLW 0x6C ; 'l' 108dRETLW 0x61 ; 'a' 97dRETLW 0x20 ; ' ' 32dRETLW 0x6D ; 'm' 109dRETLW 0x75 ; 'u' 117dRETLW 0x6E ; 'n' 110dRETLW 0x64 ; 'd' 100dRETLW 0x6F ; 'o' 111dRETLW 0x0D ; retorno de carroRETLW 0x0A ; nueva líneaRETLW 0x00 ; indica el final del mensaje

Para imprimir una cadena de caracteres, situamos un registro que apunte al carácter inicial (MSGPTR), y llamamos repetidamente a MSGTXT incrementando el puntero cada vez. Cuando hemos alcanzado el final, la función devuelve un cero. La rutina debe inicializarse con el offset cargado en w.OUTMSG

MOVWF MSGPTR ; mueve w al puntero del mensajeMSGLOOP

MOVF MSGPTR, W ; mueve el puntero a WCALL MSGTXT ; retorna el carácter ASCIIADDLW 0 ; pone la bandera Zero a uno si W = 0BTFSC STATUS,Z ; salta si el bit Zero no está a nivel

altoRETURN ; si llegamos al final, W = 0CALL OUTCH ; llama a la rutina de comunicación

serieINCF MSGPTR, f ; apuntamos al siguiente carácterGOTO MSGLOOP ; vuelve a por más caracteres

Rutina de transmisión serie de PIC a PC

Page 7: Comunicación PIC

Al utilizar un PIC16F84 que no dispone de puertos específicos para transmisión serie, la rutina de transmisión se implementará mediante software.

La rutina que transmite los caracteres al PC vía serie se llama OUTCH. Para conseguir la duración del bit podemos usar la rutina MIC4 (ver Temporización). 52 x 4 bucles de un microsegundo permiten temporizar los 208 microsegundos del periodo de un bit a 4800 baudios. Realmente 12 microsegundos son usados en la cabecera de OUTCH, por lo que usamos los 49 bucles restantes para contar el resto de la transmisión. La subrutina es llamada con el carácter que deberá ser transmitido por el bit 0 del puerto A que estará unido a la patill 2 (RXD) del puerto serie del PC a través de un adaptador TTL-RS232.

OUTCH utiliza un registro denominado TXREG en donde se debe almacenar el dato a transmitir. La variable BITS sirve para establecer el número de bits a transmitir. Se utiliza la instrucción RRF y el CARRY para ir obteniendo los bits del registro TXREG.OUTCH

MOVWF TXREG ; coloca W en el registro de transmisiónMOVLW 8 ; 8 bits de datos serán transmitidosMOVWF BITS ; BITS es un contador para los bitsBCF PORTA,0 ; bit de inicio en la salida serie

(activo a nivel bajo)TXLOOP

MOVLW 0x31 ; Retardo de 196 microsegundos 31h = 49dCALL MIC4 ; 49 x 4 = 196 microsegundosRRF TXREG, f ; rotamos a la derecha el bit en el

acarreoBTFSC STATUS, C ; si el acarreo es 0 saltamos y ponemos

la línea a nivel bajoGOTO SETUNO ; si no, ponemos la línea a nivel alto

SETCEROBCF PORTA,0 ; Ponemos la salida serie a nivel bajo

(transmitir un 0) GOTO TDONE ; Comprobar si se han transmitido todos

los bits de TXREGSETUNO

BSF PORTA,0 ; Ponemos la salida serie a nivel alto (transmitir un 1)

NOP ; pasamos a probar si acabamos, directamenteTDONE

DECFSZ BITS, f ; se decrementa BITS por el bit transmitido y salta cuando llega a cero

GOTO TXLOOP ; quedan más bits, vamos a transmitir el siguiente

MOVLW 0x34 ; Retardo de 208 microsegundos 34h = 52dCALL MIC4 ; 52 x 4 = 208 microsegundos para el

último bit de datos que quedaBSF PORTA,0 ; Salida serie a nivel alto para el bit

de stopMOVLW 0x68 ; retardo de 104 x 4 microsegundos 68h =

104d

Page 8: Comunicación PIC

CALL MIC4 ; 104 x 4 = 416 microsegundos para dos bits de parada

RETURN

Rutina principal

Ahora tenemos casi todo el código necesario para programar un PIC que transmita el mensaje "Hola mundo". La rutina principal utiliza NMSEC (ver Temporización) y puede ser como esta.INICIO

BSF STATUS,RP0 ; Activa el banco de memoria 1.MOVLW 0 ; todos los pines de los puertos son

salidasMOVWF TRISA ; en el puerto AMOVWF TRISB ; y en el puerto BBCF STATUS,RP0 ; Activa el banco de memoria 0.BSF PORTA,0 ; ponemos a nivel alto la salida serie.

Línea en reposo.MOVLW 0xC8 ; retardo de 200 msec.CALL NMSEC ; para que no afecten las fluctuaciones

del encendidoMOVLW 0 ; offset inicial del mensajeCALL OUTMSG ; representamos el mensaje

ENDLESSGOTO ENDLESS ; nos quedamos aqui, en un bucle

infinito

Algunos comentarios acerca del algoritmo

Todos los bits de todos los puertos están configurados como salidas. Los bits de los puertos desconectados nunca deben ser puestos como entradas. Dejar entradas al aire puede provocar un funcionamiento imprevisible e incluso dañar el PIC.

Otros mensajes pueden ser añadidos a la tabla, siempre que estén en las primeras 256 posiciones de memoria de programa, que pueda ser alcanzado sumando el máximo valor al PCL (Program Counter Low).

El orden de las subrutinas no importa; la rutina principal debe ser la primera rutina ejecutada a partir de la dirección 0000. Cualquier caso vale, tanto si lo ponemos directamente, o como si en la dirección 0000 ponemos un 'GOTO INICIO' antes de las instrucciones., de esta manera podríamos saltar la posición de memoria 0004, que podemos reservar para una subrutina de interrupción.

Conexión del transmisor

Las conexiones que hemos puesto al PIC son pocas:

pin 3: RA0 - conexión a la patilla 2 (RXD) del conector DB9 del PC a través de un conversor TTL-RS232 con el MAX232.

Page 9: Comunicación PIC

pin 4: MCLR - terminal conectado a + 5 V a través de una resistencia de 10K. Entre este pin y masa se conecta un pulsador para resetear el PIC

pin 5: 0V - terminal de alimentación negativa. Además de conectarse a masa y a la fuente de alimentación, debe ser conectado a al pin 5 del conector DB9.

pin 14: +5V - terminal positivo de la alimentación. Un condensador de 100 nF debe ser conectado entre este terminal y masa. Esto previene de acoplamientos y de ruidos en la alimentación, pero no es imprescindible.

pin 15: OSC1 - Una de la salidas del oscilador. Debe ser conectado a un cristal de 4 MHz y a un condensador de 33pF. El otro terminal del condensador debe ser conectado a masa.

pin 16: OSC2 - La otra de las salidas del oscilador. Esta va conectada al otro terminal del cristal y a otro condensador de 33pF. El otro terminal de este condensador también va a masa.

El resto de las patillas quedan sin conectar a nada (al aire).

Es importante saber que no cualquier cable serie vale para la conexión entre el PC y el PIC. Debe utilizarse un cable macho-hembra no cruzado.

Esquema electrónico

Page 10: Comunicación PIC

Programa completo

El programa puede verse aquí:;*************************************************************; Enviar mensajes ASCII del PIC al PC via RS232;*************************************************************;; Programa original: PIC_PC001.ASM Fecha: 20/05/2005; Revisión: 0.0; Programa para PIC16F84A; Velocidad de reloj: 4 MHz; Instrucción: 1Mz=1 us; Perro Guardián: OFF; Tipo de Reloj: XT; Protección de código: OFF; POR: ON;;*************************************************************;; DESCRIPCIÓN DEL PROGRAMA;; Este programa conecta al PIC con un PC a través del puerto serie.;

Page 11: Comunicación PIC

; Utiliza el bit 0 del puerto A como salida serie.;; Debe utilizarse un conversor TTL-RS232, como el MAX232, para; conectar la salida del PIC a RXD en el puerto serie del PC.;; Cuando se alimenta por primera vez, o cuando se le dá un reset; envía al PC el mensaje "Hola mundo" como caracteres ASCII.;; Para recibir el mensaje puede utilizarse el programa Hyperterminal; de Windows o TerminalTOB, una aplicación propia realizada al efecto; que, además de funcionar como terminal, permite crear fácilmente; código de mensajes.; ; Configuración del puerto COM:; Bits por segundo = 4800 baudios; Bits de datos = 8; Paridad: ninguna; Bits de parada = 2; Control de flujo: ninguno; Tiempo por bit:; 4800 baudios -> 1/4800 seg -> 208,3 microsegundos

;;************************** Patillas *************************; ___________; NC - RA,2 -|1 \__/ 18|- RA,1 - NC; NC - RA,3 -|2 17|- RA,0 - A RXD del PC a través TTL-RS232; NC - RA,4 -|3 16F84A 16|- OSC1 - [XT] ; [PUL] - MCLR/ -|4 15|- OSC1 - [XT]; GND -|5 14|- Vcc; NC - RB,0 -|6 13|- RB,7 - nc; NC - RB,1 -|7 12|- RB,6 - nc; NC - RB,2 -|8 11|- RB,5 - nc; NC - RB,3 -|9________10|- RB,4 - nc;;**************************************************************

LIST P=PIC16F84A ; Pic a usar

#INCLUDE <P16F84A.INC> ; Lista de etiquetas de microchip

;**************************************************************

; Fuses, configuran opciones externas de hardware para la programacion

__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _XT_OSC

;**************************************************************; Lista de variables para el uso del programa;**************************************************************

MSGPTR EQU 0x0C ; Puntero del mensajeTXREG EQU 0x0D ; Registro de transmisiónBITS EQU 0x0E ; Número de bits de datosCNTMSEC EQU 0x0F ; Número de milisegundos de retardo

;**************************************************************ORG 0 ;Comando que indica al Ensamblador

;la dirección de la memoria de programa;donde situar la siguiente instrucción

Page 12: Comunicación PIC

;**************************************************************;INICIO

BSF STATUS,RP0 ; Activa el banco de memoria 1.MOVLW 0 ; todos los pines de los puertos son

salidasMOVWF TRISA ; en el puerto AMOVWF TRISB ; y en el puerto BBCF STATUS,RP0 ; Activa el banco de memoria 0.BSF PORTA,0 ; ponemos a nivel alto la salida serie.

Línea en reposo.MOVLW 0xC8 ; retardo de 200 msec.CALL NMSEC ; para que no afecten las fluctuaciones

del encendidoMOVLW 0 ; offset inicial del mensajeCALL OUTMSG ; representamos el mensaje

ENDLESSGOTO ENDLESS ; nos quedamos aqui, en un bucle

infinito;;**************************************************************; SUBRUTINAS;**************************************************************;OUTMSG

MOVWF MSGPTR ; mueve w al puntero del mensajeMSGLOOP

MOVF MSGPTR, W ; mueve el puntero a WCALL MSGTXT ; retorna el carácter ASCIIADDLW 0 ; pone la bandera Zero a uno si W = 0BTFSC STATUS,Z ; salta si el bit Zero no está a nivel

altoRETURN ; si llegamos al final, W = 0CALL OUTCH ; llama a la rutina de comunicación

serieINCF MSGPTR, f ; apuntamos al siguiente carácterGOTO MSGLOOP ; vuelve a por más caracteres

;;**************************************************************;OUTCH

MOVWF TXREG ; coloca W en el registro de transmisiónMOVLW 8 ; 8 bits de datos serán transmitidosMOVWF BITS ; BITS es un contador para los bitsBCF PORTA,0 ; bit de inicio en la salida serie

(activo a nivel bajo)TXLOOP

MOVLW 0x31 ; Retardo de 196 microsegundos 31h = 49dCALL MIC4 ; 49 x 4 = 196 microsegundosRRF TXREG, f ; rotamos a la derecha el bit en el

acarreoBTFSC STATUS, C ; si el acarreo es 0 saltamos y ponemos

la línea a nivel bajoGOTO SETUNO ; si no, ponemos la línea a nivel alto

SETCEROBCF PORTA,0 ; Ponemos la salida serie a nivel bajo

(transmitir un 0) GOTO TDONE ; Comprobar si se han transmitido todos

los bits de TXREGSETUNO

Page 13: Comunicación PIC

BSF PORTA,0 ; Ponemos la salida serie a nivel alto (transmitir un 1)

NOP ; pasamos a probar si acabamos, directamenteTDONE

DECFSZ BITS, f ; se decrementa BITS por el bit transmitido y salta cuando llega a cero

GOTO TXLOOP ; quedan más bits, vamos a transmitir el siguiente

MOVLW 0x34 ; Retardo de 208 microsegundos 34h = 52dCALL MIC4 ; 52 x 4 = 208 microsegundos para el

último bit de datos que quedaBSF PORTA,0 ; Salida serie a nivel alto para el bit

de stopMOVLW 0x68 ; retardo de 104 x 4 microsegundos 68h =

104dCALL MIC4 ; 104 x 4 = 416 microsegundos para dos

bits de paradaRETURN

;;**************************************************************;NMSEC

MOVWF CNTMSEC ; mueve W al registro msecMSLOOP

MOVLW 0xF8 ; cuenta 8 microsegundos por encimaCALL MIC4 ; 248 * 4 + 2 = 994NOP ; realiza el resto del bucleNOP ; añade 6 microsegundosDECFSZ CNTMSEC, f ; decrementa el contador y salta cuando

llega a ceroGOTO MSLOOP ; vuelve a realizar el bucleRETURN

;;**************************************************************;MIC4

ADDLW 0xFF ; substrae 1 de WBTFSS STATUS,Z ; salta cuando llega a ceroGOTO MIC4 ; si no llega a cero vuelve a restarRETURN

;;**************************************************************;MSGTXT

ADDWF PCL, f ; sumamos offset al PCLRETLW 0x48 ; 'H' 72dRETLW 0x6F ; 'o' 111dRETLW 0x6C ; 'l' 108dRETLW 0x61 ; 'a' 97dRETLW 0x20 ; ' ' 32dRETLW 0x6D ; 'm' 109dRETLW 0x75 ; 'u' 117dRETLW 0x6E ; 'n' 110dRETLW 0x64 ; 'd' 100dRETLW 0x6F ; 'o' 111dRETLW 0x0D ; retorno de carroRETLW 0x0A ; nueva líneaRETLW 0x00 ; indica el final del mensaje

;;**************************************************************

Page 14: Comunicación PIC

;END

El programa puede descargarse, de picpcrs232cpp/01.rar y está en "picpcrs232cpp\01\mplab\pic_pc001.asm". Los fuses se configuran con WDT desactivado, oscilador XT, sin protección y con POR activado.

El programa se ha realizado y simulado con MPLAB.

Prueba del programa

Una vez programado el PIC con ICPROG y JDMD, se monta el circuito en una placa protoboard, y se conecta al puerto serie de un PC.

También podemos simular un puerto serie en el PC, de tal manera que creamos un puerto virtual al que pueden acceder los programas exactamente igual como si fuese uno real. Y en lugar de montar físicamente el circuito del PIC podemos simularlo con Proteus. Ver en Puerto serie virtual VSPD y COMPIM de Proteus.

Para probar el funcionamiento del programa, puede ejecutarse un programa de terminal en el PC, como Hyperterminal de Windows, pues es fácil de usar y está al alcance de todo el mundo (debe estar instalado en Inicio/Programas/Accesorios/Comunicaciones/ y si no está, instálelo desde el CD de Windows).

Si utilizamos Windows Vista o Windows 7, que no lo incorporan podemos descargarlo de aquí: hyperterminal.rar.

Si iniciamos Hyperterminal  creamos una nueva conexión y nos conectamos. Podemos seguir las siguientes capturas. Los dos cuadros de diálogo siguientes sólo aparecen la primera vez que utilizamos Hyperterminal y no tienen importancia en nuestro caso:

Page 15: Comunicación PIC
Page 16: Comunicación PIC

Cada vez que utilizamos Hyperterminal nos preguntará por un nombre de conexión. En este caso le hemos puesto picrs232 pero puede ser otro nombre:

En este cuadro de diálogo seleccionamos que puerto del PC vamos a utilizar, evidentemente debemos conectar el cable serie a dicho puerto. Si el PC dispone de un sólo puerto serie con toda seguridad será COM1.

Lo configuramos a 4800 baudios, 8 bits de datos, sin bit de paridad, dos de parada y sin control de flujo.

Page 17: Comunicación PIC

Ahora alimentamos el circuito. El mensaje 'Hola mundo' debe aparecer en la pantalla. Cada vez que se resetee el PIC el mensaje se imprimirá de nuevo.

Cuando cerremos el programa además de preguntarnos si queremos desconectarnos nos pregunta si deseamos guardar la conexión. Si elegimos que sí la próxima vez que queramos utilizar la configuración

Page 18: Comunicación PIC

que hemos establecido en la conexión basta que en Inicio/Todos los programas/Accesorios/Comunicaciones/Hyperterminal/picrs232.ht

Los archivos de hyperterminal (*.ht) en Windows XP se guardan en:

C:\Documents and Settings\...nombreusuario...\Menú Inicio\Programas\Accesorios\Comunicaciones\HyperTerminal\

Si vamos a esta carpeta y damos doble click al archivo se nos abrirá la conexión. Además se crea un acceso directo a la conexión en dicha carpeta que podemos pegar en el escritorio para obtener un rápido acceso.

TerminalTOB

Tambien se ha desarrollado un programa de terminal en Visual Basic, que además permite crear código en ensamblador para enviar mensajes, y que se encuentra aquí TerminalTOB.zip.

 

Cominicación bidireccional del PIC al PC vía RS232.

Page 19: Comunicación PIC

Se trata de utilizar el puerto serie RS232 de un PC para comunicar el PC con el PIC, de forma bidireccional. Considerando el uso de un PIC16F84 vamos a establecer:

VDD: +5V. Terminal positivo de alimentación. Un condensador de 100 nF debe ser conectado entre este terminal y masa lo mas cerca posible del microcontrolador. Esto previene acoplamientos con ruidos en la alimentación.

VSS: 0V. Terminal de alimentación negativa (masa).

OSC1: Entrada del oscilador. Conectado a un cristal de 4 MHz y a un condensador de 22 pf. El otro terminal del condensador debe ser conectado a masa.

OSC2: Salida del oscilador. Conectada al otro terminal del cristal y a otro condensador de 22 pF. El otro terminal de este condensador también va a masa (Para 4 MHz ambos condensadores pueden ser de 15 a 33pF pero han de ser iguales).

MCLR: Conectado a  un circuito de reset/programación ICSP.

RA0: Salida. Conexión a la patilla 2 (RXD) del conector DB9 del PC a través de un MAX232.

RA1: Entrada: Conexión a la patilla 3 (TXD) del conector DB9 del PC a través de un MAX232.

RA2 a RA4: Salida o entrada según la aplicación.

RB1 a RB7: Salida o entrada según la aplicación. RB6 y RB7 utilizados para programación ICSP.

Nota: El pin 5 del conector DB9 debe ser conectado a masa.

El circuito base será el siguiente:

Page 20: Comunicación PIC

El software necesario para la comunicación PIC-PC es:

Programa en el PIC que incluya subrutinas de control del puerto RS232.

Programa en el ordenador que gestione la comunicación, como HyperTerminal de Windows, TerminalTOB o programas hechos específicamente, por ejemplo en Visual Basic o C++.

Es importante destacar que la configuración del formato de transmisión y recepción debe ser la misma tanto para el programa en el PIC como para el programa en el PC. En nuestro caso tomaremos:

Velocidad de transmisión de 9600 baudios. La duración de cada bit será 104 µs.

Un bit de inicio o Start a nivel bajo. Dato de 8 bits. Sin paridad. Dos bits de final o Stop a nivel alto.

Librerías para RS232La mejor forma para afrontar el programa a desarrollar es utilizando archivos INCLUDE con las subrutinas necesarias.

RS232.INC

Page 21: Comunicación PIC

Esta librería incluye subrutinas de control para el PIC16F84 para la comunicación RS232:

RS232_Inicializa: Configura la comunicación RS232 para el PIC. RS232_LeeDato: El PIC lee un dato por la línea de entrada. RS232_EnviaDato: El PIC envía un dato por la línea de salida.

La librería puede verse aquí, rs232.inc.

RS232MEN.INC

Esta librería incluye subrutinas para enviar mensajes de texto del PIC al PC:

RS232_Mensaje: Muestra en el PC un mensaje grabado en el PIC.

RS232_LineasBlanco: Muestra líneas en blanco en el PC.

La librería puede verse aquí, rs232men.inc.

RETARDOS.INC

Incluye subrutinas para realizar retardos, desde 4 microsegundos hasta 20 segundos. Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada ciclo máquina tarda 4 x 1/4MHz = 1 µs.

La librería puede verse aquí, retardos.inc.

Ejemplo 2. Control desde PCPICRS232Sal.asm

Control de salidas mediante un PC y RS232: Desde el teclado de un ordenador se desea controlar el puerto B, según la siguiente tabla:

TECLA SALIDA0 RB0 =

11 RB1 =

12 RB2 =

13 RB3 =

14 RB4 =

Page 22: Comunicación PIC

15 RB5 =

16 RB6 =

17 RB7 =

1Espacio Todas

a 0

La pulsación de cualquiera de estas teclas activa el estado de las salidas correspondiente,

Sólo se activa una salida cada vez.

El estado de las salidas aparece reflejado en un mensaje en la pantalla del ordenador.

El proyecto en MPLAB y el circuito en Proteus con COMPIM puede descargarse de picpcrs232cpp/03.rar.

Los fuses se configuran con WDT desactivado, oscilador XT, sin protección y con POR activado.

Prueba del programa

El programa lo podemos simular o probar físicamente, en cuyo caso seguiremos los siguientes pasos.

Sin conectar el circuito a la fuente de alimentación se programa el PIC con ICPROG y JDMD con ICSP.

A continuación se conecta al puerto serie de un PC y se alimenta el circuito.

Para probar el funcionamiento del programa, puede ejecutarse un programa de terminal en el PC, como Hyperterminal de Windows o también puede utilizarse TerminalTOB.

Debe configurarse a 9600 baudios, 8 bits de datos, dos de parada y sin bit de paridad. Y muy importante, el flujo de datos debe ser: ninguno.

Page 23: Comunicación PIC

Ejemplo 3. Monitorización de datosSe trata de leer el estado de las entradas conectadas a las líneas <RB7:RB4> del Puerto B y enviarlo por el puerto RS232 a un terminal para monitorizar el estado de los mismos. Se utilizan las interrupciones por cambio de nivel en una línea del Puerto B, por ello las entradas deben conectarse a la parte alta del Puerto B.

También se activan las resistencias de pull-up del puerto B, así que basta con dejarlas al aire para ponerlas a 1 o a masa para ponerlas a 0.

El programa puede verse aquí, de picpcrs232cpp/picmonitor.rar. Los fuses se configuran con WDT desactivado, oscilador XT, sin protección y con POR activado.

El orden de las subrutinas no importa; la rutina principal debe ser la primera rutina ejecutada a partir de la dirección 0000. Cualquier caso vale, tanto si lo ponemos directamente, o como si en la dirección 0000 ponemos un 'GOTO INICIO' antes de las instrucciones., de esta manera podríamos saltar la posición de memoria 0004, que podemos reservar para una subrutina de interrupción.

El programa se ha realizado y simulado con MPLAB.

Page 24: Comunicación PIC

Los bits de los puertos desconectados nunca deben ser puestos como entradas, sino que han de configurarse como salidas. Dejar entradas al aire puede provocar un funcionamiento imprevisible e incluso dañar el PIC.

Prueba del programa

El programa lo podemos simular o probar físicamente, en cuyo caso seguiremos los siguientes pasos.

Sin conectar el circuito a la fuente de alimentación se programa el PIC con ICPROG y JDMD con ICSP.

A continuación se conecta al puerto serie de un PC y se alimenta el circuito.

Para probar el funcionamiento del programa, puede ejecutarse Hyperterminal de Windows o TerminalTOB.zip.

Configúrelo a 9600 baudios, 8 bits de datos, dos de parada, sin bit de paridad y sin control de flujo.

BibliografíaLibro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"E. Palacios, F. Remiro y L. López.Editorial Ra-Ma.  www.ra-ma.es