Resuelva los problemas de expansión de E/S de los microcontroladores aplicando dispositivos externos

Por Jacob Beningo

Colaboración de Editores de Digi-Key de América del Norte

Los diseñadores suelen enfrentar dos problemas de E/S en los microcontroladores. El primero se produce cuando el microcontrolador que mejor se adapta a una aplicación no cuenta con la combinación correcta de capacidades de E/S. El segundo, cuando una línea de productos que ya se lanzó requiere E/S adicional.

En el primer caso, los desarrolladores a menudo se ven obligados a comprar un microcontrolador de mayor costo y capacidad. En el segundo caso, el costo del cambio de microcontrolador y de la portabilidad del software necesaria para la adaptación puede ser excesivamente elevado y requerir demasiado tiempo.

Una posible solución a estos dos problemas es usar dispositivos de expansión de E/S externos que a menudo se conectan al bus de SPI (interfaz periférica serial) o I2C (circuito interintegrado) de un microcontrolador. Estos evita la necesidad de especificar excesivamente el microcontrolador en términos de conteo de pines y posiblemente de rendimiento y espacio. Al mismo tiempo, este enfoque garantiza el futuro del diseño del producto de cara a la fluencia de características, la expansión del mercado de destino, las solicitudes de características del cliente y una selección deficiente de microcontroladores (sucede).

Este artículo tratará los requisitos típicos de E/S del microcontrolador e introducirá algunos dispositivos de expansión externos adecuados. Luego mostrará cómo usar estos recursos fuera de chip que pueden proporcionar entrada y salida adicionales de propósito general, almacenamiento de memoria, PWM (modulación de ancho de pulso) e incluso funcionalidad de temporizador de vigilancia.

Selección de una interfaz de expansión

Los microcontroladores cuentan con múltiples interfaces periféricas en chip que se pueden usar para comunicarse con dispositivos externos. Según el microcontrolador, estas interfaces pueden ser , por ejemplo, las siguientes:

  • SPI
  • Bus de I2C
  • USB (bus serial universal)
  • UART (transmisor receptor asíncrono universal)
  • CAN (red de área de controlador)
  • Wi-Fi

Las interfaces que funcionan mejor para comunicarse con dispositivos de expansión externos son el I2C y la SPI.

El I2C es un bus de dos cables que tradicionalmente funciona a 100 Kbits/s (kilobits/segundo) o 400 Kbits/s, pero existen dispositivos de alta velocidad que admiten 1 Mbit/s o más. Uno de los cables es un pin de reloj dedicado mientras que el otro es para comunicación bidireccional entre un maestro y uno secundario. Comúnmente, el microcontrolador actúa como el maestro y los dispositivos externos son secundarios. Los secundarios son direccionables y utilizan un esquema de direccionamiento de 7 bits o 10 bits.

La SPI es una interfaz de bus de tres cables que funciona a 1 Mbit/s-12 Mbits/s. El bus de SPI cuenta con una línea de datos de salida maestra dedicada, una línea de datos de salida secundaria y un reloj. Una vez más, el microcontrolador se configura para ser el dispositivo maestro y se comunica con los dispositivos secundarios utilizando una línea de "selección de secundarios". Cada dispositivo secundario conectado al microcontrolador requiere un pin de salida dedicado que se selecciona para la comunicación. Es fácil imaginar que si un desarrollador cuenta con muchos dispositivos externos que desea conectar, podría quedarse sin líneas de E/S para seleccionar los dispositivos secundarios.

Por ejemplo, si un desarrollador utilizara STM32L011D4P7 de STMicroelectronics, tendría 11 líneas de E/S para trabajar (Figura 1). Se requieren tres líneas de E/S solo para los datos la SPI y el reloj, lo que deja ocho líneas para establecer comunicación con los dispositivos secundarios y realizar cualquier funcionalidad adicional que necesite el sistema. Esto resulta perfecto para muchas aplicaciones, pero, en algún momento, el diseñador posiblemente necesite expandir la E/S.

Imagen del procesador Arm® Cortex®-M7 STM32L011D4P7 de STMicroelectronics

Figura 1: El STM32L011D4P7 es un procesador Arm® Cortex®-M7 con restricción de pines con E/S. (Fuente de la imagen: STMicroelectronics)

En general, la regla de oro es bastante sencilla: use el bus I2C cuando agregue las siguientes capacidades:

  • E/S
  • PWM
  • EEPROM (memoria programable y borrable de solo lectura)
  • Temporizador de vigilancia

El bus de SPI se debe usar para agregar capacidades como el acceso de memoria de alta velocidad a una tarjeta SD.

