You are on page 1of 20

Prueba de conexin serie entre un PIC y una PC Circuito convertidor serie-paralelo para el port serie de la PC por Eduardo J.

Carletti
Presento aqu la prueba de laboratorio de un circuito realizado especficamente para experimentar, de manera bsica, con la comunicacin entre un microcontrolador PIC 16F628A y el puerto serie de una PC (estndar RS-232). El circuito tiene, adems del microcontrolador, un integrado convertidor de niveles RS232 a TTL que es reemplazo del conocido MAX232, pero cuesta ms barato en el mercado argentino. Se trata del HIN232CP de Intersil, que en Buenos Aires se puede comprar en Cika a un valor de u$s 1,1 + 10,5% de IVA.

Comunicacin RS232

Integrado HIN232CP: Los circuitos con letra T son "Transmitters", que trasladan nivel TTL/CMOS en su entrada a nivel RS232 en su salida. Los circuitos con letra R son "Receivers", que trasladan seales RS232 en su entrada (que pueden ser de hasta +30/-30 V) a nivel TTL/CMOS en su salida. Aqu voy a hacer una pequea disgresin sobre por qu utilizo el PIC 16F628A en esta ocasin y en gran parte de los proyectos que encaro y encarar, excepto cuando las prestaciones de este microcontrolador no sean suficientes para la funcin

requerida. La razn principal es que es pata a pata compatible con el ms antiguo pero ya clsico PIC 16F84A. Y es compatible en sus programas, con la nica salvedad de que la memoria RAM se encuenta en otra direccin. Transformar un programa hecho para el PIC 16F84A para utilizarlo en este microcontrolador es una cosa de segundos. Y hay miles de ejemplos en Internet y en libros y revistas para el 16F84A, porque hace aos que se disea sobre l, como procesador bsico.

Distribucin de patas (con sus funciones) del PIC 16F628A. El PIC 16F84A puede estar muy bien como eleccin para comenzar, pero la nica razn que va quedando para hacerlo es que la mayora de los ejemplos de programa y de circuito que se encuentran por all estn realizados sobre l. En base a lo dicho en el prrafo anterior, entonces el PIC 16F628A es igual de elegible, ya que es un reemplazo prcticamente directo de nuestro famoso microcontrolador "de batalla". Pero por qu cambiar, si ambos estn disponibles en el mercado? Por una razn muy simple: el PIC 16F628A tiene ms memoria de programa (el doble), ms RAM, ms EEPROM, ms modos de uso, ms timers, y ms prestaciones, incluyendo la que aprovechamos en este diseo, el puerto serie implementado por hardware... y el PIC 16F628A, por lo menos en Argentina, cuesta menos... Por qu no cambiar, entonces? COMPARACIN 16F84A Memoria programa Memoria datos EEPROM Timers 1K 68 bytes 64 bytes 1 16F628A 2K 224 bytes 128 bytes 3

PWM Reg. comparacin/captura Comparadores Referencias de voltaje Oscilador interno reloj Patas usables E/S Programacin a bajo voltaje Precio en Buenos Aires (Cika)

13 us$ 3,51 (4 MHz) us$ 7,02 (20 MHz)

1 s 2 1 37 KHz / 4 MHz 16 s
u$s 3 (20 MHz)

Ahora volvamos al circuito de esta prueba El microcontrolador se comunica utilizando su puerto serie. He programado este puerto a una velocidad de 9600 baudios, un formato de dato de 8 bits, sin paridad, un bit de parada, y sin ningn control de flujo. El programa en el microcontrolador se inicia enviando un mensaje a la PC que dice Hola amigo. Luego la rutina principal de este pequeo programa espera a recibir un caracter, lo devuelve como eco hacia la PC, y luego lo exhibe a travs de sus puertos, donde tenemos conectados LEDs indicadores. Esto nos permite comprobar la recepcin de los caracteres ASCII desde la PC, cuyo cdigo veremos sobre los LEDs. Tambin hace que nuestro circuito cumpla la funcin de transformar la salida serie de la PC en una salida de 8 bits en paralelo. A continuacin se puede observar el circuito que he utilizado: Circuito del interfaz de comunicacin RS232 entre un PIC y una PC

