En esta entrada se va a trabajar la
recepción de datos por medio del protocolo UART con un microcontrolador PSoC,
por lo tanto es recomendable primero revisar y leer una publicación anterior en
la cual se hizo la introducción y un primer trabajo de envío de datos por medio
de este protocolo con el modulo de usuario UART con el que cuenta PSoC Designer,
la entrada en mención es la siguiente: COMUNICACIÓN UART CON PSoC.
En la práctica que se va a mostrar en
esta entrada se trata de enviar un dato por medio de protocolo UART desde el
computador, recibir este dato en el microcontrolador PSoC para luego mostrarlo
en un display LCD de 16 caracteres por 2 columnas. Antes de comenzar con la
muestra del desarrollo de la práctica es necesario mostrar algunos métodos que
tiene el módulo UART de PSoC para la recepción de caracteres como son los
siguientes:
UART_IntCntl: Esta función
habilita o deshabilita las interrupciones de recepción y transmisión de manera
independiente, la sintaxis es:
- UART_IntCntl(); dentro del paréntesis se debe colocar el tipo de interrupción que se desee habilitar o deshabilitar teniendo las siguientes opciones:
·
UART_ENABLE_RX_INT: Habilita la recepción
·
UART_ENABLE_TX_INT: Habilita la transmisión
·
UART_DISABLE_RX_INT: Deshabilita la recepción
·
UART_DISABLE_TX_INT: Deshabilita la transmisión
Por ejemplo para habilitar la recepción,
la línea de código quedaría escrita de la siguiente manera:
· UART_IntCntl(UART_ENABLE_RX_INT);
UART_CmdReset: Resetea el buffer del modulo UART, dejándolo preparado para recibir las siguientes instrucciones. La sintaxis de esta función es:
UART_CmdReset: Resetea el buffer del modulo UART, dejándolo preparado para recibir las siguientes instrucciones. La sintaxis de esta función es:
· UART_CmdReset();
UART_szGetParam: Toma el dato guardado en el buffer de recepción del modulo UART, luego de tomar este dato lo guarda en un puntero. La sintaxis de a función es la siguiente:
UART_szGetParam: Toma el dato guardado en el buffer de recepción del modulo UART, luego de tomar este dato lo guarda en un puntero. La sintaxis de a función es la siguiente:
· Char * UART_szGetParam();
Para que esta función pueda guardar el
dato dentro de un puntero, se coloca la función dentro de una condición if, por ejemplo:
· If(dato = UART_szGetParam()){}
Donde dato es el puntero en el cual se
va a guardar el dato que ha recibido el buffer del módulo UART del PSoC.
DESARROLLO DE LA PRÁCTICA:
Como ya se había mencionado en esta
práctica se va a enviar un dato por medio del computador para que
posteriormente sea recibido por el modulo UART del microcontrolador PSoC y sea
mostrado en un display LCD 16*2.
En la práctica con módulo UART
realizada anteriormente, para establecer la comunicación entre el computador y
el microcontrolador se utilizo una tarjeta construida con un circuito integrado
FT232 con el cual se lograba hacer la conversión de protocolo USB a UART
mediante la emulación de un puerto COM, en esta ocasión no se va a utilizar la
misma tarjeta sino que para mostrar una nueva posibilidad para establecer dicha
conexión se utilizo un programador de microcontroladores PIC como interfaz y
como software para enviar los datos se utilizo la herramienta UART (UART Tool)
del programa PICkit 2 de Microchip.
Luego de haber enviado el dato, el encargado de
recibir dicha información es el PSoC, para tal fin se utilizo un modulo UART y
se configuraron los parámetros del reloj y de recepción del mismo tal como se
muestra en la imagen a continuación.
(Figura 1.
Parámetros globales del microcontrolador)
|
Luego de guardar el dato para hacer la
visualización del mismo se utilizo un display LCD 16*2, para utilizar este dispositivo
se uso el módulo LCD que incluye PSoC Designer.
El código utilizado para esta práctica
con sus respectivos comentarios se puede ver a continuación:
//----------------------------------------------------------------------------
// C main line
//----------------------------------------------------------------------------
#include <m8c.h>
#include "PSoCAPI.h"
void main(void)
{
char *dato; // Puntero donde
se guardan los datos recibidos
UART_CmdReset(); //Resetea el
buffer del modulo UART
UART_IntCntl(UART_ENABLE_RX_INT); //Habilita las
interrupciones de RX
UART_Start(0); // Inicializa módulo UART
LCD_Start(); // Inicializa módulo LCD
M8C_EnableGInt;
while(1)
{
if(dato =
UART_szGetParam()) //Comprueba si el buffer del UART ha recibido un Parametro y lo
guarda en el puntero
{
LCD_Position(0,3); // Ubica la
primera columna y el tercer caracter del display LCD
LCD_PrCString("PSoC RX
UART"); // Escribe el texto en la posición anterior
LCD_Position(1,0); // Ubica la
segunda Columna y el tercer caracter del display LCD
LCD_PrString(dato);
//
Escribe el valor del puntero en la posición anterior
UART_CmdReset();//Resetea el
buffer del modulo UART
}
}
}
Por último los resultados obtenidos de
la práctica se pueden observar en las siguientes imágenes:
(Figura 3. Envió
de la palabra PSoC)
|
(Figura 5. Envió
de la palabra Hola)
|
(Figura 6. Recepción y muestra de la palabra Hola)
|
(Figura 7. Envió
de la palabra Prueba)
|
(Figura 8.
Recepción y muestra de la palabra Prueba)
|
(Figura 9. Envió
de símbolos :) )
|
(Figura 10.
Recepción y muestra de símbolos :) )
|