Comunicación en Sistemas Empotrados: Guía Completa

Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones

Escrito el en español con un tamaño de 13,26 KB

C1. Comunicación Síncrona vs. Asíncrona

Diferencias

Comunicación Asíncrona:

  • Se insertan marcas (bits de inicio y parada) para señalizar el comienzo y fin de cada byte.
  • No se requiere una señal de reloj externa.
  • Más simple de implementar pero menos eficiente en términos de velocidad y ancho de banda.

Comunicación Síncrona:

  • La señal de temporización (reloj) se envía aparte, ya sea a través de una línea dedicada o codificada en la señal de datos.
  • Permite velocidades de transmisión más altas y una mayor eficiencia.
  • Más compleja de implementar.

Uso en Sistemas Empotrados

En sistemas empotrados, la comunicación asíncrona es más utilizada debido a su simplicidad y menor coste de implementación. Muchos periféricos de sistemas empotrados, como sensores y actuadores, no requieren altas velocidades de transmisión, por lo que la asincronía es suficiente. Además, la comunicación asíncrona simplifica el diseño del hardware al no necesitar una línea de reloj dedicada.

C2. Bits en un Sistema Asíncrono RS-232

En un sistema asíncrono RS-232, se transmiten los siguientes bits:

  • Bit de inicio (Start bit): Un bit lógico '0' que indica el comienzo de la transmisión de un byte.
  • Bits de datos: Generalmente 8 bits que representan la información a transmitir. Se envían desde el bit menos significativo al más significativo.
  • Bit(s) de parada (Stop bit(s)): Uno o dos bits lógicos '1' que indican el final de la transmisión del byte. Permiten al receptor sincronizarse y prepararse para el siguiente byte.

C3. Generador de Baudios y Velocidades de Transmisión en RS-232

El generador de baudios es un circuito que genera una señal de reloj utilizada para controlar la velocidad de transmisión en una interfaz serie como RS-232. La velocidad de transmisión se mide en baudios, que representan la cantidad de cambios de estado de la señal por segundo.

En la interfaz RS-232, la velocidad de transmisión se configura programando el generador de baudios. En microcontroladores como el AVR, esto se realiza configurando registros específicos como el SPBRG (USART Baud Rate Register) y el BRGH (USART Baud Rate High Speed Bit). Estos registros controlan la frecuencia del reloj del generador de baudios y, por lo tanto, la velocidad de transmisión.

C4. Transmisión de Texto por el Puerto Serie en AVR (C)

Para transmitir un texto por el puerto serie utilizando la UART del AVR en lenguaje C, se deben seguir los siguientes pasos:

  1. Inicializar la UART: Configurar la velocidad de transmisión, el número de bits de datos, la paridad y los bits de parada.
  2. Habilitar la interrupción de transmisión vacía (UDRE): Esta interrupción se activa cuando el registro de transmisión de datos está vacío y listo para recibir un nuevo byte.
  3. Implementar la rutina de servicio de interrupción (ISR) para UDRE:
    • Comprobar si hay datos disponibles en el búfer de transmisión.
    • Si hay datos, enviar el siguiente byte del búfer al registro de transmisión de datos de la UART.
    • Si el búfer de transmisión está vacío, deshabilitar la interrupción UDRE.
  4. Enviar datos al búfer de transmisión: Cuando se desee enviar un texto, se deben colocar los bytes del texto en el búfer de transmisión. La ISR se encargará de enviar los bytes uno por uno a la UART.

C5. Gestión del Puerto Serie por Interrupciones en AVR

La gestión del puerto serie por interrupciones permite al microcontrolador realizar otras tareas mientras se envían o reciben datos por la UART. Cuando llega un carácter a la USART del AVR, se produce la siguiente secuencia de eventos:

  1. Se activa la interrupción de recepción de datos (RXC): Esta interrupción indica que se ha recibido un nuevo byte y está disponible en el registro de recepción de datos de la UART.
  2. Se ejecuta la rutina de servicio de interrupción (ISR) para RXC:
    • Se lee el byte recibido del registro de recepción de datos.
    • Se comprueba si hay espacio disponible en el búfer de recepción.
    • Si hay espacio, se guarda el byte recibido en el búfer.
    • Si no hay espacio, se puede tomar alguna acción, como descartar el byte o indicar un error de desbordamiento del búfer.
  3. El programa principal puede acceder a los datos recibidos: El programa principal puede leer los datos del búfer de recepción cuando lo necesite.

