Estoy trabajando en un proyecto en el que necesito 32 salidas de una MCU que solo tiene 8 salidas libres.
Para lograr mi objetivo tengo los siguientes requisitos:
Debo poder alternar más de una salida al mismo tiempo
Los datos deben llegar lo más rápido posible.
No puedo perder paquetes de datos
Los datos deben transferirse de forma fiable.
Pensé en usar un decodificador 4-16, pero no puedo cambiar más de una salida al mismo tiempo.
Puedo usar la comunicación I2C para expandir mis pines de IO, pero no estoy seguro de si tendré problemas con los paquetes de datos y el tiempo.
Una posibilidad es utilizar multiplexación.
Estoy usando un AM3359 ARM Cortex-A8 @ 25Mhz
¿Alguna otra idea?
I2C opera a 100kHz, 400kHz, 1MHz y 3.4MHz estándar. Muchos expansores i2c pueden hacer lo que necesita, tanto de entrada como de salida. Y tiene bits de reconocimiento, por lo que sabe (más o menos) si un expansor recibió el paquete de datos.
Sin conocer sus requisitos exactos de velocidad de datos, no puede estar seguro, pero los expansores i2c son tan buenos como cualquier otro tipo.
Actualización: Como mencionó 1 MHz y un mcu de 25 MHz, el expansor Microchip MCP23009 3.4MHz 8bit I2C podría funcionar. Se pueden usar hasta 8 en un solo bus usando un divisor de voltaje en el pin de dirección. El MCP23018 es la versión de 16 bits, por lo que solo necesita 2 (y puede probarlos si es necesario).
Alternativamente, hay expansores SPI que pueden llegar hasta 10 MHz. El MCP23009/18 puede hacer I2C a 3,4 MHz y SPI a 10 MHz, por lo que puede probar ambos para ver cuál le conviene más.
Un enfoque común es usar una cadena de 74HC595 o chips de registro de desplazamiento de entrada en serie y salida en paralelo similares, y controlar la cadena usando la salida de reloj y los cables MOSI de un puerto SPI, así como una E/S "ordinaria". alfiler. El pin de salida de reloj SPI debe conectarse a la entrada de reloj de turno de cada registro de turno, y el pin de E/S normal debe conectarse a la entrada de reloj de registro de cada cambiador. Una palanca de cambios debe tener su entrada de datos conectada a MOSI; una segunda palanca de cambios debe tener su entrada de datos conectada a la salida de datos de la primera. Si hay una tercera palanca de cambios, su entrada de datos debe estar conectada a la salida de datos de la segunda, etc.
Usando este enfoque, tres pines del procesador pueden conectarse a cualquier número de chips de registro de desplazamiento que controlen colectivamente cualquier número de pines. Para configurar las salidas, envíe al puerto SPI los datos que se supone que deben ir en todos los cambiadores, enviando primero los datos para el cambiador que está más alejado del procesador. Una vez que se han enviado todos los datos, pulsar el pin del reloj de registro hacia arriba y luego hacia abajo hará que todas las salidas del registro de desplazamiento cambien simultáneamente. Se pueden cambiar tantas o tan pocas salidas como se desee en cada paso; el único factor que limita el número de salidas que se pueden controlar es la necesidad de volver a especificar el estado de cada salida cada vez que se desee cambiar cualquiera de ellas.
Si solo necesita que ciertos grupos de salidas puedan cambiar simultáneamente, puede ser útil tener varias cadenas de registro de desplazamiento independientes. Todas las cadenas pueden compartir la salida de reloj y los pines MOSI (utilizando una salida de reloj de registro por cadena) si uno se asegura de que una vez que el código comience a transferir datos a una cadena, todos los datos de esa cadena se enviarán y mostrarán antes del SPI. bus se utiliza para cualquier otra cosa. Si uno tiene 240 salidas que necesitan cambiar ocasionalmente y 16 que necesitan cambiar un poco más a menudo, dar a los chips que controlan 16 salidas que cambian con frecuencia su propio pin de reloj de registro significará que cambiar esos pines solo requerirá enviar dos bytes al SPI en lugar de 32.
Como dice @passerby, I2C es el protocolo más fácil, una línea para datos y otra para reloj, puede hacerlo por software y creo que los requisitos de tiempo son mínimos y como solo usará el expansor como salidas no habrá cualquier problema... Creo que no hay mínimo para I2C...
Otra idea que pensé es usar pestillos con un decodificador para direccionar el bus, pero con ese máximo que puede lograr es 16 salidas.
gbmhunter
joe hass
Butzke
Butzke
pjc50
Butzke