pic873-transmite-analogo

4
Electrónica & Computadoras • N° 65 53 Monitoreo de señales análogas con el PIC16F873 Introducción La Instrumentación es una de las áreas de mayor interés para quienes trabaja- mos en electrónica, en ella se pueden desarrollar gran cantidad de aplicacio- nes y de experimentos que involucran diferentes procesos, dentro de los cua- les 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 vigi- lar el comportamiento de variables ana- ló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 con- siderable de la computadora donde se deben registrar los datos. Para lograrlo, echamos mano de las herramientas que nos ofrecen los microcontroladores mo- dernos, entre las cuales destacamos los convertidores análogo/digital internos y los módulos de comunicación serial tipo USART (Receptor y Transmisor Síncro- no y Asíncrono Universal). Descripción del proyecto Dentro de los microcontroladores que se encuentran en el mercado escogimos para el proyecto uno de los más moder- nos, el PIC16F873 de la empresa Mi- crochip Technology (introducido al mer- cado en 1.999), figura 1. Este dispositi- vo se destaca, entre otros, por las si- guientes 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). Convertido A/D de 10 bits con 5 ca- nales 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 compa- tible con los otros miembros de la familia Microchip. Una vez seleccionado el tipo de mi- crocontrolador a utilizar diseñamos el cir- cuito completo, figura 2. En este caso, las señales análogas se pueden conectar direc- tamente a las entradas del PIC16F873 para que este haga la conversión a su equiva- lente valor digital, una vez realizada la con- versió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. 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 MCLR/VPP/THV RA0/AN0 RA1/AN1 RA2/AN2/VREF- RA3/AN3/VREF+ RA4/TOCKI RA5/AN4/SS VSS 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 VSS RC7/RX/DT RC6/TX/CK RC5/SDO RC4/SDI/SDA Figura 1. Diagrama de pines del PIC16F873 EDISON DUQUE C. Profesor Universidad Tecnológica de Pereira

Transcript of pic873-transmite-analogo

Page 1: pic873-transmite-analogo

Electrónica & Computadoras • N° 65 53

M o n i t o r e o d e s e ñ a l e s a n á l o g a s c o n e l P I C 1 6 F 8 7 3

IntroducciónLa Instrumentación es una de las áreasde mayor interés para quienes trabaja-mos en electrónica, en ella se puedendesarrollar gran cantidad de aplicacio-nes y de experimentos que involucrandiferentes procesos, dentro de los cua-les se puede contar la conversión aná-logo/digital y la comunicación serialcomo unos de los más frecuentes. Eneste proyecto utilizaremos justamenteestas dos técnicas para construir unequipo que será de gran ayuda paraaquellos que deben monitorear o vigi-lar el comportamiento de variables ana-lógicas en equipos que se encuentran auna distancia relativamente grande.

La idea principal es construir unaparato que permita conocer el estado decuatro variables analógicas, las cualespueden variar entre cero y cinco voltios,y que se encuentran a una distancia con-siderable de la computadora donde sedeben registrar los datos. Para lograrlo,echamos mano de las herramientas quenos ofrecen los microcontroladores mo-dernos, entre las cuales destacamos losconvertidores análogo/digital internos ylos módulos de comunicación serial tipoUSART (Receptor y Transmisor Síncro-no y Asíncrono Universal).

Descripción del proyectoDentro de los microcontroladores quese encuentran en el mercado escogimospara el proyecto uno de los más moder-nos, el PIC16F873 de la empresa Mi-crochip Technology (introducido al mer-cado en 1.999), figura 1. Este dispositi-vo se destaca, entre otros, por las si-guientes características:

• Memoria de programa tipo Flash de4 Kbytes (reprogramable al menos1.000 veces).

• Memoria RAM de 192 bytes.• Memoria EEPROM de datos de 128

bytes (reprogramable al menos100.000 veces).

• Convertido A/D de 10 bits con 5 ca-nales de entrada.

• Módulo de comunicación serialUSART.

• Dos módulos PWM (para ocho o diezbits).

• Tres temporizadores (dos de 16 bitsy uno de ocho).

• 13 fuentes de interrupción.• Conjunto de 35 instrucciones compa-

tible con los otros miembros de lafamilia Microchip.

