¿Cómo poner un 74HC165 en un bus SPI?

Si quiero leer un (montón de) chips 74HC165 a través de un puerto SPI en un microcontrolador, esto es bastante simple. Conéctelos a través de Q7 a DS en cada uno, aplique el Q7 final a MISO, notCE a SS y CP a SCK. Esto funciona bien.

Pero ahora, ¿cómo comparto el bus SPI con otros dispositivos que quiero leer? La salida Q7 del 165 nunca es hi-Z, por lo que no puedo compartir el pin MISO con otros dispositivos. Necesitaría alguna forma de "separarlo", un búfer de algún tipo.

Sé que hay chips de la serie 74 que tienen varios búferes que se pueden hacer hi-Z (como un 74HS240), pero ese es un chip adicional completo solo para poder compartir el registro de desplazamiento. ¿Quizás alguna forma astuta de poner un transistor entre el Q7 final y el MISO del microcontrolador, controlado por la línea SS?


Editar: Alternativamente, ¿alguien puede sugerir algún otro registro de desplazamiento de salida en serie paralelo que tenga una línea de salida en serie tristate y, por lo tanto, adecuado para usar en un bus SPI?

¿Por qué no usar un chip SPI real, como un MCP23S08 o MCP23S17?
Una de las razones es que los 165 son baratos y están disponibles en muchas fuentes. Los chips diseñados para SPI lo encierran en un solo proveedor. (Por otro lado, dado que trabajo para Microchip, por supuesto, compre nuestras piezas. :-)
De hecho, los 165 son muy baratos y puedo conseguirlos en paquetes de cinco en Amazon. Una de las razones por las que quiero usarlos es para el dispositivo externo IO: si exploto uno accidentalmente, puedo reemplazarlo fácil y económicamente. Menos para un chip más caro y más raro.
He hecho como dijiste en el pasado (solo simulación). Un BJT como chip-select, en el Q7. Un BC549 funcionará muy bien dependiendo de la velocidad del bus SPI. El problema con este enfoque es que será de drenaje abierto, por lo que, dependiendo de la velocidad, podría usar una resistencia como se ha dicho.

Respuestas (4)

¿Alguien puede sugerir algún otro registro de desplazamiento de salida en serie paralelo que tenga una línea de salida en serie tristate y, por lo tanto, adecuado para usar en un bus SPI?

Mouser, Newark y algunos otros distribuidores y proveedores tienen un filtro de selección que ayuda cuando busco "algo como un 74HC165, pero con salida en serie tristate":

74HC589: entrada serial o paralela de 8 bits; salida en serie; registro de desplazamiento con salida de 3 estados. "El HC589A interactúa directamente con el puerto de datos en serie SPI en las MPU y MCU CMOS".

-- En la hoja de datos de Semiconductores ; Hoja de datos de Fairchild (por lo que cumple con el criterio de "debe tener una segunda fuente" que tienen algunos proyectos, como lo menciona Jason S).

Ajá, el '589 se ve perfecto en ese caso; similar a un 165 pero con salida tristate de hecho. Justo lo que estaba buscando. Gracias.
Una nota rápida del futuro: ahora que ON Semi ha adquirido fairchiled, el HC589 parece ser fabricado exclusivamente por ON Semiconductor.

Como notó, el 165 no es un dispositivo SPI 'completo' porque no establece tres estados en su salida.

Si tiene un solo 165 en su bus SPI y la velocidad no es un gran problema, puede colocar una resistencia (¿10k?) Entre la salida 165 y el pin uC MISO. Otros chips SPI (que hacen tri-state su salida) anularán la unidad débil a través de la resistencia, pero sin otros chips activos, la unidad débil prevalecerá, pero es posible que deba reducir la velocidad del reloj (solo para el 165).

Si tiene varios 165, puede usar un chip multiplexor (151). Esto cuesta líneas de selección adicionales para el chip mux, pero puede compartir las líneas notCE del 165 (que de otro modo habrían estado separadas) y usar una de las entradas para los chips SPI 'reales'.

El 151 tampoco parece tener una línea de habilitación de salida, por lo que eso solo mueve el problema. En este punto, tendría que pasar todas las líneas MISO de mis dispositivos a través del chip 151, y ahora debo controlar sus líneas multiplexoras y las líneas SS de los dispositivos SPI, usando más pines en el uC. Esto seguramente anula todo el propósito del bus MISO/MOSI/SCK compartido.
Cuando tiene varios 165, guarda una línea notCE para cada 165, al costo de N líneas seleccionadas para 2^N-1 165. (el -1 es el dispositivo SPI 'real').

El 74xx125 y el '126 son búferes cuádruples con salidas de tres estados, controlados individualmente; puede usar un paquete para almacenar en búfer cuatro 165...

Bueno, el objetivo de la cadena SPI no es necesitar cuatro 165 individuales conectados directamente al uC; Puedo hacerlos todos en una cadena larga. Así que solo necesitaría un único búfer tristate.
@LeoNerd esto no tiene que ver con SPI, solo se basa en la aplicación. Tenerlo en cadena implica que necesita actualizar la cadena de agujeros para un solo cambio. Para aplicaciones de alta capacidad de respuesta/velocidad y/o bus SPI de baja frecuencia, o incluso para reducir EMI, tener cada 74xx125 como esclavo es cada vez mejor.
Recientemente descubrí que puede obtener versiones de "una puerta" de los chips 74'125 y '126; por ejemplo, consulte SN74AHC1G125. Me he pedido un montón de estos, ya que parecen ideales para aislar las líneas de salida en serie nunca hi-Z de estos chips para ponerlos en un verdadero bus SPI.

Usted describió cómo puede conectar en cascada un montón de chips 74HC165 en una cadena larga. Un montón de chips 74HC595 también se pueden conectar en cascada en una cadena de margarita similar.

Una forma de "compartir el bus SPI con otros dispositivos" es encadenar todos sus chips en una larga cadena tipo margarita SPI . Ha pasado un tiempo desde que lo hice, pero creo recordar que podía poner chips 74HC165, chips 74HC595 y chips similares en un bucle largo. No importa cuántos chips haya en el bucle de cadena o en qué orden estén, solo necesité 4 pines en el microcontrolador.

El pin MOSI del microprocesador impulsa el pin MOSI del primer chip de la cadena, cada chip está conectado en cascada, por lo que su salida serial impulsa la entrada serial del siguiente chip de la cadena, y el pin MISO del último chip de la cadena impulsa el MISO pin del microprocesador.

El microprocesador registra la entrada/salida del ciclo completo de datos cada vez que desea cambiar cualquier salida o leer cualquier entrada.

Así es como funciona JTAG , ¿verdad?

Un bucle tan largo en cadena tipo margarita es más lento, pero requiere menos pines en el microcontrolador que la "configuración SPI de esclavo independiente". Desafortunadamente, algunos chips que afirman ser compatibles con SPI no se pueden conectar en cadena.

La única razón por la que incluso está considerando SPI es porque se está quedando sin pines en el microcontrolador y está conectado a algo que no necesita altas velocidades, ¿verdad?