C1. Características del Bus I2C

El bus I2C (Inter-Integrated Circuit) es un bus serie síncrono que se utiliza para la comunicación entre dispositivos integrados. Sus características más importantes son:

  • Dos líneas: Utiliza solo dos líneas, una para datos (SDA) y otra para reloj (SCL).
  • Direccionamiento: Cada dispositivo conectado al bus tiene una dirección única que permite al maestro seleccionar con qué dispositivo comunicarse.
  • Maestro/Esclavo: La comunicación es siempre entre un maestro (generalmente un microcontrolador) y uno o varios esclavos (periféricos).
  • Múltiples maestros: Permite la conexión de varios maestros, aunque solo uno puede controlar el bus a la vez. Se incluye un mecanismo de arbitraje para resolver colisiones.
  • Protocolo definido por software: El protocolo de comunicación es relativamente simple y se puede implementar fácilmente en software.
  • Palabras de 8 bits: Los datos y las direcciones se transmiten en palabras de 8 bits.

C2. Gestión del Bus I2C: Bit Banging vs. Controladora TWI

Bit Banging

El método de"bit bangin" consiste en implementar el protocolo I2C directamente en software, manipulando los pines SDA y SCL del microcontrolador a través de las instrucciones de entrada/salida. Es un método flexible pero consume más recursos del procesador y es más lento.

Controladora TWI

La controladora TWI (Two-Wire Interface) del AVR es un periférico hardware dedicado a la gestión del bus I2C. Simplifica la implementación del protocolo I2C al encargarse de las tareas de bajo nivel, como la generación de las señales SDA y SCL, el control del reloj y la detección de errores. Es más eficiente y libera al procesador para otras tareas.

C3. Acuse de Recibo (Acknowledge) en el Bus I2C

El acuse de recibo (ACK) es una señal que se utiliza en el bus I2C para indicar que un dispositivo ha recibido correctamente un byte de datos. Después de cada byte transmitido por el maestro, el esclavo receptor debe enviar un ACK al maestro. El ACK se envía poniendo la línea SDA a nivel bajo durante un ciclo de reloj.

Si el maestro no recibe un ACK después de enviar un byte, puede asumir que ha ocurrido un error en la comunicación. El maestro puede entonces abortar la transmisión o intentar retransmitir el byte.

C4. Gestión del Bus SPI: Bit Banging vs. Controladora SPI

Bit Banging

Similar al I2C, el método de"bit bangin" para SPI implica controlar las líneas del bus (MOSI, MISO, SCK, SS) directamente mediante software. Es flexible pero menos eficiente.

Controladora SPI

La controladora SPI del AVR es un periférico hardware que simplifica la comunicación SPI. Se encarga de la generación del reloj, la transferencia de datos y la gestión de la señal de selección de esclavo (SS). Es más eficiente y rápida que el bit banging.

C5. Conexión Daisy Chain en SPI

La conexión"daisy chai" en SPI es una forma de conectar varios dispositivos esclavos a un único bus SPI. En esta configuración, la salida de datos (MISO) del primer esclavo se conecta a la entrada de datos (MOSI) del segundo esclavo, y así sucesivamente. La señal de reloj (SCK) y la señal de selección de esclavo (SS) se comparten entre todos los dispositivos.

Ventajas de la conexión daisy chain:

  • Reduce el número de líneas necesarias para conectar varios dispositivos.
  • Simplifica el direccionamiento de los esclavos.

Desventajas:

  • La velocidad de transmisión se limita por el dispositivo más lento en la cadena.
  • Un fallo en un dispositivo puede afectar a toda la cadena.

C1. Generación de Señal Analógica con PWM

Se puede generar una señal analógica utilizando PWM (Pulse Width Modulation) y un filtro paso bajo. El PWM consiste en generar una señal digital con un ciclo de trabajo variable. El ciclo de trabajo se define como la proporción del tiempo que la señal está en nivel alto en relación con el periodo total del ciclo.

