You are on page 1of 4

Monitoreo de señales análogas con el PIC16F873

Este artículo presenta una aplicación bastante útil, y a la vez fácil de implementar, del nuevo microcontrolador PIC16F873. Consiste en utilizar el convertidor A/D interno del microcontrolador, con resolución de 10 bits, para leer cuatro señales análogas y enviar los valores digitales correspondientes hacia una computadora remota, para lo cual se utiliza el módulo USART del 16F873 y una interfaz RS-485 que permite transmitir datos a distancias que pueden llegar hasta los 1.000 metros. LUIS ALFONSO RODRÍGUEZ V. Profesor Universidad Tecnológica de Pereira
Introducción La Instrumentación es una de las áreas de mayor interés para quienes trabajamos en electrónica, en ella se pueden desarrollar gran cantidad de aplicaciones y de experimentos que involucran diferentes procesos, dentro de los cuales se puede contar la conversión análogo/digital y la comunicación serial como unos de los más frecuentes. En este proyecto utilizaremos justamente estas dos técnicas para construir un equipo que será de gran ayuda para aquellos que deben monitorear o vigilar el comportamiento de variables analógicas en equipos que se encuentran a una distancia relativamente grande. La idea principal es construir un aparato que permita conocer el estado de cuatro variables analógicas, las cuales pueden variar entre cero y cinco voltios, y que se encuentran a una distancia considerable de la computadora donde se deben registrar los datos. Para lograrlo, echamos mano de las herramientas que nos ofrecen los microcontroladores modernos, entre las cuales destacamos los convertidores análogo/digital internos y los módulos de comunicación serial tipo USART (Receptor y Transmisor Síncrono y Asíncrono Universal).
Electrónica
&

EDISON DUQUE C. Profesor Universidad Tecnológica de Pereira
• Convertido A/D de 10 bits con 5 canales de entrada. • Módulo de comunicación serial USART. • Dos módulos PWM (para ocho o diez bits). • Tres temporizadores (dos de 16 bits y uno de ocho). • 13 fuentes de interrupción. • Conjunto de 35 instrucciones compatible con los otros miembros de la familia Microchip. Una vez seleccionado el tipo de microcontrolador a utilizar diseñamos el circuito completo, figura 2. En este caso, las señales análogas se pueden conectar directamente a las entradas del PIC16F873 para que este haga la conversión a su equivalente valor digital, una vez realizada la conversión dicho resultado se debe transmitir serialmente hacia la computadora, para lo cual utilizamos el módulo USART, el cual se encarga de hacer las temporizaciones y todas las demás actividades involucradas en la transmisión. Dicho módulo puede ser configurado por software para seleccionar la velocidad y los demás parámetros. En nuestro caso particular, configuramos la transmisión serial para una velocidad de 2400 bps, datos de 8 bits, 1 stop bit y sin paridad. 53

Descripción del proyecto Dentro de los microcontroladores que se encuentran en el mercado escogimos para el proyecto uno de los más modernos, el PIC16F873 de la empresa Microchip Technology (introducido al mercado en 1.999), figura 1. Este dispositivo se destaca, entre otros, por las siguientes características: • Memoria de programa tipo Flash de 4 Kbytes (reprogramable al menos 1.000 veces). • Memoria RAM de 192 bytes. • Memoria EEPROM de datos de 128 bytes (reprogramable al menos 100.000 veces).

MCLR/V PP /THV RA0/AN0 RA1/AN1 RA2/AN2/VREFRA3/AN3/VREF+ RA4/TOCKI RA5/AN4/SS V SS OSC1/CLKIN OSC2/CLKOUT RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL

RB7/PGD RB6/PGD RB5 RB4 RB3/PGM RB2 RB1 RB0/INT VDD V SS RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA

Figura 1. Diagrama de pines del PIC16F873

Computadoras • N° 65