Algn lector observador habr notado que no se utiliza el Puerto A completo (1 byte) para manejar los LEDs que exhiben el caracter que se ha recibido desde la PC. Los bits 4 y 5 del Puerto A no se utilizan, y a cambio los LEDs que corresponden a estos bits se conectan al Puerto B. Por qu complicarse as? No es mejor escribir un byte completo en un puerto, sin tener que manejar dos bits por separado en otro puerto, que para peor tiene dos bits afectados a la comunicacin serie? Paciencia, todo tiene su explicacin: Tal como se ha configurado el microcontrolador, el Puerto A tiene, efectivamente, ocho bits de ancho, pero por caractersticas de circuito no se pueden utilizar los ocho como salida. El bit 5 solamente se puede utilizar como entrada, y el bit 4 tiene un circuito de salida de drenaje abierto, es decir, cuando est en alto no entrega corriente, de manera que no encendera el LED con el circuito que estamos utilizando. Antes que ponerme a hacer algunos malabarismos con el circuito,

prefer solucionar esto por programa y "sacar" los dos bits faltantes a travs del Puerto B, bits 4 y 5. El "costo" de esta solucin son tres o cuatro lneas de programa, nada ms. Montaje del circuito de conexin serie entre un PIC 16F628A y una PC

Detalle de montaje del circuito de conexin serie

Introduccin:
Al vernos frente a la necesidad de desarrollar una aplicacin para la comunicacin entre un microcontrolador y la computadora, pensamos en un sistema de control digital de lazo cerrado, y que los datos relevantes de ste proceso sean enviados a la PC y procesados de alguna manera para el monitoreo y control a distancia del proceso. Para tal fin se mont el control de velocidad de un motor de continua a partir del mtodo de modulacin de ancho de pulso (PWM) aprovechando el mdulo especfico de los PIC16F87X, la herramienta del conversor A/D de 10 bits, y el bloque TX/RX para comunicacin serie con la PC. Utilizando adems, una Macro editada con Visual Basic como interface para el sistema de adquisicin de datos. Seleccionando a la velocidad de referencia, la velocidad real, y el Duty del PWM como los datos relevantes a monitorear, y la velocidad de referencia como la variable a controlar con posibilidad de modificarla a travs de la PC.

Hardware:
Para poder controlar ste motor de continua a partir del mtodo de modulacin de ancho de pulso, se pens en montar un sistema que bsicamente est compuesto por: -El motor a controlar.

- Un motor mucho ms pequeo que cumpla la funcin de transductor de la velocidad del motor a valores de tensin continua, el cual est vinculado al motor principal a travs de algn vnculo mecnico, en ste caso una correa. El valor de tensin que ste motor (que oficia de un pequeo generador) entregue, nos servir como el valor actual medido a comparar con el valor deseado el cual se cargar inicialmente en el software, al programar el PIC.

Para poder ser utilizado como transductor, el motorcito debi ser ensayado y se obtuvo las siguientes mediciones (se ensay alimentando al motor principal con una fuente variable, midiendo el nmero de revoluciones del motor

principal con un tacmetro lser y la tensin en bornes del transductor con un multmetro digital):

TRANSDUCTOR [V] 3,7 2,9 2,26 2,04 1,57 1,03 0,71 0,17

