USART PIC Comunicación serial


Compartir: Share on Facebook9Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn1

Usart pic conectoresUSART PIC, viene de 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 serial, en esta sección se comentará sobre este tipo de comunicación utilizando el módulo USART del microcontrolador PIC, con el módulo USART PIC el microcontrolador puede comunicarse e intercambiar datos con el ordenador, con otros microcontroladores, etc.

😉 Descarga este contenido en PDF desde aquí.

Para la comunicación entre microcontroladores y para la comunicación entre el microcontrolador y el ordenador, 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 serial entre el microcontrolador y el ordenador se seguirá la norma RS232.

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 simultanea, 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.

Si la comunicación USART 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 simultanea, el otro hilo será utilizado para enviar la señal de reloj de sincronización entre ambos dispositivos, 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 y cuando se inicia o finaliza la comunicación.

Usart pic 16f877aEl microcontrolador PIC utilizado como modelo será el PIC16F877A, los pines de este 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 en la imagen están resaltados resaltados.

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 de ambos dispositivos también tienen que estar conectados entres si.

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 un ordenador 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 serial del ordenador 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.

usart pic conexiones de pines

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 imagen.

usar pic conexion con ordenador

El socket donde se conectará el PIC con el ordenador para la comunicación serial es del tipo DB9 y se conoce como puerto serie, pero resulta que este tipo de puerto ya no viene en los ordenadores portátiles que son los que hoy en día la mayoría utiliza, lo que traen ahora son puertos USB, por lo que para realizar la comunicación serial con el módulo USART PIC será necesario la utilización de un conversor SERIE-USB como el que se muestra en la siguiente imagen.

Usart pic conversor serie-usbEl conector DB9 es el que se utiliza para la comunicación serial con el módulo USART PIC, este conector consta de de 9 pines, los hay  hembra y macho, de este conector solo se utilizarán 3 pines, uno para el pin RX, otro para el pin TX y el otro para el tierra, estos pines tiene una numeración que hay que respetar.

usart pic conectores DB9 hembra macho

El conversor serie-USB viene con el conector DB9 macho, si el cable que trae es corto se tendrá que conseguir un cable serie DB9 del que la hembra se conectará al conector DB9 macho del conversor serie-USB y el DB9 macho del cable serie DB9 al microcontrolador PIC ya sea a través del MAX232 o con el uso de la compuerta inversora como se comento lineas arriba, por lo que los pines a conectar del DB9 macho con el módulo USART PIC son en el siguiente orden:

  • El pin 2 que es pin receptor RX del conector DB9 macho que viene del ordenador, se conectará a través del MAX232 o con el uso de la compuerta inversora y la resistencia de 1K al pin transmisor o pin TX del microcontrolador.
  • El pin 3 que es pin transmisor TX del conector DB9 macho que viene del ordenador, se conectará a través del MAX232 o con el uso de la compuerta inversora y la resistencia de 22K al pin receptor o pin RX del microcontrolador.
  • El pin 5 que es pin GND o tierra o común del conector DB9 macho que viene del ordenador, se conectará al pin Vss del microcontrolador.

Las conexiones del módulo USART PIC con el ordenador a través de la compuerta inversora y las resistencias, con el uso del conversor serie-USB será como se indica en la siguiente imagen.

usar pic conexion con ordenador con conversor serie USB

USART PIC PROGRAMACIÓN

Para programar el módulo USART PIC 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 PIC los registros PIE1 y PIR1.

El registro TXSTA es el registro de control de la transmisión de datos.

Usart pic txsta

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 se 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 serial 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 se utilizan 9 bits en la transmisión de datos.

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

Usart pic rcsta

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 se 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 sobreescritura del dato recibido.

El bit 0 RX9D Este bit será el noveno bit se 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 serial 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.

Usart pic baudios fórmula

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 mas 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 un 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.

Usart pic baudios cuadro

El registro TXREG Es el registro donde se debe escribir el dato que se quiera enviar el 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 esta 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 esta 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.

USART PIC PROGRAMACIÓN en el XC8

Para la programación del módulo USART PIC se utilizará el XC8, ya que este permite trabajar directamente con los registros y esto es de gran ayuda para conocer mucho mas sobre el manejo de los microcontroladores PIC, en este caso se comentará como se puede proceder para utilizar el módulo USART PIC del PIC16F877A, lo aquí comentado es muy similar para otros microcontroladores PIC

Para iniciar el módulo USART PIC.

Los pines del PIC116F877A para el manejo del módulo USART PIC son el pin RC7 para la recepción de datos por lo que en este caso se le llama pin RX, y el pin RC6 para la transmisión de datos, en este caso se le llama pin TX, el pin RX se tiene que configurar como una entrada digital y el pin TX se tiene que configurar como una salida digital, esto en el XC8 se puede hacer así:

TRISCbits.TRISC7=1;//pin RX como una entrada digital

TRISCbits.TRISC6=0;//pin RX como una salida digital

Configuración del registro TXSTA para el control de la transmisión de datos, en este caso se hará para que la transmisión sea a 8 bits en forma asíncrona de alta velocidad por lo que:

El bit7 en modo asíncrono no se usa por lo que se pondrá a 0.

El bit6 se pondrá a 0 para que la transmisión sea a 8 bits.

El bit5 se pondrá a 1 para que esté habilitada la transmisión de datos.

El bit4 se pondrá a 0 porque la transmisión será asíncrona.

El bit3 no se utiliza por lo que se lo pondrá a 0.

El bit2 se pondrá a 1 para que el módulo USART PIC trabaje a alta velocidad.