Expansión de E/S de propósito general

Existen bastantes IC que admiten la expansión de entrada y salida a través de una interfaz de I2C. Los siguientes son algunos ejemplos interesantes:

El PCA8574 es particularmente interesante porque contiene un solo registro para llevar a cabo tanto la entrada como la salida. Un solo registro simplifica considerablemente la cantidad de software que se requiere para configurar el dispositivo y leer y escribir los pines (Figura 2). El microcontrolador se comunica con el PCA8574 a través del I2C y aborda el dispositivo según la forma en que se configuran los pines A0-A2. Esto agrega flexibilidad al diseño para que un desarrollador pueda elegir la dirección del secundario para el PCA8574 y contar con varias en un solo diseño.

Diagrama del expansor PCA8574 de NXP de I2C de E/S de 8 bits

Figura 2: El PCA8574 de NXP es un expansor de I2C de E/S de 8 bits cuasibidireccional. Cuenta con un solo registro de I2C para la lectura y la escritura a fin de ejecutar funciones de E/S en los pines, lo que lo convierte en un dispositivo muy simple y elegante. (Fuente de la imagen: NXP Semiconductors)

De forma predeterminada, P0-P7 se configuran como entradas durante el encendido. La lectura del registro interno único proporcionará el estado para cada pin del dispositivo, ya sea que se haya configurado como entrada o salida. El PCA8574 permite que los pines actúen como entrada y salida simultáneamente, por lo que una escritura en el registro también establecerá la salida del bit correspondiente.

Un resistor interno débil, fácilmente sometido por un valor de entrada, eleva la unidad de salida. Si cualquiera de los estados de entrada cambia, el pin INT cambiará a bajo para que el microcontrolador sepa que se produjo un cambio en el estado de entrada. El microcontrolador puede realizar una llamada de I2C para leer los nuevos valores.

Expansión de PWM

Un dispositivo de expansión muy útil es el expansor de PWM. Este dispositivo es particularmente útil cuando se encienden los leds. Cuando el microcontrolador no hace nada, se puede poner en reposo y el expansor de PWM puede ser responsable de controlar el estado de un led.

Un ejemplo perfecto de cómo se usa el expansor de PWM a menudo aparece en los circuitos de pulsadores RGB que utilizan un pulsador RGB PV6F240SSG de E-Switch o un pulsador SPST RGB 3-101-399 de Schurter Electronic Components (Figura 3).

Imagen del pulsador RGB de CEE Schurter

Figura 3: El pulsador RGB de Schurter contiene un led rojo, verde y azul alrededor de un botón pulsador que le permite a un desarrollador crear un patrón de color iluminado. Estos tipos de dispositivos son perfectos para que los controle un chip de expansión de PWM. (Fuente de la imagen: Schurter)

El botón pulsador RGB de Schurter cuenta con un led rojo, verde y azul alrededor de un botón pulsador SPST que permite a un desarrollador crear un patrón de color iluminado. Estos tipos de aplicaciones son perfectos para un chip de expansión de PWM.

Un chip de expansión de PWM adecuado para el uso sobre el I2C es el MAX7315 de Maxim Integrated. El MAX7315 proporciona ocho puertos de PWM e incluye una característica de control de intensidad de led. Esto cubre fácilmente los tres canales necesarios para activar un interruptor RGB, lo que permite que un solo dispositivo maneje un par de interruptores y algunos leds independientes. También existe un noveno puerto que se puede utilizar como una interrupción de detección de transición o como una salida de propósito general.

La interfaz de I2C MAX7315 es un poco más complicada que el PCA8574 de NXP porque contiene más de un solo registro. Por lo tanto, los desarrolladores deben abordar el dispositivo secundario, proporcionar la dirección de memoria interesada en la escritura o la lectura y luego realizarlas. El mapa de memoria para el MAX7315 se muestra en la Figura 4.

Registrarse Código de dirección (Hex) Dirección de autoincremento
Puertos de entrada Rad 0x00 0x00 (sin cambios)
Salidas 0 de fase de parpadeo 0x01 0x01 (sin cambios)
Configuración de puertos 0x03 0x03 (sin cambios)
Salidas 1 de fase de parpadeo 0x09 0x09 (sin cambios)
Maestro, intensidad O8 0x0E 0x0E (sin cambios)
Configuración 0x0F 0x0F (sin cambios)
Intensidad de salidas P1, P0 0x10 0x11
Intensidad de salidas P3, P2 0x11 0x12
Intensidad de salidas P5, P4 0x12 0x13
Intensidad de salidas P7, P6 0x13 0x10