Una vez seleccionado el tipo de mi-crocontrolador a utilizar diseñamos el cir-cuito completo, figura 2. En este caso, lasseñales análogas se pueden conectar direc-tamente a las entradas del PIC16F873 paraque este haga la conversión a su equiva-lente valor digital, una vez realizada la con-versión dicho resultado se debe transmitirserialmente hacia la computadora, para locual utilizamos el módulo USART, el cualse encarga de hacer las temporizaciones ytodas las demás actividades involucradasen la transmisión. Dicho módulo puede serconfigurado por software para seleccionarla velocidad y los demás parámetros. Ennuestro caso particular, configuramos latransmisión serial para una velocidad de2400 bps, datos de 8 bits, 1 stop bit y sinparidad.

Este artículo presenta una aplicación bastante útil, y a la vez fácil de implementar, del nuevomicrocontrolador 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 correspondienteshacia 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

MCLR/VPP/THV

RA0/AN0

RA1/AN1RA2/AN2/VREF-

RA3/AN3/VREF+

RA4/TOCKI

RA5/AN4/SSVSS

OSC1/CLKIN

OSC2/CLKOUT

RC0/T1OSO/T1CKIRC1/T1OSI/CCP2

RC2/CCP1

RC3/SCK/SCL

RB7/PGD

RB6/PGD

RB5RB4

RB3/PGM

RB2

RB1RB0/INT

VDD

VSS

RC7/RX/DTRC6/TX/CK

RC5/SDO

RC4/SDI/SDA

Figura 1. Diagrama de pines delPIC16F873

EDISON DUQUE C.Profesor Universidad Tecnológica de Pereira

Page 2: pic873-transmite-analogo

Electrónica & Computadoras • N°6554

E L E C T R O N I C A P R A C T I C A

A partir de este punto nos encontra-mos con uno de los aspectos más impor-tantes del proyecto, consiste en la inter-faz utilizada para conectar el microcon-trolador hasta el puerto serial de la com-putadora que registra los datos. Básica-mente, toda computadora personal tipoPC tiene al menos un puerto serial del tipoRS-232, en el cual se pueden conectardiferentes clases de dispositivos como elmouse, impresoras seriales y módemspara comunicaciones, entre otros; la granventaja es que dicho puerto de comuni-caciones puede ser utilizado para haceradquisición de datos mediante la conexiónde algún equipo especializado como elque estamos construyendo.

La interface serial RS-232 permitecomunicación entre dos equipos que es-tén separados hasta una distancia máxi-ma de 15 metros (según la norma), peroen la práctica se pueden obtener hasta 30metros. Esto representa un inconvenien-te para el proyecto planteado ya que laidea es que se puedan monitorear señalesque están bastante retiradas de la compu-tadora, caso muy frecuente en grandesindustrias ya que las instalaciones gene-ralmente son de gran tamaño (varios cien-tos de metros). Esta situación se puederesolver mediante la utilización de unainterface serial RS-485, la cual permitehacer comunicación entre equipos sepa-rados a distancias de hasta 1000 metros.

Dado lo anterior, el proyecto debe in-volucrar un circuito que convierta los nive-les TTL que entrega el microcontrolador alos niveles de tensión que se manejan en lainterface RS-485 (la cual maneja señales detipo diferencial), para lo que se utiliza uncircuito integrado SN75176 de Texas Ins-truments. Obviamente, se puede utilizar un

circuito integrado de otra referencia quecumpla con el mismo objetivo. A continua-ción de este circuito se tiene la línea detransmisión propiamente dicha, la cual pue-de medir varios cientos de metros y poseetres conductores, dos señales de tipo dife-rencial y la tierra. Para hacer la conexión lomás recomendable es utilizar cable tipoUTP (Unshielded Twisted Pair – Par Tren-zado sin blindaje), el cual presenta muybuenas características en cuanto a atenua-ción e inmunidad al ruido se refiere.

Por su parte, en el otro extremo de lalínea, es decir en la computadora, se debehacer una conversión de interface RS-485a interface RS-232. Esta tarea implicaconvertir nuevamente las señales de tipodiferencial a niveles TTL mediante otrocircuito integrado SN75176 y, a continua-ción, un circuito integrado MAX232 queconvierte niveles TTL en los niveles detensión adecuados para el puerto RS-232de la computadora. En la figura 3 se pre-senta el circuito completo.

Descripción del softwareEn los puntos anteriores hablamos acer-ca del hardware del proyecto, ahora, va-mos a hablar un poco del software que esquizás lo más interesante. Antes de refe-rirnos al programa del microcontroladorpropiamente, vamos a describir qué es loque hace. En primera instancia, hay quedejar en claro que las funciones principa-les del microcontrolador son la conver-sión análogo/digital de la señal correspon-diente al canal que se lea en un momentodeterminado y la transmisión de dicho

