Control CD54HC4094 (Shift Register) with SPI.

Hey, I am wondering if it would be possible to control this shift register using SPI: http://www.ti.com/lit/ds/symlink/cd74hct4094.pdf
The reason I want to control the shift register using SPI is because I already have 2 other SPI devices, so it would save me pins. Obviously, in order to implement Slave Select, I know that I would need to AND the SPI-SCK line with the SS, instead of connecting it to the Shift Register's CP pin directly.
Thanks :slight_smile:

By the way, can someone explain to me what STROBE pin does on the Shift Register?

By the way, can someone explain to me what STROBE pin does on the Shift Register?

Strobe transfers the data in the shift register to the outputs. It is the equivalent of a latch input.

That is an odd part, but you should be able to use it with SPI if you get the SPI mode correct.

Obviously, in order to implement Slave Select, I know that I would need to AND the SPI-SCK line with the SS,

No?

The '4094 is a bit wierd. I would replace it with a 74hc595.

The '4094 only latches the data internally from its shift register into its output register on the falling edge of a clock pulse, when the strobe pin is high. Just making the strobe pin high by itself does nothing, I think.


The above diagram shows nothing happening on the rising or falling edge of the strobe signal. Everything happens on the falling edge of the clock signal.

The 595's RCK line does the same thing as strobe on the '4094, but does not need an accompanying clock edge to make it work. The rising edge of the RCK signal triggers the internal transfer by itself.

PaulRB:
The '4094 is a bit wierd. I would replace it with a 74hc595.

Unfortunately I need a CMOS chip because the shift register is going to be outputting onto a CMOS data bus, otherwise i would :slight_smile:

PaulRB:
The '4094 only latches the data internally from its shift register into its output register on the falling edge of a clock pulse, when the strobe pin is high. Just making the strobe pin high by itself does nothing, I think.

Hmm, so can I just leave strobe pin always high? Based on the truth table there's no reason that I can see that the strobe pin can't just always stay high. (I am going to be controlling the output with OE anyways)

74hct4094 isn't really CMOS anyway, if I understand these things correctly (which I'm not sure I do). It's a 7400 equivalent of a 4000 series CMOS. Logically the same as a 4000 series but electronically like a 7400 series chip.

If you make the strobe pin permanently high, the serial register contents will be transferred to the output register on every clock pulse, which defeats the purpose of having separate shift register and output register. Maybe you can make this work with the OE pin, you have not explained enough about your circuit to be sure.

PaulRB:
74hct4094 isn't really CMOS anyway, if I understand these things correctly (which I'm not sure I do). It's a 7400 equivalent of a 4000 series CMOS. Logically the same as a 4000 series but electronically like a 7400 series chip.

As far as i understand, the datasheet is for the CD54HC4094, CD74HC4094, and CD74HCT4094 chips, and the CD54HC4094 is electronically CMOS. (The datasheet's subtitle does say "High−Speed CMOS Logic 8−Stage Shift and Store Bus Register, Three−State" after all).

PaulRB:
If you make the strobe pin permanently high, the serial register contents will be transferred to the output register on every clock pulse, which defeats the purpose of having separate shift register and output register. Maybe you can make this work with the OE pin, you have not explained enough about your circuit to be sure.

Basically I have an arduino (AVR) a CPU (z80) and some RAM connected via a 24 bit address / data bus (8 bits data, 16 bits address). Occasionally, the AVR needs to control of the bus, accessing the RAM. Since 24 bits will require a lot of pins, I want to use SPI to shift the address bits into the shift register(s), whose parallel output will be connected to the address bits of the bus. Thus I don't really care about the STROBE, but I do care about when the shift register is and isn't outputting something to the bus.