Figura 4: El controlador de PWM MAX7315 cuenta con ocho puertos de salida que incluyen una característica de intensidad de led. El mapa de registro para el dispositivo es simple y permite un fácil acceso a las características avanzadas de PWM. (Fuente de la imagen: Maxim Integrated)

El mapa de registro para el MAX7315 es simple y permite un fácil acceso a las características avanzadas de PWM.

Expansores combinados con WDT, EEPROM y PWM

Tal como se muestra, los expansores de E/S del bus de I2C pueden ser extremadamente potentes cuando se usan como dispositivos independientes. Es decir, contienen solo una función específica como E/S o PWM. Los expansores como el expansor multipuerto de E/S CY8C9520A de Cypress Semiconductor incluyen múltiples expansiones periféricas dentro de un solo paquete de IC. El CY8C9520A está disponible en tres variedades: Extensión de 20 bits, 40 bits o 60 bits. Estos pines se pueden configurar para el uso como entrada, salida o PWM (Figura 5).

Diagrama del CY8C9520 de Cypress Semiconductor

Figura 5: El CY8C9520 de Cypress Semiconductor es un expansor de E/S de 20 bits, 40 bits o 60 bits con EEPROM. Permite que los pines de expansión se configuren como entrada, salida o PWM. (Fuente de la imagen: Cypress Semiconductor)

Además de la expansión de E/S, el CY8C9520 también incluye EEPROM, que se puede usar para almacenar configuraciones importantes de aplicaciones, como un número de serie, así como otros parámetros de configuración importantes.

Si se analiza detenidamente la Figura 5, se muestra el pin WD6 en GPort 2. Este es un pin de salida del temporizador de vigilancia que se puede usar para reiniciar el microcontrolador si no se comunica y "cuida" la vigilancia del CY8C9529. La configuración del controlador de vigilancia es completamente configurable y se puede usar para agregar un nivel de robustez adicional al código de la aplicación.

Consejos y trucos para expandir las capacidades del microcontrolador

Existen muchas técnicas que pueden ayudar a expandir la capacidad de un microcontrolador. A continuación se incluyen varios consejos y trucos que servirán de ayuda:

  • Utilice el I2C para conectar dispositivos externos. La interfaz solo requiere dos pines y puede admitir varios dispositivos esclavos.
  • Antes de incluir una pieza en el diseño de hardware, compre una placa de desarrollo o suelde el chip a una placa de expansión para comprobar si cumple con todas las necesidades del sistema.
  • Use una herramienta de bus de I2C para interactuar con el dispositivo de expansión y conocer cómo funciona. Esto acelerará considerablemente el desarrollo de software.
  • Use un analizador de bus para monitorear la comunicación con el dispositivo externo durante el desarrollo del software para minimizar el tiempo de depuración.
  • Cuando sea posible, seleccione un dispositivo que tenga un temporizador de vigilancia externo. Esta puede ser una herramienta para agregar robustez adicional al diseño del sistema.
  • Al interactuar con la memoria fuera de chip para datos que no sean datos de configuración, use una interfaz de alta velocidad como la SPI.
  • Asegúrese de que el controlador I2C del microcontrolador pueda manejarlo si un dispositivo devuelve un NAK (reconocimiento negativo) o si el bus se arrastra hacia abajo. No es raro que estos controladores ignoren los errores e ingresen a un bucle infinito si se recibe una respuesta inesperada.

Conclusión

Cuando un diseño llega a un punto en el que el microcontrolador ya no tiene más E/S, los desarrolladores no tienen que destruir el diseño y empezar de cero. En cambio, pueden usar chips periféricos externos que les permiten agregar capacidades adicionales al sistema.

Descargo de responsabilidad: Las opiniones, creencias y puntos de vista expresados por los autores o participantes del foro de este sitio web no reflejan necesariamente las opiniones, las creencias y los puntos de vista de Digi-Key Electronics o de las políticas oficiales de Digi-Key Electronics.

Información sobre el autor

Jacob Beningo

Jacob Beningo es un consultor de software integrado que actualmente trabaja con clientes en más de una docena de países para transformar drásticamente sus negocios mejorando la calidad del producto, el costo y el tiempo de comercialización. Ha publicado más de 200 artículos sobre técnicas de desarrollo de software embebido, es un conferenciante y entrenador técnico muy solicitado y tiene tres títulos que incluyen una Maestría en Ingeniería de la Universidad de Michigan. No dude en ponerse en contacto con él en jacob@beningo.com, en su sitio web www.beningo.com, y suscríbase a su boletín mensual Embedded Bytes Newsletter.

Información sobre la editorial

Editores de Digi-Key de América del Norte