Conexión de codificadores / dispositivos SPI / LED / botones a un Rasperry Pi

1

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?

    
pregunta fret

1 respuesta

0

Este proyecto realmente se terminó. La solución que utilicé fue una serie de chips conectados al Pi a través de I2C.

  • 1 x SC18IS602B (puente I2C a SPI) conectado a:
    • 3 x LED suena con los controladores TLC5925 SPI LED (aunque no fue sencillo ).
  • 2 x MCP23017 (expansores GPIO I2C) conectados a:
    • 14 x botones de hardware (14 pines)
    • 6 x pines de cuadratura del codificador (12 pines)
    • 6 x botones de encoder (6 pines)
  • 1 x ads1115 (convertidor de analógico a digital I2C)
  • Salida PWM RPi conectada a:
    • un convertidor de nivel 3.3v - > 5v y luego
    • una cadena de 14 neopixels .
  • pines RPi UART TX / RX conectados a:
    • un convertidor de nivel 3.3v - > 5v y luego
    • para salida MIDI: un búfer de puerta 4011 4xNAND
    • para entrada MIDI: un desacoplador óptico 6N138

Hay un registro continuo del progreso en mi blog aquí .

    
respondido por el fret

Lea otras preguntas en las etiquetas