Al pasar la señal PWM por un filtro paso bajo, se elimina la componente de alta frecuencia y se obtiene una señal analógica cuyo valor medio es proporcional al ciclo de trabajo del PWM. Cuanto mayor sea el ciclo de trabajo, mayor será el valor medio de la señal analógica.

Ventajas de usar PWM para generar señales analógicas:

  • Simplicidad: Es fácil de implementar en software y hardware.
  • Eficiencia: Consume menos energía que otros métodos de generación de señales analógicas.
  • Precisión: Permite controlar el valor de la señal analógica con gran precisión.

C2. Configuración de Patillas de E/S para el Convertidor A/D del AVR

Para utilizar el convertidor A/D integrado en el AVR, es necesario configurar las patillas de E/S que se utilizarán como entradas analógicas. Esto se debe a que las patillas de E/S del AVR pueden configurarse como entradas digitales o analógicas. Para utilizarlas como entradas analógicas, se debe desactivar la función digital de la patilla y habilitar la función analógica.

La configuración de las patillas se realiza a través de los registros de configuración del puerto correspondiente. Por ejemplo, para configurar la patilla PA0 como entrada analógica, se debe escribir un '0' en el bit correspondiente del registro DDRA (Data Direction Register A) y un '1' en el bit correspondiente del registro ADMUX (ADC Multiplexer Selection Register).

C3. Comunicación Multibyte con el Convertidor A/D por I2C

Algunos convertidores A/D externos se comunican con el microcontrolador a través del bus I2C. Para leer valores de más de 8 bits (por ejemplo, 10 o 12 bits), se utiliza una comunicación multibyte. El maestro (microcontrolador) envía una solicitud de lectura al esclavo (convertidor A/D) especificando la dirección del registro que contiene el valor a leer. El esclavo responde enviando los bytes que componen el valor, generalmente en orden de mayor a menor significancia.

El maestro debe interpretar los bytes recibidos y combinarlos para obtener el valor completo. Por ejemplo, si el convertidor A/D tiene una resolución de 10 bits, el valor se enviará en dos bytes. El maestro debe combinar los 8 bits del primer byte con los 2 bits más significativos del segundo byte para obtener el valor de 10 bits.

C4. Generación Automática de PWM en AVR

Sí, el AVR puede generar una señal PWM de forma automática utilizando los temporizadores integrados y los periféricos PWM dedicados. Para configurar la generación de PWM, se deben programar los siguientes registros:

  • TCCRnA/B (Timer/Counter Control Register A/B): Se utiliza para configurar el modo de funcionamiento del temporizador, la fuente de reloj y el preescalador.
  • OCRnA/B (Output Compare Register A/B): Se utiliza para definir el ciclo de trabajo del PWM. El valor de este registro determina el momento en que se cambia el estado de la salida PWM.

El código proporcionado en el ejemplo no es correcto para generar PWM en AVR. Se debe utilizar la función analogWrite() para generar una señal PWM en una patilla específica. Esta función se encarga de configurar los registros del temporizador y del periférico PWM de forma automática.

C5. Potenciómetros Digitales

Funcionamiento

Un potenciómetro digital es un componente electrónico que simula el comportamiento de un potenciómetro analógico pero sin partes móviles. Internamente, está formado por una cadena de resistencias conectadas a un multiplexor analógico. El multiplexor permite seleccionar uno de los puntos intermedios de la cadena de resistencias como salida, simulando así la posición del cursor de un potenciómetro analógico.

Aplicaciones

Los potenciómetros digitales se utilizan en diversas aplicaciones, como:

  • Control de volumen
  • Ajuste de brillo de pantallas
  • Control de ganancia de amplificadores
  • Calibración de sensores

Limitaciones

Los potenciómetros digitales tienen algunas limitaciones, como:

  • Ancho de banda limitado: No son adecuados para señales de alta frecuencia.
  • Rango de voltaje limitado: No pueden manejar voltajes mayores que su voltaje de alimentación ni voltajes negativos.

Entradas relacionadas: