Comunicación Serie en el PIC PDF

Title Comunicación Serie en el PIC
Course Microcontroladores
Institution Instituto Tecnológico de Tijuana
Pages 37
File Size 1.8 MB
File Type PDF
Total Downloads 3
Total Views 137

Summary

Download Comunicación Serie en el PIC PDF


Description

Comunicación Serie en el PIC16F877A. Los microcontroladores PIC usan dos formas para comunicarse de forma serie, las cuales son mostradas en la figura 1:

SCI (Serial Communications Interface)

ComunicaciónSerie MSSP (Master Synchronous Serial Port)

Universal Synchronous Asynchronous Receiver Transmitter (USART) SPI (Serial Peripheral Interfase)  I2C (Inter-Integrated Circuit)

Figura 1. Diagrama de los modos de comunicación serie del PIC 16F877A.

Módulo SCI, USART La comunicación con el módulo USART (Receptor Transmisor Síncrono/Asíncrono Universal), es una forma de comunicación entre dispositivos que tengan esta capacidad, donde los datos son enviados en grupos de 8 bits o de 9 bits, pero bit por bit, esto es en serie, por eso se dice que esta es una comunicación serie. Con el módulo USART el microcontrolador puede comunicarse e intercambiar datos con una computadora, con otros microcontroladores, o cualquier equipo o dispositivo electrónico. Para la comunicación entre microcontroladores y para la comunicación entre el microcontrolador y con computadora, se necesitan 2 hilos de conducción para la transmisión y recepción de datos, y un hilo de conducción para la conexión de los comunes o GND que tienen que ser los mismos, para la comunicación serie entre el microcontrolador y una computadora se seguirá la norma RS232.

Si la comunicación USART del PIC es SÍNCRONA: Uno de los hilos será utilizado tanto para la transmisión y la recepción de datos por lo que la transmisión no puede ocurrir en forma simultánea, el otro hilo será utilizado para enviar la señal de reloj de sincronización entre ambos dispositivos (mostrado en la figura 2), en este caso uno de los dispositivos es llamado maestro y el otro esclavo, el maestro es el que controla la señal de reloj cuando se inicia o finaliza la comunicación.

Características: -

Modo semi-dúplex La comunicación serie se transmite en una sola línea, en ambos sentidos. No se pueden enviar información en ambos sentidos de forma simultánea La transmisión puede ser maestro o esclavo

Figura 2. Línea de datos y línea de reloj en comunicación asíncrona. Si la comunicación USART PIC es ASÍNCRONA: Uno de los hilos será para la transmisión de los datos de un dispositivo a otro y el otro hilo será para la recepción de datos entre un dispositivo a otro, la transmisión y la recepción pueden ocurrir en forma simultánea, lo que si se tiene que cumplir es que la frecuencia de trabajo de ambos dispositivos tiene que ser la misma, a esto se le conoce como los baudios que viene a ser la cantidad de bits por segundo que se transmitirán entre ambos dispositivos. Esta forma de comunicación se muestra en la figura 3. Características: - Transmisión es full-dúplex (se utilizan dos líneas, una de transmisión Tx y otra de recepción Rx) - La frecuencia del reloj se acuerda antes de la transmisión - La sincronización se realiza durante la transmisión - Cada trama de datos tiene un tamaño fijo y posee un bit de arranque(inicio) y un bit de parada(final).

Figura 3. Trama de bits en comunicación asíncrona.

Figura 4. Pines del pic 16F877A en empaquetado DIP40 remarcando los pines para TX y RX en comunicación serie.

Comunicación Serie con módulo USART del PIC Los pines del microcontrolador que trabajan con el módulo USART PIC son el pin RX o pin receptor y el pin TX o pin transmisor, los que están marcados en la figura 4, se debe considerar lo siguiente: -

El pin RX es el pin para la recepción de datos y tendrá que ser configurado como una entrada digital. El pin TX es el pin para la transmisión de datos y tendrá que ser configurado como una salida digital. El pin RX del PIC tiene que ser conectado al pin TX del otro dispositivo. El pin TX del PIC tiene que ser conectado al pin RX del otro dispositivo

Los comunes (o tierras) de ambos dispositivos también tienen que estar conectados entre sí. Los niveles de tensión con los que trabajan los pines del módulo USART PIC son de 0V y 5V un bajo será 0V mientras que un alto será 5V, por eso cuando la comunicación es entre microcontroladores la conexión entre pines se puede hacer directamente, pero cuando la comunicación es entre el microcontrolador y una computadora, la conexión entre pines tiene que hacerse a través de un conversor de nivel como el MAX232, ya que los niveles de tensión para la comunicación serie de la computadora son mayores que para el PIC, típicamente entre -12V y 12V; además de trabajar con lógica negativa, esto es, para el ordenador un bajo será 12V mientras un alto será -12V.

Computadora

Para realizar la conversión de niveles de voltaje se usan los circuitos integrados MAX232 o 74HC14. Esto se muestra en las figuras 5 y 6.

Figura 5. Conexión de dos sistemas en el estándar de comunicación RS232. Hay otra manera de conectar el PIC con el ordenador para la comunicación serial mediante resistencias y la compuerta inversora tipo Schmitt 74HC14 como se ve en la siguiente figura.

Computadora Figura 6. Conexión de dos sistemas en el estándar de comunicación RS232 usando el IC 74HC14 para conversión de niveles de voltaje. La conexión entre PIC y la computadora para la comunicación serie puede ser con un conector del tipo DB9 y se conoce como puerto serie, pero este tipo de puerto en la mayoría de los casos ya no viene incluido en las computadoras, lo que incluyen generalmente son puertos USB, por lo que para realizar la comunicación serie con el módulo USART PIC será necesario el uso de un convertidor SERIE-USB, esto se muestra en la figura 7.

Figura 7. Tipos diferentes de convertidores Serie-USB El conector DB9 es el que se utiliza para la comunicación serie con el módulo USART PIC, este conector consta de de 9 pines, los hay hembra y macho, de este conector en la mayoría de los casos se utilizan 3 pines, uno para RX, otro para TX y el otro para la tierra. El sistema completo se muestra en la figura 8.

Computadora

Figura 8. Conexión usando un adaptador Serie-USB y convirtiendo las señales con el circuito integrado 74HC14.

Programación del USART en el PIC Para programar el módulo USART en el PIC16F877A, se utilizan los siguientes registros: el registro TXSTA, el registro RCSTA, el registro SPBRG, el registro TXREG, el registro RXREG, y si se utilizan interrupciones USART los registros PIE1 y PIR1. El registro TXSTA es el registro de control de la transmisión de datos.

El bit7 CSRC es útil cuando se utiliza la comunicación serial síncrona, mediante este bit se elige la fuente de reloj esto es quien de los dispositivos será el maestro, en la comunicación serial asíncrona este bit no tiene efecto. El bit6 TX9 Es para elegir si la transmisión de datos será a 9 bits o a 8 bits, si este bit se pone a 1 la transmisión será a 9 bits y si este bit se pone a 0 la transmisión será a 8 bits. El bit5 TXEN Este es el bit que habilita la transmisión de datos, al ponerlo a 1 se habilita la transmisión de datos y si se lo pone a 0 la transmisión de datos estará deshabilitada. El bit4 SYNC Con este bit se elige el tipo de comunicación serial a utilizar con el módulo USART PIC, al ponerlo a 1 la comunicación serie será síncrona y al ponerlo a 0 la comunicación será asíncrona. El bit3 no se utiliza. El bit2 BRGH Este bit es para seleccionar la velocidad de los baudios, que es la cantidad de bits que se enviarán por segundo en el modo asíncrono, si se pone a 1 será de alta velocidad, si se pone a 0 será de baja velocidad. El bit1 TRMT Este bit indica el estado del registro TSR utilizado para la transmisión de datos, trabaja automáticamente, si está a 1 indica que el registro esta vació, si está a 0 indica que el registro está lleno. El bit 0 TX9D Este bit será el noveno bit se utilizan 9 bits en la transmisión de datos.

El Registro RCSTA Es el registro de control de la recepción de datos.

El bit7 SPEN Este bit es que permite la habilitación del uso del módulo USART PIC, si se pone a 1 se habilita el uso del módulo USART PIC, si se pone a 0 no es posible utilizar el módulo USART PIC. El bit6 RX9 Es para elegir si la recepción de datos será a 9 bits o a 8 bits, si este bit se pone a 1 la recepción será a 9 bits y este bit se pone a 0 la recepción será a 8 bits. El bit5 SREN Este es el bit se utiliza en el modo síncrono para habilitar la recepción síncrona, en el modo asíncrono no es utilizado. El bit4 CREN Con este bit se habilita la recepción continua de datos al ponerlo a 1, si se pone a 0 la recepción continua de datos está deshabilitada. El bit3 ADDEN Es utilizado en el modo asíncrono si la recepción de datos es de 9 bits. Si la recepción de datos es a 8 bits no es utilizado El bit2 FERR Este bit trabaja automáticamente si se pone a 1 es que se ha recibido un dato no válido. El bit1 OERR Este bit trabaja automáticamente y se pondrá a 1 si se ha producido un error por sobre-escritura del dato recibido. El bit 0 RX9D Este bit será el noveno bit se utilizan 9 bits en la recepción de datos. El registro SPBRG Es el registro donde se debe cargar el valor con el que se elige la velocidad de transmisión de los datos, esto es los baudios o la cantidad de bits por segundo que se enviarán en la comunicación serie con el módulo USART PIC, trabaja junto con el bit BRGH del registro TXSTA. El valor a cargar en el registro SPBFG se calcula con las siguientes fórmulas que dependerán de la velocidad elegida con el bit BRGH, de la frecuencia del oscilador utilizado y de si la comunicación será síncrona o asíncrona.

Los ejemplos que se harán serán para la transmisión asíncrona a alta velocidad por lo que la fórmula que se utilizará será:

Velocidad en baudios = Fosc / (16*(SPBRG+1)) Es importante recordar que la velocidad en baudios de los dispositivos que se estén comunicando tienen que ser iguales, la más común es la de 9600 baudios, si en la fórmula anterior se reemplaza y se despeja se tendrá: SPBRG = (Fosc/(16*9600))-1 de donde: SPBRG=(Fosc/153600)-1 Por ejemplo, si el oscilador es de 4MHz se tendrá SPBRG= (4000000/153600)-1 = 25

Por lo que para obtener una velocidad de 9600 baudios se tendrá que cargar el registro SPBRG con 25. Hay un cuadro en la hoja de datos donde se tienen algunos valores a cargar en este registro para el modo síncrono y asíncrono dependiendo de la frecuencia del oscilador utilizado y de la velocidad elegida.

El registro TXREG Es el registro donde se debe escribir el dato que se quiera enviar la comunicación serial con el módulo USART PIC. El registro RCREG Es el registro donde se debe leer al recibir algún dato en la comunicación serial con el módulo USART PIC. El registro PIE1 Al poner el bit4 de este registro a 1 se habilita el uso de interrupciones por la finalización de la transmisión del dato y al poner el bit5 de este registro a 1 se habilita el uso de las interrupciones por la finalización de la recepción del dato. El registro PIR1 El bit bit4 de este registro se pondrá a 1 cuando se ha terminado la transmisión del dato, luego se pondrá automáticamente a 0, si está habilitada la interrupción por finalización de la transmisión del dato este bit será el que indica que ha ocurrido la interrupción. El bit5 de este registro se pondrá a 1 cuando se ha terminado la recepción del dato, luego se pondrá automáticamente a 0, si está habilitada la interrupción por finalización de la recepción del dato este bit será el que indica que ha ocurrido la interrupción.

Directivas y Funciones en C para el Módulo USART Directiva: #USE RS232(opciones) Nos permite configurar las características del módulo USART Opciones

Descripción

BAUD=x

Velocidad en baudios

XMIT=pin

Pin para la transmisión

RCV=pin

Pin para recepción

PARITY=x

Paridad, donde x es N (no), E (even), u O (odd)

BITS=x

Tamaño de la trama de datos (5-9)

Ejemplo: #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, parity=N, bits=8)

Funciones de Transmisión De Datos: putc(data) y putchar(data) Estas funciones envían del valor data de 8 bits por el pin xmit. puts(string) Envía cada caracter de string por el pin de salida al RS232 usando putc(), donde string es una cadena de caracteres constante o una cadena de caracteres terminada con un cero.

printf (string) printf (cstring, values...) printf (fname, cstring, values...) donde: fname: función a utilizar para escribir la cadena indicada, por defecto se utiliza putc() cstring: cadena de caracteres o matriz de caracteres terminada en 0. values: valores a indicar en la cadena, se debe indicar %nt Ejemplos: printf("Hola"); printf("Valor del RTCC => %2x \n\r", get_rtcc()); printf(" %2u %X %4X \n \r", x, y, z); printf(lcd_putc, "n = %u", n);

Funciones de Recepción De Datos valor = getc() valor = getch() valor = getchar() dónde: valor es un carácter de 8 bits. Espera recibir un carácter por la línea RS232 y devuelve su valor.

valor=kbhit() donde: valor=0 (false) si getc() debe esperar a que llegue un carácter valor=1 (true) si ya hay un carácter para ser leído por getc()

Ejemplo 1:  #include #FUSES XT, NOWDT, NOPROTECT, NOLVP, NODEBUG #use delay(clock=4000000) #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N) #include char ch;

// Dato global a leer

#int_rda

// Rutina de servicio de interrupción

void serial_isr() { ch=getchar();

// Lee dato por Puerto serie

puts("Recibido"); } void main() { lcd_init(); enable_interrupts(global); enable_interrupts(int_rda); while(1) { printf(lcd_putc, "\n\r Valor %c",ch); } }

Ejemplo 2:

#include #fuses XT, NOWDT #use delay(clock=4000000) #use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7)

#define use_portb_lcd TRUE #define use_portb_kbd TRUE

#include #include

int valor;

//Dato a transmitir

char tecla;

//Dato ASCII tecla pulsada

/**** FUNCIÓN INTERRUPCIÓN POR RECEPCIÓN DE DATOS ******/ #int_RDA

//Interrupción por recepción de datos

