8 LEDs on 74HCT4094

Folks,
I'm controlling 8 LEDs each drawing 20mA through a 74HCT4094 shift register.

According to the data-sheet of the *4094 25mA per pin are fine, but the total load shouldn't exceed 70mA!!!!!
I'm drawing 160mA, the system runs for already 2 Months and the shift registers still work and don't even get hot nor warm!!!

Do you have similar experience?

So i can omit using an ULN2803 or similar device?

The specs don't mean it's going to burn-up instantly if you go to 71mA. But if it does, you've exceeded the specs and you can't complain. I'd say twice the rated current is "pushing it", but who knows... It may last forever.

The manufacturer is confident the part will be reliable at 70mA or less. But, there are manufacturing variations. Some parts may fail just slightly over that, and some may handle more current "forever".

An analogy would be a bolt rated to hold 100Lbs. It should hold 100Lbs, and some may fail at 101Lbs and others may fail at 300Lbs. But if you're building a bridge, you'd want to leave some safety margin and maybe put no more than a 50Lb load on the bolt.

So the question is, How critical is the application? Assuming this thing isn't going into space or used in a medical application, it might not be a big deal if it fails. I also wouldn't recommend going into production and selling things that exceed design specs.

So i can omit using an ULN2803 or similar device?

You can continue to take a risk (I think it's a small risk, especially since the part is not getting hot), you can add a driver, or you can reduce the current.

Is the part in a socket or on a breadboard, so it's easy to change? You might want to just keep a couple extra on hand in case it fries...

Peculiar choice of component! Why for example, the "HCT" version?

The component you should be using is a TPIC6B595, probably more available than a 74HCT4094. This is completely rated for the job you have.

Please do not even think of using the obsolete ULN2x03 series.

The ULN2803 pin out is better though :slight_smile: But why would anyone replace a shift register with a 8 channel
driver in the first place, they are different functions.

MarkT:
The ULN2803 pin out is better though :slight_smile: But why would anyone replace a shift register with a 8 channel
driver in the first place, they are different functions.

i dont't want to replace, but add the driver to the shift register to enable controlling "high"-power loads :wink:

TPIC6B595 is what i was looking for!!! thank you !!! :))

the HCT4094 series requires additional parts to be operated, like:

  • 100nF between GND and VCC
  • pulldown on strobe / data / clock
  • strobe / data / clock via 10nF to GND

without those guys it resulted in random outputs.

How do you stabilize the TPIC6B595 ?

TobiasCrackz:
the HCT4094 series requires additional parts to be operated, like:

  • 100nF between GND and VCC
  • pulldown on strobe / data / clock
  • strobe / data / clock via 10nF to GND

without those guys it resulted in random outputs.

That's because you connect a TTL (compatible) device to a CMOS device.

Atmel328
Output low (Vol): <= 1.0V
Output high (Voh): >= 4.1V

74HCT devices
Input low (Vil): <= 0.8V
Input high (Vih): >= 2.0V

So what happens if the Atmel places a '0' on an output? Worse case it outputs 1V. This is higher than the
maximum Vil and smaller than the Vih of the HCT4094 so 'it has no idea what it is'. Would you have used the HC4094 (if it exists), no special precautions would have been needed

74HC devices
Input low (Vil): <= 1.35V
Input high (Vih): >= 2.4V

So read the datasheets and you can check if special precautions are required.

Note: I could not find datasheets for the 74xxx4094 easily, so took the data of the 74HCT00 and 74HC00 (same family of devices; HCT and HC).

sterretje:
So what happens if the Atmel places a '0' on an output? Worse case it outputs 1V.

No it doesn't. You are feeding a CMOS device, almost infinite input resistance. 0 V is what you get. Levels are not the problem.

sterretje:
Note: I could not find datasheets for the 74xxx4094 easily,

Try Google.

First search result.

100nF between GND and VCC

Is needed on all external ICs, not fitting them is not an option.

okay, any other device besides 100nF between VCC/GND required to operate a cascade of five TPIC6B595 with an atmel 328 ?

10nF to GND and pulldown on DATA/STROBE/CLOCK not required?!?

TobiasCrackz:
10nF to GND and pulldown on DATA/STROBE/CLOCK not required?!?

Right. Not even recommended.

Not even recommended for a HCT4094 .