Básicamente. Esta situación se puede resolver mediante la utilización de una interface serial RS-485. entre otros. 1) 10 µF Tantalio + Conector DB9 hembra Figura 3.485 Convertidor RS. Dado lo anterior. hay que dejar en claro que las funciones principales del microcontrolador son la conversión análogo/digital de la señal correspondiente al canal que se lea en un momento determinado y la transmisión de dicho A partir de este punto nos encontramos con uno de los aspectos más importantes del proyecto. n.485 / TTL Convertidor TTL / RS. toda computadora personal tipo PC tiene al menos un puerto serial del tipo RS-232. es decir en la computadora. Obviamente. vamos a hablar un poco del software que es quizás lo más interesante. consiste en la interfaz utilizada para conectar el microcontrolador hasta el puerto serial de la computadora que registra los datos. ahora. en el cual se pueden conectar diferentes clases de dispositivos como el mouse.485 6 A +5V 8 Vcc RE 2 4 RA2/AN2 RC6/TX 17 5 RA3/AN3 9 10 OSC1 OSC2 V SS 8 DE 3 SN75176 4 D1 SN75176 B GND 5 7 7 B GND 5 R0 1 20pF 10 µF + 2 V+ 1 C1+ 10 µF Tantalio + +5V La tierra sirve como blindaje 16 Vcc T2I 10 3 C14 C2+ MAX232 Rx 5 6 10 µF + Tantalio 1 6 2 C2V- T2O GND 15 7 3 7 8 4 9 5 Al puerto serial de la PC 2400 bps (8. En primera instancia. Diagrama esquemático del circuito Electrónica & Computadoras • N°65 . un circuito integrado MAX232 que convierte niveles TTL en los niveles de tensión adecuados para el puerto RS-232 de la computadora. Antes de referirnos al programa del microcontrolador propiamente. la cual permite hacer comunicación entre equipos separados a distancias de hasta 1000 metros.485 (larga distancia) Computadora que registra los datos Microcontrolador Convertidor TTL / RS. a continuación.ELECTRONICA PRACTICA Señales análogas (0 . Esto representa un inconveniente para el proyecto planteado ya que la idea es que se puedan monitorear señales que están bastante retiradas de la computadora. para lo que se utiliza un circuito integrado SN75176 de Texas Instruments.232 Figura 2. pero en la práctica se pueden obtener hasta 30 metros. En la figura 3 se presenta el circuito completo. Esta tarea implica convertir nuevamente las señales de tipo diferencial a niveles TTL mediante otro circuito integrado SN75176 y. A continuación de este circuito se tiene la línea de transmisión propiamente dicha. la gran ventaja es que dicho puerto de comunicaciones puede ser utilizado para hacer adquisición de datos mediante la conexión de algún equipo especializado como el que estamos construyendo. +5V 20 1 V DD MCLR PIC16F873 2 RA0/AN0 3 RA1/AN1 Señales análogas (0-5V) Canal 0 Canal 1 Canal 2 Canal 3 20pF 4MHz +5V +5V 2 3 8 Vcc RE DE 100Ω 100Ω A 6 Líneas de Tx RS. la cual puede medir varios cientos de metros y posee tres conductores.5V) Canal 0 Canal 1 Canal 2 Canal 3 Interfaz RS. se debe hacer una conversión de interface RS-485 a interface RS-232. impresoras seriales y módems para comunicaciones. Descripción del software En los puntos anteriores hablamos acerca del hardware del proyecto. Para hacer la conexión lo más recomendable es utilizar cable tipo UTP (Unshielded Twisted Pair – Par Trenzado sin blindaje). el proyecto debe involucrar un circuito que convierta los niveles TTL que entrega el microcontrolador a los niveles de tensión que se manejan en la interface RS-485 (la cual maneja señales de tipo diferencial). Diagrama en bloques del circuito Por su parte. caso muy frecuente en grandes industrias ya que las instalaciones generalmente son de gran tamaño (varios cientos de metros). en el otro extremo de la línea. vamos a describir qué es lo que hace. dos señales de tipo diferencial y la tierra. se puede utilizar un 54 circuito integrado de otra referencia que cumpla con el mismo objetivo. La interface serial RS-232 permite comunicación entre dos equipos que estén separados hasta una distancia máxima de 15 metros (según la norma). el cual presenta muy buenas características en cuanto a atenuación e inmunidad al ruido se refiere.

Esta es una herramienta muy útil que permite utilizar algún puerto serial de la computadora para que haga transmisión y recepción de datos. En la revista Electrónica & Computadores Nº 50 se hizo una descripción del programa Hyperterminal y la forma de utilizarlo (recuerde configurar el Hyperterminal a 2400 bps. haga la conversión e inmediatamente transmita el resultado. 8 bits. Carriage return Line feed 3FF • Cada dígito llega en formato ASCII • Primero el más significativo Caracter 2C El carácter 2Ch corresponde a la “. por eso en el programa el micro entra en un ciclo de espera luego de cada transmisión.Balcells. Canal 1 .” entre ellos. Canal 3 .B & B Electronics. José Luis. Para entender el programa presentado. por dicha razón se decidió que el software del microcontrolador. Una vez que se han leído los cuatro canales y se han enviado serialmente. Ed. Obviamente. al igual que la configuración que del microcontrolador se hace al inicio del ciclo. Josep y Romeral. 3.ti. el microcontrolador hace la transmisión de los caracteres 0Dh y 0Ah que sirven para indicar que empieza un nuevo paquete de información. Jan. “Autómatas Programables”. El software del microcontrolador hace que éste lea uno de los cuatro canales análogos a la vez. para lo cual sólo se requiere cargar el dato que se va a enviar en un registro determinado y esperar a que un bit o bandera cambie de estado.microchip. Una vez que se han transmitido los valores de los cuatro canales se debe indicar a la computadora que se terminó un barrido de los cuatro canales y que a continuación se enviará otro paquete de información con los resultados de los 4 canales. Una forma muy simple de observar que el proyecto está funcionando bien es hacer la recepción de los datos en el programa Hyperterminal de Windows 95 ó 98. Canal 2 . convierte el resultado a un equivalente de tres dígitos en formato ASCII que representan el número en formato hexadecimal. Figura 5. Para que la computadora pueda diferenciar en qué momento se terminó de recibir el dato de un canal y entienda que los dígitos siguientes pertenecen a otro canal. La conversión A/D por su parte. este es entregado en dos registros de 8 bits. Dado que la resolución del convertidor es de 10 bits. Esto implica que la computadora recibirá el valor de cada señal análoga en forma de tres dígitos. el programa de la computadora que debe recibir los datos debe configurarse para que entienda que el caracter de la coma separa datos entre canales y que estos dos últimos caracteres separan paquetes de datos de los cuatro canales. este aparece en su totalidad en la figura 6. La transmisión serial se hace utilizando el módulo USART. 2. a la velocidad y configuración deseada por el usuario. Microcomputer Journal.Hoja de datos del microcontrolador PIC16F873: www. En la figura 5 se muestra un pantallazo de este programa y la forma en que se observan los datos recibidos. luego de obtener el resultado. lo cual es muy utilizado en algunos equipos similares. “RS-422 and RS485 Application Note”. con lo cual se pueden ir cotejando una a una todas las funciones del programa y los registros que se utilizan. 1997.Monitoreo de señales análogas con el PIC16F873 Canal 0 . Estas tareas están organizadas de forma secuencial para que el trabajo sea repetitivo. Recepción de datos en la PC Computadoras • N° 65 55 . posee una rutina para hacer la conversión análogo a digital y que de paso. Para dicha tarea se han adicionado en la cadena de información un par de caracteres muy utilizados también en estas labores. Referencias 1. Estructura de la trama de datos que recibe la PC resultado hacia la computadora.com 6. empezando por el canal 0 y terminando con el canal 3.” Caracter 0D 0D hexadecimal Caracter 0A 0A hexadecimal Figura 4. Básicamente. 4. Alfaomega Marcombo.Hoja de datos del circuito integrado MAX232: www. El primer dígito que se transmite es el más significativo. los cuales unidos indican el valor de dicha señal. el valor digital obtenido puede estar entre 000 y 3FF hexadecimal.maxim-ic. se introduce el caracter ASCII de la coma “.Hoja de datos del circuito integrado SN75176: www.com 5. con los ocho menos significativos en el registro ADRESL y los dos más significativos en el registro ADRESH. corresponden al caracter Carriage Return (código 0D hexadecimal) y un caracter Line Feed (código 0A hexadecimal).Axelson. Otra rutina por su parte hace la transmisión serial de los tres dígitos que corresponden al resultado de cada canal y le agrega al final el carácter de la coma que sirve para separarlo del dato correspondiente al siguiente canal. Julio 1995. remitimos al lector a la hoja de datos del PIC16F873. simplemente para confirmar que se haya terminado dicha labor. tomara el dato y lo convirtiera en tres dígitos independientes en formato ASCII. “Networks for Monitoring and Control”. En la figura 4 se Electrónica & muestra la estructura del paquete de información que envía el microcontrolador hacia la computadora. 1 stop bit y sin paridad).com En cuanto al software del microcontrolador se refiere. 1998. tiene una consideración especial y es que como el resultado es de 10 bits.

TX el dato anterior txreg nibble3.puerto C entradas y pin TX salida .envía datos seriales .selecciona canal 2 y reloj .txif esper6 d’250' retardo inicio *************** .el caracter «coma» sirve para pir1.retardo entre bloques de 4 datos .pero antes revisa que haya esper2 .en los registros nibble1.datos que se reciben .datos en ADRESL y 2 bits en ADRESH status.txif .de los diferentes canales txreg PROGRAMA PRINCIPAL status.txif b’10000000' rcsta b’10000001' adcon0 conver enviar b’10001001' adcon0 conver enviar b’10010001' adcon0 conver enviar b’10011001' adcon0 conver enviar d’13' pir1.0 0fh nibble2 0ah nibble2.de 0 a 9 o si es letra A hasta F .La separación entre cada bloque .y un caracter line feed .El registro nibble3 que contiene .WDT = OFF .el numero de milisegundos llega .el usuario puede escoger el tiempo .convertidor encendido .rp0 buffer 0fh nibble3 0ah nibble3.rp0 pir1.n.w nibble1 30h nibble1 status.c 30h nibble3 .obtenidos en cada conversiÛn nibble1.se hace con un carriage return .inicia conversión .El dígito nibble2 tiene el mismo .txif esper4 txreg d’10' pir1.rp0 0ffh trisa trisb b’10111111' trisc b’00100110' txsta d’103' spbrg status.deseado.rp0 .txif .selecciona canal 3 y reloj .enviar otro paquete de datos .esta comprobación es para .txif esper5 txreg pir1.0 37h status.el último caracter antes de seguir .envía datos seriales de conv A/D de conv A/D de conv A/D de conv A/D .transmite el tercer dígito pir1.Al programar el micro tener en cuenta .Cada línea de datos tiene canal0. Adquisición de datos a 10 bits y Tx serial vía RS-485 .garantizar que se transmita .llama rutina de conversiÛn .procedimiento que nibble3 enviar esper espera esper2 esper3 movf btfss goto movwf movf btfss goto movwf movf btfss goto movwf movlw btfss goto movwf return .llama rutina de conversiÛn .rutina de retardo en milisegundos .programa USART asÌncrono para TX .pero debe esperar que termine de espera .el dígito menos significativo debe .1) .w status.rp0 adresl.pasa tres dígitos hexadecimales .OSC = XT .convertidor encendido .en el programa terminal de Windows .PWRT = ON Figura 6.enviado el segundo txreg d’44' .los fusibles de configuración .txif .pregunta si termina el retardo conver consu bsf movlw movwf bcf nop nop nop nop nop nop nop nop bsf nop nop btfsc goto movf movwf movlw addwf bsf movf bcf movwf andlw movwf movlw subwf movlw btfss movlw addwf .sirve para separar las líneas de .de 4 datos .0 37h status. Programa del PIC16F873 56 Electrónica & Computadoras • N°65 . nibble2 y nibble3 status.convertidor encendido .Utilizando el PIC16F873 .go adcon0.rp0 b’10000010' .a registros individuales .envía datos seriales .Rutina de conversión A/D a 10 bits .selecciona canal 0 y reloj .transmite el dígito hexadecimal pir1.selecciona canal 1 y reloj .Al registro nibble 1 le suma 30h .convertidor encendido .selecciona Vref interno (+5 y GND) adcon1 .0 .este retardo equivale a 250 milise . ************ bsf movlw movwf movwf movlw movwf movlw movwf movlw movwf bcf bsf movlw movwf movlw movwf call call movlw movwf call call movlw movwf call call movlw movwf call call movlw btfss goto movwf movlw btfss goto movwf nop nop btfss goto movlw call goto inicio . En este caso de 7 µs esper4 esper5 adcon0.transmite el segundo dígito hexa pir1.alta rata de baudios .para ser TX .separar el dato esper3 .cargado en el registro loops loops2 top loops top2 .configura temporizador a 4 MHZ .para hacer la conversión a ASCII end .Vuelve a empezar el ciclo para .espera que termine de convertir . .ELECTRONICA PRACTICA .c 30h nibble2 . ***** EMPIEZA EL PROGRAMA org 00 goto inicio retardo movwf top2 movlw movwf top nop nop nop nop nop nop decfsz goto decfsz goto return loops d’110' loops2 .habilita puerto serial . canal2 y canal3 . máximo 255 miliseg .puerto A entradas .canal1.Esta rutina envia serialmente los datos .llama rutina de conversiÛn .requerido.de mayor peso esper txreg nibble2.puerto B entradas .go consu adresh.devuelve 3 datos en hexadecimal guardados .2400 bps (8.envía datos seriales .pregunta si termino 1 ms .0 .llama rutina de conversiÛn .para convertirlo en ASCII esper6 .micro el tiempo de adquisición .estas instrucciones nop dan al . ******** DEFINICION DE REGISTROS Y BITS UTILIZADOS status ptoa ptob ptoc pclath intcon pir1 rcsta txreg rcreg adresh adcon0 trisa trisb trisc txsta spbrg adresl adcon1 rp0 rp1 irp z c txif go loops loops2 nibble1 nibble2 nibble3 buffer equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ equ 03 05 06 07 0ah 0bh 0ch 18h 19h 1ah 1eh 1fh 85h 86h 87h 98h 99h 9eh 9fh 5 6 7 2 0 4 2 20h 21h 22h 23h 24h 25h swapf andlw movwf movlw subwf movlw btfss movlw addwf return buffer.0 .probarse para ver si es un número .txif .