Lectura de matriz de fototransistores con Raspberry Pi

Para un proyecto en el que estoy trabajando, necesito leer los valores de una matriz de fototransistores (8x16) en la Raspberry Pi.

No estoy exactamente seguro de cómo hacer esto, ya que sé que necesito incluir un ADC en algún lugar allí. Si uso registros de desplazamiento para leer los valores de los fototransistores, ¿cómo puedo incorporar el ADC allí?

El problema es la interfaz ADC. Estoy mirando el MCP3008, que aparentemente usa una interfaz de estilo SPI. Si fuera solo una interfaz de estilo analog in-> simple digital out, no sería un problema.

Por favor, explique lo que quiere decir con digital out. SPI es salida digital, al igual que I2C, al igual que interfaces de salida paralelas (que requerirán n líneas GPIO para una salida de n bits).
Quiero decir que cuando intento leer un valor, solo quiero poder usar un pin para leer desde el ADC. Como en el ADC, tiene un par de pines de entrada analógica y salida digital, sin líneas de control ni nada.
No entiendo esta pregunta. Necesita multiplexar sobre múltiples fototransistores con un solo ADC. ¿Pero el principal problema es la interfaz serial del lado digital del ADC? ¿No es el problema principal (o al menos el problema especial) cómo escanear la matriz con un solo ADC? ¿Y el Pi no tiene ya algunos ADC? Los microcontroladores de un dólar tienen ADC.
Un registro de desplazamiento es inútil para los fototransistores porque un registro de desplazamiento contiene solo 1 y 0. Para resolver la multiplexación utilizando un enfoque similar al registro de desplazamiento, necesitaría un "registro de desplazamiento analógico": algo que muestree y retenga los voltajes y luego los desplace hacia el ADC. Existen cambiadores analógicos: se llaman brigadas de cubos. ¡No conozco ninguno que te permita cargar los cubos en paralelo! No, lo que quiere aquí es un interruptor analógico: un dispositivo que recibe N entradas de fototransistores y selecciona uno de ellos para pasar, en función de las entradas digitales.
Kaz, y lo que describiste como un interruptor analógico suena exactamente como lo que estoy buscando. ¿Me recomendarías uno específico para este trabajo? Además, la Raspberry Pi no tiene un ADC incorporado para los pines GPIO.

Respuestas (2)

Para leer 8 filas de 16 entradas analógicas, debe considerar usar 8 chips multiplexores analógicos CD74HC4067E. Para reunir sus 8 voltajes de salida, puedo pensar en algunas opciones:

  1. Use (parte de) un noveno chip 4067 en modo mux. Conecte las 8 salidas analógicas a las primeras 8 entradas analógicas del noveno 4067. Esta es probablemente la solución más limpia y menos complicada.

  2. Use (parte de) un noveno 4067 como un decodificador binario de 8 bits para controlar los pines de habilitación de salida en los otros chips, y simplemente conecte sus salidas. Esto probablemente sería más fácil de enrutar y puede tener una distorsión más baja ya que la señal solo pasa por un chip mux en lugar de dos.

De cualquier manera, tendrá una dirección de 7 bits que debe generar. Si no tiene suficientes pines de salida libres, podría:

  1. Utilice un registro de desplazamiento de salida paralelo en serie de 8 bits para controlar los pines de habilitación de salida en los 8 4067, tal vez otro para controlar los pines de dirección en los 4067 si está realmente desesperado por pines.

  2. La mayoría de los ADC de "8 canales" son en realidad un ADC de un solo canal con un mux analógico de 8 puertos incorporado. Por lo general, tienen especificaciones más bajas, pero si funciona, uno de estos, más los 8 4067, probablemente sea su opción de menor cantidad de piezas.

Según los niveles de señal y la rapidez con la que necesite operar, es posible que deba agregar un amplificador operacional o un búfer entre los multiplexores y su ADC.

Tenga en cuenta que aún no he probado ninguno de estos, pero las partes están en el correo (estoy trabajando en algo similar).

Actualización: si desea una mayor robustez del ruido, puede ejecutar la parte de detección de su circuito a un voltaje más alto y usar chips mux DG506B en su lugar.

El problema parece derivar en la necesidad de adquirir los datos digitales generados por el ADC, a través de una interfaz de una sola línea.

Hay varios ADC disponibles que admiten dichas interfaces de línea serie de un solo pin. Por ejemplo:

Básicamente, uno debe buscar ADC con una interfaz de pin de datos único, en lugar del dispositivo SPI especificado en la pregunta.

Gracias Anindo. Entonces, en el DS2450, uso una biblioteca One-Wire en el RPi para escribir en el pin (estableciendo los registros de desplazamiento) y luego para leer desde el pin (desde el fototransistor exacto establecido por el registro de desplazamiento)?
La interfaz de 1 cable se utilizará para tomar datos del ADC, una vez que el ADC haya muestreado el valor analógico del fototransistor conectado a su entrada analógica. No entra en juego ningún registro de desplazamiento. ¿Qué esperaba exactamente que el registro de turnos hiciera por usted?
Tengo una matriz de fototransistores (8x16), por lo que esperaba que el registro de desplazamiento pudiera reducir la cantidad de pines a 3 (SPI).
@ usuario1000229 No. Lo que necesita entonces es un multiplexor analógico, o en realidad varios de ellos, y un montón de líneas GPIO adicionales para controlarlos. Eso amerita una pregunta aparte, de lo contrario se convertirá en lo que se conoce como una Pregunta Camaleónica .