"How do you stabilize the TPIC6B595 ?"
Only a 100nf/0.1uf Cap from VCC to Gnd is needed. MSCLR to VCC. OE/ to Gnd, or to a PWM output for brightness control. Nothing else.
This board I offer for instance has 12 TPIC6B595 daisychained and controlled by SPI.transfer from the 328P in the lower left (so board is like an Uno with offboard USB/Serial adapter). Nothing but 0.1uF caps on the VCC pins.
http://www.crossroadsfencing.com/BobuinoRev17/

Decoupling is on the supply to keep it stable against change. Signals must be allowed to
change (rapidly) or you may get false triggering on the receiving end (unless schmitt-trigger inputs).

You can use the combination of an RC low pass filter and a schmitt-trigger input to protect a
low-bandwidth signal from noise pickup, but clock to a shift register is a fast signal and must be
prevented from multiple triggering. Standard logic inputs will undergo multiple transitions given
a slowly varying input voltage. Remember slow here means slow compared to a few nanoseconds
(ie a microsecond or more).

Putting 10nF load on a logic output will overload it. At high frequencies this will cook the pad
driver on the chip.

"Note: I could not find datasheets for the 74xxx4094 easily, so took the data of the 74HCT00 and 74HC00 (same family of devices; HCT and HC)." A search for 4094 brings up several families:
Next time try www.digikey.com
http://www.digikey.com/product-search/en/integrated-circuits-ics/logic-shift-registers/2556326?k=4094

@crossroads: wow, looks great :))

SRCLR via 10k pull-up to VCC or directly?

just to make sure: DATA equals SER IN
CLOCK equals RCK
STROBE (send data from shift register to output pins on rising edge) equals SRCK ?

i will connect G to a PWM pin so that i can control brightness.

SRCLR to VCC directly.
If using shiftOut() :

digitalWrite (latchPin, LOW); // connect to strobe (RCLK on 74HC595 for comparison)
shiftOut (dataPin, clockPin, MSBFIRST, dataByte);  // dataPin to Serial In, clockPin to SRCLK
digitalWrite (latchPin, HIGH);

If using SPI.transfer :

digitalWrite (ssPin, LOW); // connect SS (D10) strobe (RCLK on 74HC595 for comparison)
SPI,transfer(dataByte);  // MOSI (D11) to Serial In, SCK (D13) to SRCLK
digitalWrite (latchPin, HIGH);

I always use SPI.transfer. Default settings (no code change needed) are MSBFIRST, clock speed of 4 MHz. Mode 0 (SCK sits low when not active). I set SPI clock divisor to 2 for really fast transfers (8 MHz clock, fastest available).

MarkT:
Decoupling is on the supply to keep it stable against change. Signals must be allowed to
change (rapidly) or you may get false triggering on the receiving end (unless schmitt-trigger inputs).

You can use the combination of an RC low pass filter and a schmitt-trigger input to protect a
low-bandwidth signal from noise pickup, but clock to a shift register is a fast signal and must be
prevented from multiple triggering. Standard logic inputs will undergo multiple transitions given
a slowly varying input voltage. Remember slow here means slow compared to a few nanoseconds
(ie a microsecond or more).

Putting 10nF load on a logic output will overload it. At high frequencies this will cook the pad
driver on the chip.

okay, i think thats the reason why sometimes -when using 10 nF on each STROBE/DATA/CLOCK- some LEDs are switched on (always the same ones by the way) although they are not supposed to be on (?).

CrossRoads:
SRCLR to VCC directly.
If using shiftOut() :

digitalWrite (latchPin, LOW); // connect to strobe (RCLK on 74HC595 for comparison)

shiftOut (dataPin, clockPin, MSBFIRST, dataByte);  // dataPin to Serial In, clockPin to SRCLK
digitalWrite (latchPin, HIGH);



If using SPI.transfer :


digitalWrite (ssPin, LOW); // connect SS (D10) strobe (RCLK on 74HC595 for comparison)
SPI,transfer(dataByte);  // MOSI (D11) to Serial In, SCK (D13) to SRCLK
digitalWrite (latchPin, HIGH);



I always use SPI.transfer. Default settings (no code change needed) are MSBFIRST, clock speed of 4 MHz. Mode 0 (SCK sits low when not active). I set SPI clock divisor to 2 for really fast transfers (8 MHz clock, fastest available).

thank you!!!! so i mixed up RCLK with SRCLK.

RCLK is equal to STROBE

SRCLK is equal to CLOCK

this would be the final layout. Do you see any conflicts, or should this work fine?

What is R4 on DCFLED driving? 50 ohms is too low to drive anything low impedance, it will exceed the max current output of the 328.

it drives a 4V LED. so 50 ohms is ok.