Señales análogas(0 - 5V)

Canal 0

Canal 1

Canal 2

Canal 3

Microcontrolador ConvertidorTTL / RS- 485

ConvertidorRS- 485 / TTL

ConvertidorTTL / RS- 232

InterfazRS- 485

(larga distancia)

Computadoraque registra

los datos

Al puerto serial dela PC 2400 bps

(8, n, 1)

Conector DB9hembra

La tierra sirvecomo blindaje

Rx1

2

3

4

5

6

7

8

9

7

15GND

T2OV-

C2-

C2+

C1-

C1+1

3

4

5

6

+

10 µFTantalio

10 µFTantalio

10 µFTantalio

10 µF

2

++5V

16V+ Vcc

MAX232

T2I 10

1

5

7

100Ω

6

3

2

8

+5V

A

B

DE

RE

R0

GND

SN75176

Líneas deTx RS- 485

100Ω

7

6

8

+5V

VccVcc

A

B

GND5

DE

RE

D1

SN75176

+5V

2

3

417

+5V

120VDD MCLRPIC16F873

RA0/AN0

RC6/TX

VSS

OSC2

OSC1

RA3/AN3

RA2/AN2

RA1/AN1

2

3

4

5

9

10

20pF

4MHz

20pFCanal 3

Canal 2

Canal 1

Canal 0

Señalesanálogas (0-5V)

+

+

8

Figura 2. Diagrama en bloques del circuito

Figura 3. Diagrama esquemático del circuito

Page 3: pic873-transmite-analogo

Electrónica & Computadoras • N° 65 55

M o n i t o r e o d e s e ñ a l e s a n á l o g a s c o n e l P I C 1 6 F 8 7 3

resultado hacia la computadora. Estas ta-reas están organizadas de forma secuen-cial para que el trabajo sea repetitivo.

El software del microcontroladorhace que éste lea uno de los cuatro cana-les análogos a la vez, haga la conversióne inmediatamente transmita el resultado,empezando por el canal 0 y terminandocon el canal 3. Dado que la resolución delconvertidor es de 10 bits, el valor digitalobtenido puede estar entre 000 y 3FFhexadecimal, por dicha razón se decidióque el software del microcontrolador, lue-go de obtener el resultado, tomara el datoy lo convirtiera en tres dígitos indepen-dientes en formato ASCII. Esto implicaque la computadora recibirá el valor decada señal análoga en forma de tres dígi-tos, los cuales unidos indican el valor dedicha señal. El primer dígito que se trans-mite es el más significativo. Para que lacomputadora pueda diferenciar en quémomento se terminó de recibir el dato deun canal y entienda que los dígitos si-guientes pertenecen a otro canal, se in-troduce el caracter ASCII de la coma “,”entre ellos, lo cual es muy utilizado enalgunos equipos similares.

Una vez que se han transmitido losvalores de los cuatro canales se debe in-dicar a la computadora que se terminóun barrido de los cuatro canales y que acontinuación se enviará otro paquete deinformación con los resultados de los 4canales. Para dicha tarea se han adicio-nado en la cadena de información un parde caracteres muy utilizados también enestas labores, corresponden al caracterCarriage Return (código 0D hexadeci-mal) y un caracter Line Feed (código 0Ahexadecimal). Obviamente, el programade la computadora que debe recibir losdatos debe configurarse para que entien-da que el caracter de la coma separa da-tos entre canales y que estos dos últimoscaracteres separan paquetes de datos delos cuatro canales. En la figura 4 se

muestra la estructura del paquete de in-formación que envía el microcontrola-dor hacia la computadora.

Una forma muy simple de observarque el proyecto está funcionando bien eshacer la recepción de los datos en el pro-grama Hyperterminal de Windows 95 ó98. Esta es una herramienta muy útil quepermite utilizar algún puerto serial de lacomputadora para que haga transmisióny recepción de datos, a la velocidad y con-figuración deseada por el usuario. En lafigura 5 se muestra un pantallazo de esteprograma y la forma en que se observanlos datos recibidos. En la revista Electró-nica & Computadores Nº 50 se hizo unadescripción del programa Hyperterminaly la forma de utilizarlo (recuerde confi-gurar el Hyperterminal a 2400 bps, 8 bits,1 stop bit y sin paridad).

