How to Use a 74HC595 Shift Register With a AVR ATtiny13





Introduction: How to Use a 74HC595 Shift Register With a AVR ATtiny13

If you have been playing with microcontrollers and electronics then you have likely seen LED dot matrix displays and other projects that use shift registers like 7-segment displays and more. This instructable goes over a quick intro to the 74HC595 8-Bit Serail to Parallel Shift Register with Latch and how to interface it to an AVR ATtiny13 to flash some LEDs.

What you need:
1 - Breadboard
1 - Power Source - 7805 or some other 5v source
1 - ATtiny13 and a way to program it ( I'm using the AVRISP mkII with AVRStudio 4.17 w/ WinAVR)
1 - 74HC595 Shift Register
1 - 100uF cap
1 - 0.1uF cap
1 - 10K resistor
8 - LEDs
8 - 470ohm resistors
~15 - hookup wires

What is a Shift Register?

Serial to Parallel Shift Registers are ICs that allow "serial" data to be clocked in on 1 pin and stack up in a register which is output on 8 parallel pins (in the case of a 8-bit shift register). As data is clocked in, it shifts all the other bits over one position with the end one falling off. Common shift registers are 74HC164 and 74HC595.
There's a couple of good online tutorials about these with animations.

The 595 has another feature which is cool. It's called a latch. It allows the outputs to show the current bits which have been latched in the Latch Register while new data is shifted into the Shift Register. Then toggle the latch pin and the new data is copied into the Latch Register.

Here's a link to the 74HC595 Datasheet:

Check Out a Youtube Video of the Circuit in Action

Step 1: Get Familiar With the 595

The 74HC595 is a pretty cool little package. We are going to hook it up to shift in a pattern of leds

The pin out  goes like this:

Pin 1 - Output B - source for LED (+)
Pin 2 - Output C - source for LED (+)
Pin 3 - Output D - source for LED (+)
Pin 4 - Output E - source for LED (+)
Pin 5 - Output F - source for LED (+)
Pin 6 - Output G - source for LED (+)
Pin 7 - Output H - source for LED (+)
Pin 8 - GND
Pin 9 - Serial Output - Carries Value from Output H to Data Pin (pin 14) of another 74HC595 to create a chain of SR's.
Pin 10 - Shift Register RESET -  Active LOW clears data in Shift Register, Latch Register is no affected.
Pin 11 - Shift Clock - LOW to HI transition shifts in data (0 or 1) from the Data Pin (pin 14). This can be toggled very fast in applications where you want a fast refresh rate like displays. I think you can toggle it on the order of 1000Hz +
Pin 12 - Latch Clock - LOW to HI transition latches the SR data to the outputs - The latch in our case will be triggered after every 8th bit is shifted in.
Pin 13 - Output Enable - Active LOW - Allows data in the Latch Register to show on the display. Typically this will be kept low, so you could just hard-wire it, but I have the AVR setup to control it.
Pin 14 - Serial Data In (Data Pin) - Don't be scared by the word "serial". It just means digital 1 or 0 on a single pin. This is where the AVR will feed in the bits
Pin 15 - Output A - source for LED (+)  - It's a weird spot for it but it works
Pin 16 - VCC 2.0-7.0 VDC

Step 2: Hook It Up on the Breadboard

Setting up the Circuit is pretty simple. It will take you about 10 minutes.

Place the ATiny13 and the 74HC595 near each other.
Hook up VCC and GND on both.
Put the 10K resistor from the ATtiny13 RESET pin to VCC
Put the LEDs in a row with the 470ohm resistors on the LED cathodes to GND.
Run Hook up wires from the LED anodes to the 595 outputs in order A-H.

Here's the important part:
Connect the ATtiny13 to the 74HC595 like this:
PB0 to Data Pin (pin14)
PB1 to Output Enable (pin13)
PB2 to Latch Clock (pin12)
PB3 to Shift Clock (pin11)
PB4 to Reset (pin10)

Also connect the Data Output (pin9) to GND since we aren't using it.

Take alook at the provided schematic. It's not beautiful but it will get the point across better than words.

The power supply shown in the schematic is pretty standard. You probably already have it setup. Just put the 100uF and 0.1uF caps across VCC to GND to smooth out any ripples.

Once you have it boarded up, hook up your programmer and go the the next step.

Step 3: Review the Code and Program Your AVR

The ATtiny13 is a small MCU (8 pin), but you can increase it's outputs using a Shift Register like we are going to do.

The program I wrote is relatively simple, but it have some nice features which may make the code look more complicated but read through it and you should be OK.

I'm not going to go over the code here because I made sure there are good comments for each line of code.

The code is written in C using AVRStudio4.17 with WinAVR 20090313 GCC C-compiler.
If you are using another compiler like IAR, Codevision, AVRdude, etc you can probably adapt the code or atleast review it and learn something.

The programming may not be the most efficient, but it works for this demonstration.

Download the ZIP file for: source code, schematic, and picture

Please post comment and questions and I will do my best to answer them.

Thanks for looking. Check out my other AVR Instructables.



  • Science of Cooking

    Science of Cooking
  • Pocket-Sized Contest

    Pocket-Sized Contest
  • Spotless Contest

    Spotless Contest

We have a be nice policy.
Please be positive and constructive.




Pls can 74HC595 shift register be replaced by CD4094BE in 30 by 6 led matrix or what is the equivalent for 74HC595 in the above project

what is the total amount of current that the 595 shift register can sink and source?

Thanks for the question. The 595 is able to source or sink 20mA on each output, however the catch is that the total current for the chip is 70mA, so you have to consider that. Alot of guys get away with running dot matrix leds and stuff directly off the 595 because they are multiplexing and the average current works out to be be less than the max. I think the 595 has some internal over-current protection on the outputs too.

There's a good discussion about this at this link:

I hope this helps. Thanks

thanks. it helped a lot...

i know it is a long time ago, but someone else might be helped by this if he/she is looking for answers: If more current is needed, one can always call in for a ULN2803, or an 8 gate ic

Where can I download the code?

Download the package at the end of Step 3.

My Bad! I just plugged in another SN74HC595N and now I see led8 blink too.
Just a bad pin.

I use an ATTINY85 and a SN74HC595N with the exact wiring and example code.
When running
I put a delay in the loop of option 1 and only see the leds 1 to 7 blink but not led 8.

Can't figure out what I'm doing wrong.

hi my friend first thank you a lot
but my compiler is Basic may be you can tech-me how i can write program
by basic