El bit1 es un bit de estado trabaja automáticamente e indica cuando el registro donde se coloca el dato a transmitir está lleno o vacío, se lo puede poner a 1  o a 0 para iniciar, en este caso se lo pondrá a 1 porque se está iniciando y tendría que estar vacío.

El bit0 no se utiliza porque es el bit de paridad cuando se utiliza la transmisión de 9 bits pero como se utilizará la transmisión a 8 bits no influye y se lo pondrá a 0.

Luego en la inicialización del módulo USART PIC el registro TXSTA en el XC8 quedará así:

TXSTA=0b00100110;// 8bits, transmisión habilitada, asíncrono, alta velocidad

Configuración del registro RCSTA para el control de la recepción de datos, en este caso se hará para que la recepción sea a 8 bits en forma asíncrona de alta velocidad por lo que:

El bit7 se pondrá a 1 para habilitar el uso del módulo USART PIC.

El bit6 se pondrá a 0 para que la recepción sea a 8 bits.

El bit5 se pone a 0 porque no se usa en la comunicación asíncrona.

El bit4 se pone a 1 para habilitar la recepción de datos.

El bit3 se pone a 0 porque la recepción será a 8 bit.

El bit2 este bit trabaja automáticamente cuando se pone a 1 indica que se ha recibido un dato no válido.

El bit1 este bit trabaja automáticamente cuando se pone a 1 indica que se ha producido un error por sobreescritura de algún dato recibido.

El bit0 no se utiliza porque es el bit de paridad cuando se utiliza la recepción de 9 bits pero como se utilizará la recepción a 8 bits no influye y se lo pondrá a 0.

Luego en la inicialización del módulo USART PIC el registro RCSTA en el XC8 quedará así:

RCSTA=0b10010000;//habilitado el USART PIC, recepción 8 bits,  habilitada, asíncrono

Carga del registro SPBRG para los baudios o la cantidad de bits por segundo para la comunicación serial, como será a alta velocidad por lo que el bit BRGH del registro TXSTA se puso a 1 y en forma asíncrona, se utilizará la fórmula.

Velocidad en baudios=baudios=Fosc/(16*(SPBRG+1))

Al despejar se tendrá

SPBRG=(Fosc/(16*baudios))-1

En los ejemplos que se harán se utilizará una Fosc de 4Mhz y la velocidad será de 9600 baudios, por lo que al reemplazar se tendrá que el valor a cargar en el registro SPBRG será de 25, luego en el XC8 será:

SPBRG=25;//para una velocidad de 9600baudios con un oscilador de 4Mhz

Entonces se puede iniciar el módulo USART PIC en el XC8 de la siguiente manera:

La inicialización podría hacerse dentro de una función a la que se le puede dar el nombre que se quiera, en este caso se la llamará iniciar_usart() lo que en el XC8 será así:

Para la recepción de datos con el módulo USART PIC.

Los datos que se reciben son de tipo caracter, cuando se va recibir un dato a través del pin RX se tendrá que esperar a que el bit5 del registro PIR1 se ponga a 1, este bit indica que se ha completado la recepción del dato, el dato recibido es de tipo caracter char y estará en el registro RCREG, cuando se lee el dato guardándolo en alguna variable de tipo caracter char este bit se pondrá automáticamente a 0, la recepción de los datos en el XC8 se hará en una función a la que se le puede llamar como se desee, en este caso se le llamará recibe_caracter_usart().

Para la transmisión de datos con el módulo USART PIC.

Los datos que se transmiten son de tipo caracter, cuando se va transmitir un dato a través del pin TX se tendrá que esperar a que el registro TSR donde se ponen los datos que se van a enviar esté vacío, esto se hace esperando a que el bit1 TRMT del registro TXSTA se ponga a 1, este bit indica que se ha completado la transmisión de un dato anterior mientras el dato que está en espera se  coloca en el registro TXREG, cuando se vacíe el registro TSR se podrá enviar el otro dato que está esperando en el registro TXREG pasándolo en forma automática al registro TSR, el dato transmitido es de tipo caracter char, cuando se pasa el dato del registro TXREG al registro TSR este bit se pondrá automáticamente a 0, la transmisión de los datos en el XC8 se hará en una función a la que se le puede llamar como se desee, en este caso se le llamará envia_caracter_usart().

Para la transmisión de cadenas de caracteres con el módulo USART PIC se puede utilizar la función vista anteriormente para la transmisión de caracteres para enviar cadenas de caracteres, para ello se creará otra función que se puede llamar  como se desee pero en este caso se le llamará envia_cadena_usart().

ARCHIVO DE CABECERA PARA EL USO DEL MÓDULO USART PIC EN EL XC8

Se puede agrupar todas la funciones vistas anteriormente para el uso del módulo USART PIC en el XC8 en forma asíncrona, 8 bits y a 9600 baudios en un archivo de cabecera al que se le llamará en este caso usart.h, aunque se le puede dar el nombre que se desee, se hará uso de este archivo de cabecera en los ejemplos que se realizarán con el PIC16F877A, si se utiliza otro pic u otra velocidad de comunicación es fácil hacer los cambios que se necesiten dentro del archivo usart.h, se verá algún ejemplo.

USART PIC PROGRAMACIÓN Ejemplos en el XC8

Para ver los ejemplos del manejo del módulo USART PIC visitar este enlace.

Si he podido ayudarte con el uso del módulo USART PIC, comparte este enlace para poder ayudar a muchas personas mas. Muchas Gracias.

Atte: MrElberni.

Compartir: Share on Facebook9Tweet about this on TwitterShare on Google+0Share on Tumblr0Share on LinkedIn1