PIC18F25K22 & XC8: Uso básico de la UART1 - Envio y recepción de datos


Saludos!! Siguiendo con ejemplos sobre el PIC18F25K22 hoy veremos una forma básica se establecer una comunicación serial utilizando la UART1 de este microcontrolador. Se configurara la UART1 para envio y recepción de datos deforma manual, lo que quiere decir es que el MCU siempre esperara un dato para poder procesarlo (esto bloquea el MCU mientras espera, en un siguiente post veremos la forma de mejorarlo). 

Sponsor: PCBWay
Empresa manufacturera de PCBs y ensambles ubicada en China, con ya varios años en el mercado. Esta empresa nos permite realizar prototipos rápidos para nuestros desarrollos a medida., pero también permite realizar grandes producciones para proyectos comerciales. A continuación algunas características, si deseas saber mas o adquirir un servicio te recomiendo revisar su página.
  • Servicio de PCBs por tan solo $5 (USD) las 10 unidades, de 1 o 2 caras.
  • Cada nuevo miembro recibe un bono de $5(USD), más servicio express de 24Hs o 48Hs.
  • Servicio de ensamblado de PCBs por $30(USD)
  • Fabricación de esténcil, componentes y mas.
Circuito:
Como ya hemos venido haciendo en otros ejemplos estaré usando la PIC18BT MCE Development Board v1.0 para testear el codigo, pero el circuito es muy sencillo no requiere mucha explicación como monitor serial estaré usando el modulo chino "USB TO TTL CH340" que ya hemos usado en otros ejemplos en el blog. La conexión es la siguiente (recordar que las lineas de datos son cruzados):

MODULO CH340                 PIC18F25K22
        GND                                     GND
        RX                                     TX1/RC6
        TX                                     RX1/RC7

Ademas tenemos tres LEDs conectados en los pines RC2, RC3, RC4 respectivamente, con sus debidas resistencias.

Información:
Bueno mas que información sera detalles de la configuración usada para la UART (recomiendo leer el datasheet del microcontrolador, para conocer la información mas detallada).

Los registros a configurar son: TXSTAx y RCSTAx (este MCU tiene dos puerto pero en este ejemplos estaremos usando el 1, por lo tanto seria TXSTA1 y RCSTA1), también el SPBRG para configurar el baud rate.
  • TXSTAbits.BRGH = 0; // Baja velocidad
  • TXSTAbits.SYNC = 0; // Modo asíncrono
  • TXSTAbits.TXEN = 1; // Habilitar transmisión
  • RCSTAbits.SPEN = 1; // Habilitar puerto serial
  • RCSTAbits.CREN = 1; // Habilitar recepción
Como se usa BRGH = 0 y SYNC = 0, ademas BRG16 es cero por default del MCU, estamos configurado baja velocidad y vamos a tener un Baud Rate Generador de 8-bits. Para el calculo del valor de SPBRG estaremos usando la siguiente formula. 


En el codigo tenemos la siguiente forma para calcular "SPBRG = ((_XTAL_FREQ / 64) / baudRate) - 1" con el valor que se pasa de parámetro en este ejemplo sera de 9600.

En el datasheet vemos el siguiente ejemplo (tal cual lo estamos usando), en conde se ve el calculo de SPBRG el BaudRate y el Error:


Si quisieras configurar un valor mas grande en el BaudRate por ejemplo 115200 se tendría que usar un Baud Rate Generador de 16-bits, pero eso sera tema de otro post.

Código:
Con respecto al codigo, se ha creado el archivo "uart1.c" y "uart1.h" en donde están las funciones necesarias para realizar una comunicación.
  • void UART1_Initialize(long baudRate); Función para inicializar la UART, inicializar pines.
  • void UART1_Write(char data); Función para escribir un dato por el puerto.
  • char UART1_Read(void); Función para esperar a recibir un dato (recordar, cuando se use esta funcion el codigo se quedara detenido esperando a recibir un dato, en un futuro post veremos la forma de esperar un dato si necesidad de bloquear la rutina).
  • void UART1_PutStr(const char* dataStr); Función para escribir una string.
Para este demo vamos a enviar un string después de inicializar la UART y esperar un dato, después de recibir se devuelve y  dependiendo del dato se cambia el estatus de los LEDs. El codigo es el siguiente:

Resultado:
Aca una captura del X-CTU mostrando la comunicación con el PIC18F25K22, el texto en rojo es lo que ha mandado el MCU, el texto en azul es el tipeado desde el monitor (como se ve en el codigo físicamente cambian los estados de los LEDs dependiendo de la letra enviada).


Descargas:
Aquí el enlace directo para DESCARGAR los archivos disponibles, también puedes revisar o descargar la información desde mi repositorio en GitHub, si no sabes como descargarlo puedes checar aquí, bueno por el momento es todo si tienes dudas, comentarios, sugerencias, inquietudes, traumas, etc. dejarlas y tratare de responder lo mas pronto posible.



Donaciones:
Si te gusta el contenido o si los recursos te son de utilidad, comparte el enlace en tus redes sociales o sitios donde creas que puede ser de interés y la otra puedes ayudarme con una donación para seguir realizando publicaciones y mejorar el contenido del sitio. También puedes hacer donaciones en especie, ya sea con componentes, tarjetas de desarrollo o herramientas. Ponte en contacto para platicar, o puedes volverte uno de nuestros sponsors.


Pido una retroalimentación avisando cada que un enlace no sirva o tenga errores al momento de abrirlo, así también si una imagen no se ve o no carga, para corregirlo en el menor tiempo posible.

Links:

Publicar un comentario

0 Comentarios