RPM/V 837,83 844,82 827,43 833,33 815,28 825,24 788,73 852,94 K=828,2[RPM Siendo K la constante que utilizaremos para relacionar a lo largo del trabajo, las revoluciones del motor principal con la tensin en bornes del transductor. -Y siendo 2450 r.p.m la velocidad establecida como deseada para el giro del motor principal (ya que para esa velocidad, estamos dentro de las tensiones nominales de funcionamiento del motor y en una zona en donde la constante seleccionada es bastante prxima a la real)

RPM 3100 2450 1870 1700 1280 850 560 145

- Un motor de las mismas caractersticas que el principal, el cual se vincular mecnicamente, tambin, al motor principal, para que trabaje como generador, significndole as una carga mecnica al mismo. Y luego, al cargar elctricamente a ste

generador con unas lamparitas incandescentes, producir una carga mecnica variable en el rotor del motor principal. Y as poder ensayar al mismo bajo diversas condiciones.

- El micro controlador que generar la seal de control a partir de comparar la tensin generada por el transductor con el valor de seal de referencia cargado, aumentando o disminuyendo el tiempo de encendido de la seal segn sea necesario. En el caso que la velocidad del motor descienda del valor deseado, la tensin del transductor disminuir, y el PIC comenzar a incrementar el ancho de pulso de la tensin que alimenta al motor hasta que vuelva a igualarse la seal generada por el transductor con el valor programado, y viceversa. Adems transmitir la cadena de datos que luego ser recibida y procesada por la PC a partir de la aplicacin. Aparte, tendr habilitada la posibilidad de recibir un dato de 8 bits que modifique la velocidad de referencia, lo que se ver traducido en un cambio en la velocidad del giro del motor. Y esto ltimo ser capaz gracias a la transformacin de tensiones TTL del PIC a seal RS232 con el uso del integrado MAX232.

CIRCUITO:

Software:
Para el desarrollo del cdigo fuente se pens en unificar tres tipos de bloques de programa: -El bloque que se refiere a la implementacin de la modulacin del ancho de pulso PWM. -El que respecta a la conversin analgica digital a partir de la seal brindada por el transductor.

-Y el bloque que se refiere a la comunicacin con la PC por el puerto RX-TX del PIC. Bloque PWM: Para la implementacin del bloque PWM se parte por configurar el mdulo CCP1 para trabajar en modo PWM emparentndose as con el Timer 2. A partir del registro PR2 se fijar el perodo de la seal : Ts = ctte = (PR2+1) * 4 * Tosc * TMR2 prescaler En nuestro caso estamos utilizando un cristal de 18.432 MHz y seteamos al PR2 en 255 con el prescaler del TMR2 en 1:1, de manera que resulta en un ciclo de 18 KHz constante (Lo definimos as para poder salir del intervalo audible) Siendo el CCPR1L el registro que definir el Duty de la seal (a partir de su registro de slo lectura CCPR1H),el cual estar siendo continuamente refrescado para cumplir con la misin de controlar la velocidad del motor de continua. Ton = var = CCPR1L * 4 * Tosc * TMR2 prescaler
Luego se configurar el mdulo CCP2 en el modo comparacin, el cual estar emparentado con el Timer 1 y definir el perodo de tiempo (Tk) con el cual se llevar a cabo la interrupcin que permita un llamado a conversin analgica digital.

Tk= ctte = CCPR2* Tosc*4*TMR1 Prescaler En nuestro caso al CCPR2 lo hemos seteado en 25.000 (CCPR2H y CCPR2L), y el preescaler del TMR1 se encuentra en 1:1 de manera que resulta un perodo de deteccin de velocidad de Tk = 5.42ms (25000*4*(1/18.432Mhz) = 5.42msec). Y esto es as sabiendo que el conversor A/D precisa de un mnimo de 2*TAD (2*1.6 ms = 3.2 ms) para llevar a cabo una conversin segura, luego: Tk > 2*TAD. El valor numrico 4 que figura en las expresiones (Ts, Tk y Ton) resulta de haber configurado al TMR1 y al TMR2 en modo

sncrono con el reloj interno del PIC (Fosc/4) funcionando ambos como temporizadores. Habindose configurado as el bloque PWM el sistema estar generando continuamente una seal de perodo constante y Duty fijo hasta que el overflow del TMR1 llame a una conversin analgica digital y como resultado se refresque el valor del registro que fija el Duty.

Bloque A/D: Para programar el bloque del conversor se parti de establecer el reloj del conversor como Fosc/32 ya que esto es lo que recomienda el manual del PIC para cristales de 20 MHz (nosotros trabajamos con uno de 18.342 MHz). Configuramos a AN0 como la nica entrada anlgica, el resultado de la conversin en ADRESH y tomar slo los 8 bits de mayor peso los cuales sern cotejados con el valor de referencia deseado el cual se encuentra almacenado en la variable SPEED y de la comparacin con sta variable resultar el control sumndole o restndole al valor del registro CCPR1L el valor de la variable CHANGE que en nuestro caso est en 1. Bloque RX/TX:

Se configuro la comunicacin USART en el pic con la posibilidad de enviar y recibir datos de la pc a una velocidad de 9600 Baudios. Para lograr esto se debi calcular que valor deba ser cargado en el registro SPBRG de la siguiente manera:

BAUD RATE = Fosc/ (16*(X+1)) Despejando X el valor a cargarse en SPBRG es de 119 (decimal). Una vez configurado esto y mediante un programa escrito en Visual basic para Excel se logra la comunicacin pic-pc. Desde la pc se realiza la adquisicin de datos (duty cicle, velocidad del motor en rpm, velocidad deseada) y se puede modificar la velocidad deseada del motor o dicho de otra forma modificar el valor de la variable SPEED en el microcontrolador.

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 adems de preguntarnos si queremos desconectarnos nos pregunta si deseamos guardar la conexin. Si elegimos que s la prxima vez que queramos utilizar la configuracin que hemos establecido en la conexin 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 conexin. Adems se crea un acceso directo a la conexin en dicha carpeta que podemos pegar en el escritorio para obtener un rpido acceso.

TerminalTOB
Tambien se ha desarrollado un programa de terminal en Visual Basic, que adems permite crear cdigo en ensamblador para enviar mensajes, y que se encuentra aqu TerminalTOB.zip.

Cominicacin bidireccional del PIC al PC va RS232.


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 alimentacin. 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 alimentacin. VSS: 0V. Terminal de alimentacin 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 tambin 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/programacin ICSP. RA0: Salida. Conexin a la patilla 2 (RXD) del conector DB9 del PC a travs de un MAX232. RA1: Entrada: Conexin a la patilla 3 (TXD) del conector DB9 del PC a travs de un MAX232. RA2 a RA4: Salida o entrada segn la aplicacin. RB1 a RB7: Salida o entrada segn la aplicacin. RB6 y RB7 utilizados para programacin ICSP.

Nota: El pin 5 del conector DB9 debe ser conectado a masa. El circuito base ser el siguiente:

El software necesario para la comunicacin PIC-PC es:


Programa en el PIC que incluya subrutinas de control del puerto RS232. Programa en el ordenador que gestione la comunicacin, como HyperTerminal de Windows, TerminalTOB o programas hechos especficamente, por ejemplo en Visual Basic o C++.

Es importante destacar que la configuracin del formato de transmisin y recepcin debe ser la misma tanto para el programa en el PIC como para el programa en el PC. En nuestro caso tomaremos:

Velocidad de transmisin de 9600 baudios. La duracin 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.

Libreras para RS232


La mejor forma para afrontar el programa a desarrollar es utilizando archivos INCLUDE con las subrutinas necesarias.

RS232.INC
Esta librera incluye subrutinas de control para el PIC16F84 para comunicacin RS232:

la

RS232_Inicializa: Configura la comunicacin RS232 para el PIC. RS232_LeeDato: El PIC lee un dato por la lnea de entrada. RS232_EnviaDato: El PIC enva un dato por la lnea de salida.

La librera puede verse aqu, rs232.inc.

RS232MEN.INC
Esta librera 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 lneas en blanco en el PC.

La librera 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 mquina son 4 ciclos de reloj, resulta que cada ciclo mquina tarda 4 x 1/4MHz = 1 s. La librera puede verse aqu, retardos.inc.

Ejemplo 2. Control desde PC


PICRS232Sal.asm Control de salidas mediante un PC y RS232: Desde el teclado de un ordenador se desea controlar el puerto B, segn la siguiente tabla:
TECLA 0 1 2 3 4 5 6 7 SALIDA RB0 = 1 RB1 = 1 RB2 = 1 RB3 = 1 RB4 = 1 RB5 = 1 RB6 = 1 RB7 = 1

Espacio Todas a 0

La pulsacin de cualquiera de estas teclas activa el estado de las salidas correspondiente, Slo 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 proteccin y con POR activado.

Prueba del programa


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

Sin conectar el circuito a la fuente de alimentacin se programa el PIC con ICPROG y JDMD con ICSP. A continuacin 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 tambin 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.

Ejemplo 3. Monitorizacin de datos


Se trata de leer el estado de las entradas conectadas a las lneas <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 lnea del Puerto B, por ello las entradas deben conectarse a la parte alta del Puerto B. Tambin 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 proteccin y con POR activado. El orden de las subrutinas no importa; la rutina principal debe ser la primera rutina ejecutada a partir de la direccin 0000. Cualquier caso vale, tanto si lo ponemos directamente, o como si en la direccin 0000 ponemos un 'GOTO INICIO' antes de las instrucciones., de esta manera podramos saltar la posicin de memoria 0004, que podemos reservar para una subrutina de interrupcin. El programa se ha realizado y simulado con MPLAB. 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 daar el PIC.

Prueba del programa


El programa lo podemos simular o probar fsicamente, en cuyo caso seguiremos los siguientes pasos. Sin conectar el circuito a la fuente de alimentacin se programa el PIC con ICPROG y JDMD con ICSP. A continuacin 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. Configrelo a 9600 baudios, 8 bits de datos, dos de parada, sin bit de paridad y sin control de flujo.

You might also like