En cuanto al software del microcon-trolador se refiere, este aparece en su to-talidad en la figura 6. Básicamente, po-see una rutina para hacer la conversiónanálogo a digital y que de paso, convierteel resultado a un equivalente de tres dígi-tos en formato ASCII que representan elnúmero en formato hexadecimal. Otra ru-tina por su parte hace la transmisión se-rial de los tres dígitosque corresponden alresultado de cada canaly le agrega al final elcarácter de la coma quesirve para separarlo deldato correspondiente alsiguiente canal. Unavez que se han leídolos cuatro canales y sehan enviado serial-mente, el microcon-trolador hace la trans-misión de los caracte-res 0Dh y 0Ah que sir-ven para indicar queempieza un nuevo pa-quete de información.

La transmisión serial se hace utili-zando el módulo USART, para lo cualsólo se requiere cargar el dato que seva a enviar en un registro determinadoy esperar a que un bit o bandera cambiede estado, por eso en el programa el mi-cro entra en un ciclo de espera luego decada transmisión, simplemente paraconfirmar que se haya terminado dichalabor. La conversión A/D por su parte,tiene una consideración especial y esque como el resultado es de 10 bits, estees entregado en dos registros de 8 bits,con los ocho menos significativos en elregistro ADRESL y los dos más signi-ficativos en el registro ADRESH. Paraentender el programa presentado, remi-timos al lector a la hoja de datos delPIC16F873, con lo cual se pueden ircotejando una a una todas las funcio-nes del programa y los registros quese utilizan, al igual que la configura-ción que del microcontrolador se haceal inicio del ciclo.

Referencias1.Axelson, Jan. “Networks for Moni-

toring and Control”. MicrocomputerJournal, Julio 1995.

2.B & B Electronics. “RS-422 and RS-485 Application Note”, 1997.

3.Balcells, Josep y Romeral, José Luis.“Autómatas Programables”. Ed. Al-faomega Marcombo, 1998.

4.Hoja de datos del microcontroladorPIC16F873: www.microchip.com

5.Hoja de datos del circuito integradoSN75176: www.ti.com

6.Hoja de datos del circuito integradoMAX232: www.maxim-ic.com

Canal0

, Canal1

, Canal2

, Canal3

, Carriagereturn

Linefeed

• Cada dígito llegaen formato ASCII

• Primero el mássignificativo

El carácter 2Chcorresponde a la “,”

0D hexadecimal 0A hexadecimal

Caracter 0D Caracter 0A3FF Caracter 2C

Figura 4. Estructura de la trama de datos que recibe la PC

Figura 5. Recepción de datos en la PC

Page 4: pic873-transmite-analogo

Electrónica & Computadoras • N°6556

E L E C T R O N I C A P R A C T I C A

; Adquisición de datos a 10 bits y Tx serial vía RS-485;Utilizando el PIC16F873

; ******** DEFINICION DE REGISTROS Y BITS UTILIZADOS

status equ 03ptoa equ 05ptob equ 06ptoc equ 07pclath equ 0ahintcon equ 0bhpir1 equ 0chrcsta equ 18htxreg equ 19hrcreg equ 1ahadresh equ 1ehadcon0 equ 1fhtrisa equ 85htrisb equ 86htrisc equ 87htxsta equ 98hspbrg equ 99hadresl equ 9ehadcon1 equ 9fhrp0 equ 5rp1 equ 6irp equ 7z equ 2c equ 0txif equ 4go equ 2loops equ 20hloops2 equ 21hnibble1 equ 22hnibble2 equ 23hnibble3 equ 24hbuffer equ 25h

; ***** EMPIEZA EL PROGRAMAorg 00goto inicio

retardo movwf loops ;rutina de retardo en milisegundostop2 movlw d’110' ;el numero de milisegundos llega

movwf loops2 ;cargado en el registro loopstop nop

nopnopnopnopnopdecfsz loops2 ;pregunta si termino 1 msgoto topdecfsz loops ;pregunta si termina el retardogoto top2return

;Rutina de conversión A/D a 10 bits;devuelve 3 datos en hexadecimal guardados;en los registros nibble1, nibble2 y nibble3

