Estoy tratando de conectar un Raspberry Pi rev 2 modelo B a un montón de cosas para crear un controlador de pie MIDI:
- pantalla táctil de Adafruit
- 20 interruptores (algunos foot , algunos botones de codificador)
- 8 x SPI LED drivers ( TLC5925 chips en 4 grupos de 2)
- puertos de entrada / salida MIDI
- 6 codificadores en cuadratura (cada uno: 2 IO para rotación, 1 IO para botón)
La pantalla simplemente hace clic en el Pi sin problemas ... ya está funcionando pero se come una gran cantidad de pines. El pin-out actual del Pi es el siguiente:
P1:
01: +3.3V power
02: +5V power
03: SDA i2c1: SCREEN
04: +5V power
05: SCL i2c1: SCREEN
06: GND
07: --free--
08: UART transmit: MIDI
09: GND
10: UART receive: MIDI
11: --free--
12: --free--
13: --free-- (GPIO 23)
14: GND
15: --free-- (GPIO 22)
16: --free-- (GPIO 23)
17: +3.3v power
18: GPIO: SCREEN
19: SPI MOSI: SCREEN
20: GND
21: SPI MISO: SCREEN
22: GPIO: SCREEN
23: SPI SCLK: SCREEN
24: SPI SC0: SCREEN?
25: GND
26: SPI SC1: SCREEN?
P5:
01: +5V
02: +3.3V
03: i2c0 SDA: LED ring driver (GPIO 28)
04: i2c0 SCL: LED ring driver (GPIO 29)
05: --free-- (GPIO 30)
06: --free-- (GPIO 31)
07: GND
08: GND
Ya tengo mucho código y experiencia con todos estos componentes individualmente. Pero estoy abrumado con la cantidad de entrada y salida requerida para hacer que esto funcione.
Actualmente hay 10 pines GPIO gratuitos. 2 de los cuales podrían usarse para hardware I2C.
Según mi estimación, necesito estos pines GPIO:
Inputs:
12: Encoders x 6 @ 2 channels each
6: Encoder buttons
14: Foot switches
Outputs:
3: common SPI lines
4: SPI select lines
O 32 entradas, 7 salidas.
De todos modos. Supongo que no hay una buena forma de abordar todos esos dispositivos SPI en hardware y probablemente tendré que atacarlos en el software. No me gusta la idea de encadenarlos a todos en un dispositivo SPI largo (aunque es físicamente posible) debido a la posibilidad de que los errores se propaguen a lo largo de la cadena y también el tiempo necesario para actualizar todos esos bits para cambiar el estado un led Prefiero cadenas más cortas donde puedo abordar las cosas rápidamente. Además, si hay una falla de hardware en una cadena, no afecta a todas las demás.
¿Hay algún panel de ruptura que pueda manejar a través de I2C?
¿Otras ideas?