• No se han encontrado resultados

13. Histogramas de medición

14.4.1 Puerto RS232 USB

Los resultados de procesos realizados en el PIC se pueden visualizar en la pantalla del computador, pero antes es necesario establecer una comunicación entre el PIC y el computador. Para ello, se utiliza el puerto serial del computador RS232 o gracias al integrado FT232RL es posible utilizar un puerto USB del computador como si se tratara de un puerto RS232.

En el PC, el puerto RS232 tiene un conector de nueve pines (DB9) de los cuales solo usamos 3:

TX: transmisión de datos (pin 3) RX: recepción de datos (pin 2)

COM: tierra común a ambos (puede ser el pin 5)

El computador envía datos al PIC a través del pin TX y recibe datos del PIC a través del pin RX. Note que hay un solo cable para la transmisión de datos y un solo cable para su recepción, por lo tanto, el intercambio

14.4. INTRODUCCIÓN 103 de datos entre PC y PIC es de tipo serial asincrónico. En el PIC existen al igual TX y RX, y tenga en cuenta que TXPC se conecta con RXPIC y viceversa (de lo contrario, estarían conectados dos módulos que trans- miten en la misma línea, causando corto circuito y posiblemente daños a los dispositivos).

En estado inactivo, el TX se mantiene en uno lógico. Cuando se quieren transmitir datos, ese uno cambia a cero enviando lo que se conoce como bit start. Se empieza a enviar una secuencia de 8 bits (el dato enviado), y cuando se alcanza el bit 8, TX regresa nuevamente a uno (bit stop)) hasta que se decida enviar otro byte de información1.

Para la recepción, observando a RX, se comienza por detectar el bit start, se lee la secuencia de bits que llegan hasta la llegada del bit de stop.

Cada bit enviado o recibido, incluyendo los bits de start y stop, tie- nen una duración determinada, lo cual hace que la transmisión de un byte de 8 bits tenga un tiempo de duración fijo. Esto a su vez signifi- ca que existe un número máximo de bits que se pueden transmitir por segundo, lo cual determina la velocidad de transmisión. Entonces, para que la comunicación se pueda realizar, ambos dispositivos deben estar configurados a la misma velocidad, que para el caso de estas prácticas será de 9600 baudios2.

La configuración para la comunicación que será probada será enton- ces:

Modo: serial asíncrona Velocidad: 9600 baudios Bits de stop: 1

Bits transmitidos: 8

1El número de bits transmitido y el número de bits destop dependen de la con-

figuración del dispositivo. Esta configuración debe ser la misma para PC y para el PIC.

2La unidad baudios corresponde al número de símbolos transmitidos por segundo.

Para este caso de comunicación, como la unidad de información es el bit, entonces un símbolo es igual a un bit.

104 PRÁCTICA 14. COMUNICACIÓN SERIAL POR PUERTO RS232 -USB- USART A continuación se realizará la prueba de comunicación bidireccional:

PC PIC

Para la práctica, se usará la librería software.tar3. Para su instalación copie el archivo software.tar en el computador y desde allí escriba el siguiente comando:

$ tar -xvf software.tar

Entre otros, se creará el directorio:

rs232-vX/ donde están los programas que se corren desde el PC y el PIC

Ubíquese en el directorio rs232-vX.

PC  PIC

Abra el archivo tx1pic.c.

#include <pic.h> #include "rs232.h" __CONFIG(0x3f71); void main(){ //char dato; char x[5];

TRISB =0B00000000; // Todos los bits como salida PORTB=0x00; config_UART(); while(1){ receiver(x,1); sender(x,1); PORTB = x[0]; } } En este archivo:

se inicializa el puerto B como salidas

se inicializa el USART para el envío de datos en forma serial

14.4. INTRODUCCIÓN 105 se recibe serialmente un dato y se guarda en la variable X

se envía serialmente el dato recibido se coloca el dato recibido en el puerto B

Para compilar en una consola, diríjase al directorio mencionado y ejecute:

$ make -B -f Makefilepic PROGRAMA=tx1pic.c

Esto creará el archivo tx1pic.hex que será programado en la memoria del PIC. Ahora, programe el PIC con este archivo.

Para el PC, abra el archivo tx1pc.c.

#include <stdio.h> /* Standard input/output definitions */ #include <string.h> /* String function definitions */ #include <unistd.h> /* UNIX standard function definitions */ #include <fcntl.h> /* File control definitions */

#include <errno.h> /* Error number definitions */

#include <termios.h> /* POSIX terminal control definitions */ #include <sys/types.h>

#include <sys/stat.h> #include "utils_serial.h"

int main(int argc, char **argv) { int fd;//file descriptor (el puerto)

char enviar[255];//Maximo de datos a recibir en un solo paquete char recibir[255];//Maximo de datos a recibir en un solo paquete unsigned char rb[255];

int irb[255]; int i,j,n,c;

// Apertura del puerto fd = abrirpuerto_ttyS0();

// Limpieza del buffer e inicializacion del puerto tcflush(fd,TCIOFLUSH);

initport(fd);

tcflush(fd,TCIOFLUSH);

//inicializa vector enviar[] en ceros for(i=0;i<sizeof(enviar);i++) enviar[i]=0; c = 0;

106 PRÁCTICA 14. COMUNICACIÓN SERIAL POR PUERTO RS232 -USB- USART

while(c != 32){

//termina el programa con barra espaciadora + return for(i=8;i<16;i++){

// produce retardos en microsegundos, máximo un segundo usleep(900000);

for(j=0;j<sizeof(recibir);j++) recibir[j]=0; //Este numero debe estar entre 0 y 255 o 0x00 y 0xff

enviar[0]=i;

//envia un byte (enviar[0]) al puerto serial n = write(fd, enviar, 1);

printf("Dato enviado = %d \n",i); n = read(fd, recibir, 1);

//conversion del dato recibido de char a unsigned char rb[0] = recibir[0];

// conversion del dato recibido de unsigned char a entero. irb[0] = rb[0];

//Esto siempre hay que hacerlo cuando se recibe un dato printf("Dato recibido = %d\n\n",irb[0]);

}

printf("Oprima enter para continuar//

o barra espaciadora y enter para salir \n"); c = getchar(); // leer tecla oprimida y guardarla en c }

// Limpia los buffers y cierra el puerto tcflush(fd,TCIOFLUSH);

close(fd); return 0; }

En este archivo:

se abre el puerto /dev/ttyS0

se borra todo lo que haya llegado o fuera a ser enviado por el puerto se envía un número

se espera un tiempo

se lee lo recibido y se repite el ciclo de envío Compile el archivo con el comando

14.4. INTRODUCCIÓN 107 Para probar la comunicación realice los siguientes pasos:

1. Presione el reset del PIC

2. Con la consola en el directorio de archivos para el PC, ejecute $ tx1pc

Para este momento se debe estar observando en el PC que el mismo dato enviado se recibe, que es también el mismo dato que el PIC desplega en el puerto B.