INSTITUTO TECNOLÓGICO DE CELAYA
DEPARTAMENTO DE INGENIERÍA ELECTRÓNICA
“Transmisión y Recepción de datos usando
MATLAB y FPGA”
Reporte
PRESENTA
GAONA CÁRDENAS LUIS FERNANDO
PROFESOR
DR. ALEJANDRO ESPINOSA CALDERÓN
Introducción
RS-232 (Recommended Standard 232, en español: "Estándar Recomendado 232"), también conocido
como EIA/TIA RS-232C, es una interfaz que designa una norma para el intercambio
de datos binarios serie entre un DTE (Data Terminal Equipment, "Equipo Terminal de Datos"), como
por ejemplo una computadora, y un DCE (Data Communication Equipment, "Equipo de
Comunicación de Datos"), por ejemplo un módem. Existen otros casos en los que también se utiliza
la interfaz RS-232. Una definición equivalente publicada por la UIT se denomina V.24.
En particular, existen ocasiones en que interesa conectar otro tipo de equipamientos, como pueden
ser computadoras. Evidentemente, en el caso de interconexión entre los mismos, se requerirá la
conexión de un DTE con otro DTE. Para ello se utiliza una conexión entre los dos DTE sin usar
módem, por ello se llama módem nulo (null modem).
El RS-232 consiste en un conector tipo DB-25 (de 25 pines), aunque es normal encontrar la versión
de 9 pines (DE-9, o popularmente mal denominados DB-9), más barato e incluso más extendido
para cierto tipo de periféricos (como el ratón serie de la PC).
Antecedentes
La primera especificación de esta interfaz se publicó en 1962 y desde entonces se ha hido revisado
frecuentemente. Una de las revisiones más extendidas fue la EIA-232-C. El primer nombre que recibió
esta interfaz fue RS-232, nombre que aún hoy se utiliza ampliamente, a pesar de que dicho estándar
lo adoptaría la organización de estadarización norteamericana EIA (Electronic Industries Alliance, o
hasta 1997 Electronic Industries Association) cambiando su nombre al actual EIA-232.
Posteriormente la ITU-T desarrolló las correspondientes recomendaciones basadas en la interfaz EIA-
232. La recomendación V.24 especifica los aspectos funcionales y operacionales, es decir, se define
que circuitos o señales tienen que implementarse en la interfaz y la función de cada uno de ellos. Los
aspectos eléctricos de la interfaz están definidos en la recomendación V.28.
Construcción física
La interfaz RS-232 está diseñada para imprimir documentos para distancias cortas, de hasta 15 metros
según la norma, y para velocidades de comunicación bajas, de no más de 20 kbps. A pesar de esto,
muchas veces se utiliza a mayores velocidades con un resultado aceptable. La interfaz puede trabajar
en comunicación asíncrona o síncrona y tipos de canal simplex, half duplex o full duplex. En un
canal simplex los datos siempre viajarán en una dirección, por ejemplo desde DCE a DTE. En un
canal half dúplex, los datos pueden viajar en una u otra dirección, pero sólo durante un determinado
periodo de tiempo; luego la línea debe ser conmutada antes que los datos puedan viajar en la otra
dirección. En un canal full duplex, los datos pueden viajar en ambos sentidos simultáneamente. Las
líneas de handshaking de la RS-232 se usan para resolver los problemas asociados con este modo de
operación, tal como en qué dirección los datos deben viajar en un instante determinado.
Si un dispositivo de los que están conectados a una interfaz RS-232 procesa los datos a una velocidad
menor de la que los recibe deben de conectarse las líneas handshaking que permiten realizar un control
de flujo tal que al dispositivo más lento le dé tiempo de procesar la información. Las líneas de hand
shaking que permiten hacer este control de flujo son las líneas RTS y CTS. Los diseñadores del
estándar no concibieron estas líneas para que funcionen de este modo, pero dada su utilidad en cada
interfaz posterior se incluye este modo de uso.
Las UART o U(S)ART (Transmisor y Receptor Asíncrono Universal) se diseñaron para convertir las
señales que maneja la CPU y transmitirlas al exterior. Las UART deben resolver problemas tales
como la conversión de tensiones internas del DCE con respecto al DTE, gobernar las señales de
control, y realizar la transformación desde el bus de datos de señales en paralelo a serie y viceversa.
Debe ser robusta y deberá tolerar circuitos abiertos, cortocircuitos y escritura simultánea sobre un
mismo pin, entre otras consideraciones. Es en la UART en donde se implementa la interfaz.
Generalmente, cuando se requiere conectar un micro controlador (con señales típicamente entre 3,3
y 5 V) con un puerto RS-232 estándar, se utiliza un driver de línea, típicamente un MAX232 o
compatible, el cual mediante dobladores de tensión positivos y negativos, permite obtener la señal
bipolar (típicamente alrededor de +/- 6V) requerida por el estándar.
Para los propósitos de la RS-232 estándar, una conexión es definida por un cable desde un dispositivo
al otro. Hay 25 conexiones en la especificación completa, pero es muy probable que se encuentren
menos de la mitad de éstas en una interfaz determinada. La causa es simple, una interfaz full
duplex puede obtenerse con solamente 3 cables.
Figura 1: Orden de pins RS232 de una PC.
Conector RS232D (Conector DB9 de 9 pines)
La siguiente tabla muestra el conector de 9 pines serie que se encuentra en la mayoría de las PC de
hoy en día.
Figura 2: Señales de RS232.
Señales de la RS-232.
Request To Send (RTS) Esta señal se envía de la computadora (DTE) al módem (DCE) para
indicar que se quieren transmitir datos. Si el módem decide que esta OK, asiente por la línea
CTS. Una vez la computadora prende la señal RTS, esperará que el módem asiente la línea
CTS. Cuando la señal CTS es afirmado por el módem, la computadora empezará a transmitir
datos.
Clear To Send (CTS) Afirmado por el módem después de recibir la señal de RTS indica
que la computadora puede transmitir.
Data Terminal Ready (DTR) Esta línea de señal es afirmada por la computadora, e informa
al módem que la computadora está lista para recibir datos.
Data Set Ready (DSR) Esta línea de señal es afirmada por el módem en respuesta a una
señal de DTR de la computadora. La computadora supervisa el estado de esta línea después
de afirmar DTR para descubrir si el módem esta encendido.
Receive Signal Line Detect (RSLD) Esta línea de control es afirmada por el módem e
informa a la computadora que se ha establecido una conexión física con otro módem. A veces
se conoce como detector de portadora (CD). sería un error que una computadora transmita
información a un módem si esta línea no está prendida, es decir si la conexión física no
funciona.
Transmit Data (TD) es la línea por donde el dato se transmite de un bit a la vez
Receive Data (RD) es la línea por donde el dato se recibe de un bit a la vez.
Metodología
Revisando los recursos que tenemos que tenemos a nuestra disposición en la tarjeta FPGA spartan 3,
podemos observar que solo contamos con solo 4 switces para introducir los datos dentro del programa,
pero ya que el objetivo de este programa es imprimir la suma de dos valores de 8 bits en la LCD de
la tarjeta, se procedió a realizar otro programa para realizar esta función, en la figura 3 se muestra el
programa propuesta para realizar este objetivo.
Figura 3: Estructura para pasar de 4 bits a 8 bits.
En la figura 3 se puede observar una imagen de cómo se pasó de un dato de 4 bits a uno de 8 bits
utilizando registros y una máquina de estados, ya que solamente se trata de un dato de 8 bits solamente
se utilizan 3 registros para pasar de los 4 switches a un dato de 8 bits.
Máquina de estados
La máquina de estados es la que controla la activación de los enable para todos los registros del
programa, por ejemplo al activar el enable de la máquina de estados está activa solamente el registro
A1 mientras que los demás registros permanecen apagados, al dar enable nuevamente a la máquina
de estados ahora se activa el registro A2 mientras todos los demás se apagan y así sucesivamente
hasta introducir todos los datos de los valores A y B de 8 bits, también se usaron leds de apoyo para
la visualización del usuario, ya que los push botón de la tarjeta FPGA no funcionan bien y no se puede
saber si se activaron correctamente los botones.
Registros
Para pasar de los switches a un dato de 8 bits se utilizan 3 registros, los registros A1 y A2 guardan la
parte baja y alta de un dato de 8 bits, al tener las dos partes del número se utiliza un tercer registro
para concatenar ambas partes y así pasar ese número a la parte de la transmisión.
Transmisión de datos
Figura 4: Transmisión de datos RS232.
Para la transmisión de datos se utilizan 3 bloques como se pueden ver en la imagen de arriba, un
divisor de frecuencia, una máquina de estados y un multiplexor de salida.
La transmisión de datos funciona básicamente enviando un dato a la vez ya que la transmisión es en
serie, como se puede observar en la figura 4, la máquina de estados envía el enable al mux de salida
mientras este recibe el dato que le estamos mandando, la entrada del mux es de 8 bits (longitud del
dato) y la salida del mux es solamente de un bit de salida, pero cabe destacar que este proceso se
realiza muy rápido, el dato se transmite por completo de una manera muy rápida.
Recepción de datos
Figura 5: Diagrama RTL de la recepción de datos.
En la figura 5 se muestra el diagrama para la trasmisión, se puede observar que el diagrama es casi
idéntico al de la transmisión, con la diferencia que en vez del mux ahora se utiliza un registro, ya que
la transmisión nuevamente es en serie el FPGA solamente recibe un dato a la vez, con la diferencia
que ahora al recibir todos los datos estos se almacenan en el registro y se muestran en los LEDS de
la tarjeta FPGA.
Resultados
Para verificar el correcto funcionamiento de la transmisión y la recepción de los datos en la tarjeta
FPGA se hiso uso del software matlab y un cable RS232 a USB, las instrucciones utilizadas para
verificar el funcionamiento se muestran a continuación.
Figura 6: Instrucciones utilizadas en MATLAB.
Con la primera instrucción le decimos al programa que puerto debe de abrir y a qué velocidad lo tiene
que abrir, ya que si la velocidad “BaudRate” del programa matlab es diferente al de la tarjeta FPGA
los datos que se muestran en el programa no se muestran correctamente, al definir la velocidad de
trabajo, ahora se procede a abrir el puerto con fopen (p), p es la variable, al abrirlo ahora podemos
comunicarnos de manera correcta con la tarjeta.
Figura 7: Instrucciones para escribir dato en la FPGA.
En la figura 7 se puede observar como escribimos el dato decimal 65 en Matlab para visualizarlo en
la tarjeta FPGA, en la figura 8 se puede observar como el dato mostrado por la FPGA es el número
65 en binario, por lo tanto el algoritmo para la recepción es correcto.
Figura 8: Tarjeta FPGA mostrando el valor que se le envió
Recepción
En la figura 9 se observa que ahora se procede a leer el dato que se escribe en la FPGA, para esto se
utiliza la instrucción fread para leer un valor en decimal.
.
Figura 9: Instrucciones para leer un valor de la FPGA.
En la figura 10 se observa que el dato leído es 170 que es correcto ya que se mandó un dato binario
“10101010”, pero el valor se lee como decimal, asi que tenemos que cambiarlo a hexadecimal, para
eso procedemos a utilizar la instrucción dec2hex para convertir un dato binario a hexadecimal y asi
podemos observar que el dato es “AA”.
Problemática principal
La problemática principal con el algoritmo implementado solamente fue que la velocidad o el baud
rate utilizado en la tarjeta eran diferente al del programa, ya que la velocidad de transmisión en el
programa utilizado era para una tarjeta Basys 2 la cual funciona a una velocidad de 25 MHz, y como
nosotros estamos trabajando con una tarjeta Spartan 3A se tuvo que cambiar la frecuencia de
operación dentro del programa.
Conclusiones
La transmisión y recepción de datos dentro de un sistema digital es muy importante ya que utilizando
este tipo de algoritmos se pueden implementar varios sistemas para la automatización por medio de
FPGA’s , se pudo observar cual es la diferencia de la transmisión entre un sistema en serie y uno en
paralelo, para ver cuál de los dos es más conveniente, aunque la transmisión en paralelo proceso todos
los datos de manera conjunta a la hora de procesar todo el sistema se vuelve más lento, mientras que
el sistema en serie es más rápido, es por eso que se optó por usar la transmisión en serie, cabe destacar
que para realizar una transmisión en cualquier sistema digital se tienen que tomar en cuenta varias
consideraciones como por ejemplo la velocidad a la que funcionan ya que no todos los sistemas
funcionan a la misma velocidad y esto puede ocasionar muchos problemas como ya se explicó en este
reporte.
Referencias
[1] Xilinx, «Spartan-3A/3AN FPGA Starter Kit Board User Guide,» Xilinx, Inc., 2008.
[2] R. d. J. R. Troncoso, Electrónica digital y lógica programable, Guanajuato: Universidad de
Guanajuato (UGto), 2016.