Una gran cantidad de botones en una Raspberry Pi

Estoy trabajando con un amigo (él tiene la visión, construye la estructura, estoy trabajando en la electrónica) en un proyecto a gran escala que involucra una cuadrícula de imágenes iluminadas por un LED con solo presionar un botón. Planea tener 1000 imágenes, cada una con sus propios botones. Planeo ejecutar todo el proyecto en una Raspberry Pi. Los LED pasarán por SPI. Tengo problemas para descubrir cómo conectar y monitorear una cantidad tan grande de botones (he hecho muchos LED pero tengo poca experiencia con el monitoreo de múltiples entradas). He pensado en un par de opciones y me pregunto cuál es la mejor, si esto es factible:

  1. Varios circuitos integrados de escáner de teclado (como el TCA8418 o el LM8330) conectados a un multiplexor I2C conectado a la RaspberryPi. No sé si esto tendría un tiempo de respuesta razonable o si ciertas secciones del teclado no responderían mientras otras estaban activas.
  2. Múltiples arduinos más pequeños monitorean una pequeña cantidad de botones que envían información al Pi. Podríamos manejar más prensas simultáneas, pero parece ser la opción más cara.

¿Alguna de estas opciones es factible para ejecutarse en una sola RaspberryPi con buenos tiempos de respuesta? Registrar múltiples prensas es menos importante que tener algo que responda rápidamente con cada prensa individual en este escenario.

Para aclarar, no tengo mucha experiencia diseñando circuitos grandes por mi cuenta o trabajando con circuitos integrados. Ya sé que la gente ha hecho preguntas sobre la compatibilidad con alrededor de 100 botones, solo que no he visto nada en esta escala. Sé que es teóricamente posible, ahora quiero saber si es práctico.

Respuestas (2)

Ciertamente podría funcionar, I2C puede funcionar bastante rápido. Solo asegúrese de que los circuitos integrados que está utilizando admitan un espacio de direcciones lo suficientemente amplio como para sentarse en el mismo bus. Lo bueno de I2C es que es multimaestro, si encuentra un IC que pueda informar a su controlador principal cuando se presionó un botón, debería funcionar bien. Incluso si tiene que recurrir al sondeo, la frambuesa pi debería poder manejar esa carga sin problemas.

En cuanto a los tiempos de respuesta, puede calcularlos aproximadamente revisando los diagramas de tiempo en la hoja de datos y con un poco de experimentación. Comience con el tiempo que le toma adquirir los datos en primer lugar. A menos que haya un cuello de botella terrible en algún lugar, debería funcionar lo suficientemente rápido para la función prevista.

Raspberry Pi (el chip de Broadcom) no es compatible con multimaestro I2C. Sin embargo, admite el estiramiento del reloj.
No sabía eso... es un extraño descuido.
Es un descuido de su parte, pero una decisión de diseño para el RPi
Me parece bien. Simplemente parece extraño no incluir una pieza básica de funcionalidad para un protocolo estándar. ¿Qué se podría ganar dejando de lado esa funcionalidad?

En gran medida, dependerá de qué tan separados estén sus botones, también dependerá de la necesidad potencial de admitir múltiples botones activados al mismo tiempo.

Sugeriría que podría usar un controlador de teclado de PC simple (los teclados son realmente baratos), admite alrededor de 104 teclas (botones) y proporciona un cambio de tecla N para que pueda ver muchos botones presionados a la vez. Si usa un controlador de teclado, puede conectarlo a través de USB, conectar varios a través de un concentrador (un concentrador de 8 puertos le daría alrededor de 800 botones) y el software para un dispositivo de teclado es fácil de escribir.
Si obtiene teclados con tomas USB, ya tienen un concentrador interno, por lo que también podría serializarlos de esa manera.

En muchos teclados, el controlador está en una pequeña placa base separada de la matriz de teclas, lo que hace que las cosas sean agradables y fáciles. He cortado muchos teclados solo para obtener las teclas de función para varios proyectos y funciona bien.