void RDA_isr() { valor=getc();

//En "valor" el dato recibido via RS232

printf(lcd_putc, "\fRecibido %d ", valor); //Se muestra en pantalla información recibida delay_ms(500); }

/*********FUNCIÓN PRINCIPAL **************************/ void main () { port_b_pullups(TRUE); lcd_init();

//Inicialización del display

enable_interrupts(INT_RDA);

//Habilitación interrupción por recepción RS232

enable_interrupts(GLOBAL); while(1){ tecla=kbd_getc();

//En "tecla" la tecla pulsada

valor=tecla-48;

//Valor ASCII se pasa a su valor numérico

if(tecla!=0){

//Si se pulsa tecla...

putc(valor);

//...se envía contenido de "valor" (tecla pulsada)

printf(lcd_putc, "\fEnviado %d", valor); //Se muestra en pantalla información enviada delay_ms(500); } }

Comunicación I2C Para simplificar la interconexión de dispositivos al microprocesador, Philips desarrolló un sencillo bus bidireccional basado en dos hilos por el que se trasmiten los datos vía serie y lo llamó Bus I2 C. EL Bus I2C (Inter- Integrated Circuits) fue desarrollado a principios de los 80’s. Su propósito original fue el de proporcionar una manera fácil de conectar un CPU a los chips periféricos en un equipo de TV. Para el PIC 16F877A, el I2C es uno de los modos de trabajo del módulo MSSP (Puerto Serie Síncrono Maestro) del microcontrolador.

Figura9. Diagrama a bloques del Módulo MSSP en Modo I 2C.

Para la comunicación I2C se utilizan 2 hilos, se le conoce como bus I2C. A estos hilos se conectan los dispositivos que se puedan comunicar mediante el mismo protocolo; por uno de los hilos se enviará una señal de reloj (SCL) para la sincronización y por el otro hilo se enviarán o recibirán datos (SDA). Se pueden conectar varios dispositivos de los que uno de ellos será el maestro, es el que generará la señal de reloj además de decidir cuándo se inicia o finaliza la

comunicación y si la comunicación será de recepción o transmisión de datos. Los demás dispositivos conectados al bus I2C se conocen como esclavos.

Figura 10. Conexión del dispositivo Maestro y los dispositivos Esclavos en I2C.

Cada uno de los dispositivos tiene una dirección, cuando el maestro necesita comunicarse con alguno de los esclavos lo hará enviando la dirección del esclavo a través del bus I2C, cuando el esclavo reciba su dirección podrá comunicarse con el maestro, el maestro además tiene que enviar un bit mediante el cual le indica al esclavo si quiere enviarle un dato o quiere recibir un dato del esclavo.

Figura 11. Trama de comunicación entre el dispositivo Maestro y los dispositivos Esclavos en I2C.

Figura 12. Pines de conexión de I2C en el microcontrolador PIC16F877A.

En la figura 12 se tiene la distribución de pines del PIC16F877A, se han resaltado las ubicaciones de los pines SCL y SDA. Los pines que se utilizan en el modo I2C PIC son los nombrados como SDA (serial data) y SCL (serial clock), el pin SDA es para enviar o recibir los datos, y el pin SCL es para la señal de reloj, estos pines deben ser declarados como entradas digitales, además se les debe conectar resistencias de pull-up mediante unas resistencias que pueden ser de 4,7K a la tensión de alimentación del microcontrolador PIC; los pines de los demás dispositivos conectados al bus I2C también están nombrados como SDA y SCL, cuando no se estén comunicando estos pines estarán normalmente en alto o a 1.

Figura 13. Conexión de resistencias de pull-up para la comunicación I2C.

La velocidad de comunicación puede ser de hasta 100Kbps en el modo estándar o normal, aunque puede llegar en el modo rápido hasta los 400Kbps y hasta más de 3Mbps, esto dependerá de los dispositivos utilizados, para ello es recomendable revisar sus hojas de datos. La comunicación I2C se realiza de la siguiente manera: -

La señal del pin SDA del maestro pasa de un alto a un bajo mientras la señal su pin SCL esté a un alto, esto es El Inicio (o Start) de la comunicación I2C, al iniciar la comunicación se genera una señal de reloj por el pin SCL del maestro y se empieza a enviar los datos por el pin SDA en grupos de 8 bits.

-

El maestro enviará primero la dirección de identificación del esclavo con el que se quiera comunicar junto con el bit de escritura lectura, si el maestro quiere enviar o escribir un dato este bit será 0, si el maestro quiere leer o recibir un dato este bit será 1, la dirección del esclavo normalmente será de 7 bits, aunque también hay direcciones de 10bits.

-

Cada vez que el esclavo reciba un byte el esclavo responderá enviando un bit en bajo o 0 al maestro para indicar que se ha establecido la comunicación, este es un bit de confirmación de comunicación y se le llama ACK, si la

comunicación no se establece el valor del bit ACK será un 1 (bit A n la trama de la figura 2). -

Después, el maestro enviará el dato si lo que se quiere es enviar o escribir un dato en el registro del esclavo, el esclavo responderá enviando al maestro el bit de confirmación ACK; pero si lo que se quiere es que el maestro recibirá o lea algún dato desde algún registro del esclavo, ocurrirá que si la recepción es correcta es maestro enviará al esclavo el bit de confirmación ACK.

-

Por último y para finalizar la comunicación la señal del pin SDA pasará de un bajo a un alto mientras la señal de reloj en el pin SCL este en un alto, en ese momento se deja de generar la señal de reloj y la comunicación habrá terminado (condición de STOP).

Programación I2C Para programar la comunicación I2C se recomienda leer la hoja de datos del PIC16F877A. Se utilizan los siguientes registr...


Similar Free PDFs