Laboratorio de Transmisión Serie
Sitio: | Facultad de Ingeniería U.Na.M. |
Curso: | Comunicaciones 2 ET544 |
Libro: | Laboratorio de Transmisión Serie |
Imprimido por: | Invitado |
Día: | miércoles, 4 de diciembre de 2024, 23:37 |
Descripción
Laboratorio de Transmisión Serie entre dispositivos Arduino
1. Introducción y Objetivos
Introducción
En este laboratorio, se experimentará con la transmisión de datos entre dos placas Arduino utilizando comunicación serie, tanto de forma sincrónica como asincrónica.
En la primera parte, se implementará una comunicación serie básica sin sincronización de reloj, donde se analizarán las características de la señal de datos transmitida. En la segunda parte, se introducirá una señal de reloj para sincronizar los Arduinos, para evaluar si se produce una mejoría en la precisión en la recepción de datos. Esto permitirá comparar ambos métodos de comunicación y entender la importancia de la sincronización en sistemas de transmisión de datos.
Objetivos
- Comprender la diferencia entre comunicación serie sincrónica y asincrónica.
- Analizar la codificación utilizada para la transmisión de datos y evaluar su efectividad en un entorno de comunicación serie.
- Evaluar el impacto de la señal de reloj en la precisión de la recepción de datos y comparar su desempeño con la comunicación asincrónica.
2. Requisitos
INSTRUMENTO/DISPOSITIVO | CANTIDAD |
Arduino MEGA 25601 | 2 |
Display LCD 16x2 | 2 |
Osciloscopio RIGOL DS1102E/OWON DS 5023E2 | 1 |
Potenciometro 10kΩ | 2 |
Resistor 330Ω | 2 |
Protoboard | 2 |
Cables para conexionado | varios |
Arduino IDE3 | - |
1Se puede reemplazar por otro modelo, teniendo en cuenta que la distribución de pines puede ser diferente.
2Puede ser reemplazado por otro similar que se encuentre disponible.
3. Primera Parte
PROCEDIMIENTO
-
Observe el script para el transmisor1 (provisto por la cátedra) e interprete su funcionamiento.
-
¿Qué realiza la línea "char tx_byte = mensaje[byte_ind];"?
-
¿Qué realiza la línea “bool tx_bit = tx_byte & (0x80 >> bit_ind);”?
-
¿Qué realiza este comando: tx_bit ? "1" : "0"?
-
¿Por qué se colocó un retardo (delay(1000 / TX_RATE);)?
-
¿Qué se espera observar en el PIN TX_DATA (PIN 31)?
-
-
A continuación realice el conexionado que se muestra en la Figura 1 o Figura 2, según se disponga de un display con controlador para bus I2C o no. Conecte el arduino MEGA 2560 a la PC mediante el cable USB y cargue el código correspondiente al mismo.
-
Conectar el PIN de transmisión (PIN 31) al osciloscopio. Analice la señal y verifique que la misma corresponde al mensaje enviado, decodificando los primeros caracteres.
-
¿Qué tipo de codificación se utilizó para convertir los caracteres en bits?
-
¿Cuántos bits componen cada carácter?
-
¿Qué tipo de codificación se esta empleando para la transmisión del mensaje?
-
-
Observe el script del receptor2 (provisto por la cátedra) e interprete su funcionamiento.
-
¿Qué realiza el código?
-
¿Qué realiza la línea “bool rx_bit = digitalRead(RX_DATA);”?
-
¿Qué realiza la línea “rx_byte |= (0x80 >> bit_pos);”?
-
¿Qué realiza este comando: rx_byte & (0x80 >> i) ? "1" : "0"?
-
¿Cuál es la función del comando delay(200)?, y ¿por qué se colocó el valor 200 como argumento?
-
-
Realice el conexionado que se muestra en la Figura 1 o Figura 2, según se disponga de un display con controlador para bus I2C. Conecte el Arduino MEGA 2560 a la PC medainte el cable USB y cargue el código al mismo.
-
Conecte el PIN 31 (transmisión de datos) del transmisor al PIN 31 del receptor y unifique las masas de los Arduinos como se muestra en la Figura 3.
-
Presione interruptor de reset de ambos Arduinos de forma sincronizada y verifique si el mensaje recibido en el receptor corresponde a lo enviado por el transmisor.
-
¿Por qué se debe resetear al mismo tiempo ambos Arduino?
-
¿El receptor recibió el mensaje de forma correcta?, en caso de no haberlo hecho ¿cuál cree que es la causa de esto?
-
-
Modifique el delay del receptor (dependiendo del analisis del punto 7.2 deberá incrementar o disminuir el mismo) y observe si mejora la recepción de los datos.
-
¿Es una solución viable modificar el delay del receptor?
-
¿Si en lugar de utilizar delay tanto para el transmisor como para el receptor se utiliza el timer del Arduino se solucionaría el problema?
-
¿Las frecuencia de los cristales son iguales?
-
¿Cree que la recomendación del punto 8.2 funcionará?
- ¿Qué solución se le ocurre?
-
Figura 1 - Conexionado de display con controlador I2C al Arduino MEGA 2560.
Figura 2 - Conexionado del display sin controlador I2C al Arduino MEGA 2560.
Figura 3 - Conexión entre Arduinos MEGA 2560.
1Código provisto por la cátedra: transmisor_v1.ino o transmisor_v1_i2c.ino
2Código provisto por la cátedra: receptor_v1.ino o receptor_v1_i2c.ino
3En caso de utilizar display con controlador I2C utilizar la librería NewLiquidCrystal
4. Segunda Parte
PROCEDIMIENTO
-
Observe el script para el transmisor1 (provisto por la cátedra) e interprete su funcionamiento.
-
¿Por qué cree que en este caso hay dos delay con una duración igual a la mitad que la utilizada en la primera parte?
-
Según el código, ¿cómo deberían ser las señales?. Dibújelas
-
-
Cargue el nuevo código al Arduino MEGA 2560 (utilice la versión correspondiente según el display seleccionado).
-
Conectar el PIN de transmisión (PIN 31) y el PIN de CLOCK (PIN 2) al osciloscopio y analice las señales.
-
¿La señal obtenida con el osciloscopio condice con la que dedujo al analizar el código en el punto 1.2?
-
Observe la señal de clock, ¿su duración se mantiene constante?, si no lo hace ¿cree que esto afectará la transmisión produciendo una pérdida de información?
-
-
Observe el script del receptor2 (provisto por la cátedra) e interprete su funcionamiento.
-
¿Qué hace la línea “attachInterrupt(digitalPinToInterrupt(RX_CLOCK) , PulsoClock , RISING);”?
-
¿Qué hace la variable “lcd_actualiza”?
-
-
Cargue el nuevo código al Arduino Mega 2560.
-
Conecta el PIN 31 (transmisión de datos) del transmisor al PIN 31 del receptor, y el PIN 2 (CLOCK) al PIN 2 del receptor y unifique la tierra de los Arduino como se muestra en la Figura 4.
-
Presione el botón de reset del transmisor.
-
¿Por qué no se muestra nada en el display?
-
-
Presione el botón de reset del recpetor.
-
¿La transmisión se realizó de forma correcta?
-
-
Incremente la velocidad de transmisión en el transmisor.
-
¿La transmisión sigue realizándose de forma correcta?
-
Si para codificar los caracteres utilizando ASCII solo son necesarios 7 bits, ¿para que se podría utilizar el bit sobrante?
-
Figura 4 - Conexión entre Arduinos MEGA 2560 con señal de clock.
1Código provisto por la cátedra: transmisor_v2.ino o transmisor_v2_i2c.ino
2Código provisto por la cátedra: receptor_v2.ino o receptor_v2_i2c.ino
5. ¿Por que Arduino?
La comunicación serial RS232 utilizado industrialmente por diversos dispositivos y equipos.
La norma RS232 establece niveles de señal de
- +3V a +15V ( como cero lógico)
- -3V a -15V ( como uno lógico)
para la transmisión de datos. (Señal de dos polaridades + y -), y por otro lado tenemos los conectores...
Bueno, en la mayoría de los equipos NO DISPONEMOS de las tensiones ni de los conectores de la Norma, pero SI DISPONEMOS de muchos puertos USB y niveles de tensiones de TTL.
Se usa el Arduino para realizar estas pruebas ya que el mismo puede utilizarse como "conversor" para adaptar niveles de tensión y conectores al protocolo RS232 e implementar en los equipos mas nuevos.
Razones por la que usamos Arduino:
- Facilidad de Uso: Arduino tiene bibliotecas integradas, como Serial, que simplifican el manejo de la comunicación serial. Estas bibliotecas permiten enviar y recibir datos a través de los pines de comunicación serial sin necesidad de configurar registros o lidiar con la complejidad del hardware a bajo nivel.
- Accesibilidad y Costo: Los microcontroladores Arduino son económicos y fácilmente disponibles, lo que los convierte en una opción popular para proyectos de comunicación serial.
- Versatilidad: Con Arduino, puedes configurar múltiples pines para actuar como puertos seriales usando bibliotecas como SoftwareSerial, lo que permite la comunicación con múltiples dispositivos RS232 si es necesario.
- Interfaz entre Diferentes Niveles de Voltaje: El protocolo RS232 utiliza niveles de voltaje diferentes a los niveles lógicos de los microcontroladores Arduino (RS232 suele operar a ±12V, mientras que Arduino opera a 5V o 3.3V). Arduino, combinado con un convertidor de niveles como el MAX232, puede traducir estos niveles de voltaje, facilitando la comunicación entre dispositivos que usan RS232 y otros sistemas de baja potencia.
- Programabilidad: Arduino se puede programar fácilmente para manejar la lógica y los datos de la comunicación RS232, lo que permite no solo transmitir y recibir datos, sino también procesarlos, almacenarlos o interactuar con otros sistemas según sea necesario.
- Prototipado Rápido: Gracias a su entorno de desarrollo simple y su capacidad de prototipado rápido, Arduino es ideal para desarrollar y probar sistemas de comunicación RS232 de manera rápida y eficiente.
Otra Opción.
También se pueden conseguir en el comercio, Módulos que usan un CI MAX232 Conversor RS232 a Serial TTL permite comunicar un microcontrolador con una computadora por el puerto Serial RS232. El módulo soluciona el problema de la diferencia de voltajes entre el puerto serial RS232 (+-12V) y el microcontrolador TTL (3.3V/5V), encargándose de convertir los niveles de voltaje bidireccionalmente y de forma "transparente" para el programador.
6. Preguntas
-
¿Qué tipo de comunicación se estuvo realizando durante las dos partes del laboratorio, Sincrona o Asincrona?.
-
¿Qué tipo de codificación se utilizó en el laboratorio?
- ¿Qué codificación recomendaría utilizar si se quisiera utilizar unicamente un cable para la transmisión de datos?