En esta sección aprenderás a utilizar un convertidor de USB a Serial, el objetivo es establecer comunicación entre una computadora y un microcontrolador PIC para enviar y recibir datos mediante la comunicación serial.
Convertidor FT232RL
El FT232RL es un chip de interfaz USB a UART desarrollado por la compañía FTDI (Future Technology Devices International). Este chip es comúnmente utilizado en dispositivos electrónicos para proporcionar una conexión USB a una interfaz UART.
El convertidor FT232RL puede ser utilizado para varios propósitos, incluyendo la programación de microcontroladores, la comunicación con dispositivos electrónicos que utilizan una interfaz UART, y la depuración de sistemas electrónicos.

Características:
- Voltaje de Operación: 5 volts.
- Puede obtener acceso a señales GND, CTS, VCC, TX, RX y DTR.
- La interfaz UART soporta 7 u 8 bits de datos, 1 ó 2 bits de parada, y paridad par/impar/marca/espacio/sin paridad
- Operación a 3.3 V o 5 V configurable mediante jumper
- USB 2.0 Full speed
- Buffer de recepción de 128 Bytes y de transmisión de 256 bytes
- LED indicador de señal de transmisión y recepción
Monitor serial
Para realizar la comunicación entre el microcontrolador y la computadora, se utiliza un monitor serial para enviar, recibir, graficar los datos.
Circuito de conexión simplex

Programación simplex
Se establecen los parámetros para la comunicación serial RS232.
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
Se habilita la conversión analógico digital y se habilita el canal ANO para hacer la lectura del potenciometro.
setup_adc(ADC_CLOCK_INTERNAL);
set_adc_channel (0);//Habilita lectura en PIN AN0
delay_us(10);
pot = read_adc();// lectura del potenciometro
Se envía la lectura del pin AN0 (pot) por el puerto serial RS232.
printf("%lu\r\n",pot);
Código completo simplex
#FUSES NOMCLR
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
void main()
{
setup_adc(ADC_CLOCK_INTERNAL);
int16 pot;
while(TRUE)
{
set_adc_channel (0);//Habilita lectura en PIN AN0
delay_us(10);
pot = read_adc();// lectura del potenciometro
printf("%lu\r\n",pot);
delay_ms(10);
}
}
Circuito de conexión half duplex

Programación half duplex
Se establecen los parámetros para la comunicación serial RS232.
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
Se envía un texto por el puerto Rs232 para mostrarlo en el monitor serie.
printf("ESCRIBIR TEXTO:\r\n");
Se reciben los datos enviados por el monitor serial y se guardan en la variable de caracteres «recibido», la variable debe tener el tamaño de registros suficientes para recibir los datos enviados del monitor serial.
char recibido[200];
void recive()
{
memset(recibido, 0, sizeof(recibido)); //limpia los registros de la varible
while(true)
{
if (kbhit())//espera el primer caracter
{
int8 i=0;
while(true)
{
recibido[i]=getc();//RECIBE EL CARACTER
if(recibido[i]=='\n')//busca el salto de linea \n
{
return;
}
i++;
}
}
}
}
Se muestran la cadena de caracteres recibidos y guardados en la variable «recibido».
OLED_ClearDisplay();
OLED_DrawText(1,1,recibido,1);
OLED_Display();//Muestra la información en pantalla;
Código completo half duplex
#FUSES NOMCLR
#use i2c(Master,Fast, sda=PIN_B0, scl=PIN_B1, force_sw, stream=OLED_stream)//parametros I2C
#use rs232(baud=9600, parity=N, xmit=PIN_C6, rcv=PIN_C7, bits=8)
#define SH1106_128_64 //DEFINE EL MODELO DE LA PANTALLA OLED
//#define SSD1306_128_64
#include "OLED_I2C.c" //libreria oled I2C
char recibido[200];
void recive()
{
memset(recibido, 0, sizeof(recibido)); //limpia los registros de la varible
while(true)
{
if (kbhit())//espera el primer caracter
{
int8 i=0;
while(true)
{
recibido[i]=getc();//RECIBE EL CARACTER
if(recibido[i]=='\n')//busca el salto de linea \r
{
return;
}
i++;
}
}
}
}
void mostrar()
{
OLED_ClearDisplay();
OLED_DrawText(1,1,recibido,1);
OLED_Display();//Muestra la información en pantalla;
}
void main()
{
OLED_Begin();
OLED_ClearDisplay();
while(TRUE)
{
printf("ESCRIBIR TEXTO:\r\n");
recive();
mostrar();
}