conver bsf status,rp0movlw b’10000010' ;selecciona Vref interno (+5 y GND)movwf adcon1 ;datos en ADRESL y 2 bits en ADRESHbcf status,rp0nopnop ;estas instrucciones nop dan alnop ;micro el tiempo de adquisiciónnop ;requerido. En este caso de 7 µsnopnopnopnopbsf adcon0,go ;inicia conversiónnopnop

consu btfsc adcon0,go ;espera que termine de convertirgoto consumovf adresh,w ;pasa tres dígitos hexadecimalesmovwf nibble1 ;a registros individualesmovlw 30h ;para ser TXaddwf nibble1 ;Al registro nibble 1 le suma 30hbsf status,rp0 ;para convertirlo en ASCIImovf adresl,wbcf status,rp0movwf bufferandlw 0fhmovwf nibble3 ;El registro nibble3 que contienemovlw 0ah ;el dígito menos significativo debesubwf nibble3,0 ;probarse para ver si es un númeromovlw 37h ;de 0 a 9 o si es letra A hasta Fbtfss status,c ;para hacer la conversión a ASCIImovlw 30haddwf nibble3

swapf buffer,0andlw 0fhmovwf nibble2 ;El dígito nibble2 tiene el mismomovlw 0ah ;procedimiento que nibble3subwf nibble2,0movlw 37hbtfss status,cmovlw 30haddwf nibble2return

;Esta rutina envia serialmente los datos;obtenidos en cada conversiÛn

enviar movf nibble1,0 ;transmite el dígito hexadecimalesper btfss pir1,txif ;de mayor peso

goto espermovwf txregmovf nibble2,0 ;transmite el segundo dígito hexa

espera btfss pir1,txif ;pero debe esperar que termine degoto espera ;TX el dato anteriormovwf txregmovf nibble3,0 ;transmite el tercer dígito

esper2 btfss pir1,txif ;pero antes revisa que hayagoto esper2 ;enviado el segundomovwf txregmovlw d’44' ;el caracter «coma» sirve para

esper3 btfss pir1,txif ;separar el datogoto esper3 ;de los diferentes canalesmovwf txregreturn

; ************ PROGRAMA PRINCIPAL ***************

inicio bsf status,rp0movlw 0ffhmovwf trisa ;puerto A entradasmovwf trisb ;puerto B entradasmovlw b’10111111'movwf trisc ;puerto C entradas y pin TX salidamovlw b’00100110' ;programa USART asÌncrono para TXmovwf txsta ;alta rata de baudiosmovlw d’103' ;configura temporizador a 4 MHZmovwf spbrg ;2400 bps (8,n,1)bcf status,rp0bsf pir1,txifmovlw b’10000000' ;habilita puerto serialmovwf rcstamovlw b’10000001' ;selecciona canal 0 y reloj de convmovwf adcon0 ;convertidor encendidocall conver ;llama rutina de conversiÛn A/Dcall enviar ;envía datos serialesmovlw b’10001001' ;selecciona canal 1 y reloj de convmovwf adcon0 ;convertidor encendidocall conver ;llama rutina de conversiÛn A/Dcall enviar ;envía datos serialesmovlw b’10010001' ;selecciona canal 2 y reloj de convmovwf adcon0 ;convertidor encendidocall conver ;llama rutina de conversiÛn A/Dcall enviar ;envía datos serialesmovlw b’10011001' ;selecciona canal 3 y reloj de convmovwf adcon0 ;convertidor encendidocall conver ;llama rutina de conversiÛn A/Dcall enviar ;envía datos seriales

movlw d’13' ;La separación entre cada bloqueesper4 btfss pir1,txif ;de 4 datos

goto esper4 ;se hace con un carriage returnmovwf txreg ;y un caracter line feedmovlw d’10' ;sirve para separar las líneas de

;datos que se recibenesper5 btfss pir1,txif ;en el programa terminal de Windows

goto esper5 ;Cada línea de datos tiene canal0,;canal1, canal2 y canal3

movwf txregnopnop

esper6 btfss pir1,txif ;esta comprobación es para;garantizar que se transmita

goto esper6 ;el último caracter antes de seguir

movlw d’250' ;retardo entre bloques de 4 datoscall retardo ;este retardo equivale a 250 milise

;el usuario puede escoger el tiempo;deseado, máximo 255 miliseg

goto inicio ;Vuelve a empezar el ciclo para;enviar otro paquete de datos

end

;Al programar el micro tener en cuenta;los fusibles de configuración;WDT = OFF;OSC = XT;PWRT = ON

Figura 6. Programa del PIC16F873