Convertidor USB a Serial FT232RL, Pic C Compiler

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();
   }

Scroll al inicio