roblems & Objectives

A lot of Dev Boards like Arduino, STM, ChipKit etc (Even micro computers like Raspberry Pi) has a limited number of Digital input and output pins, which is a serious problem for the makers while creating them projects, especially when the Dev Board should be connected to an important number of peripheric (Exemple: the 5x5x5 LED Cube where you need to control more than 100 LED). Our goal is to satisfy the users desires by making a Hardware and Software solution to add more Digital I/O pins to your Dev Boards.

The solution

The IOExtension module is based on four shift registers (74HC595) to provide 16 Digital Inputs and 16 Digital Outputs, you will need only four pins in your Dev Board to control the module, plus the Vcc and the Gnd pins.

The use of this module is so handy because the MEGA DAS community developed an Arduino software library to grant you using the module with a minimum code instructions.

About the main component (74HC595)

The Hardware part is so simple and based on the 74HC595 shift register, it is an easy and inexpensive way to increase the number of digital I/O pins on your Dev board. This integrated circuit is inherently digital, like the digital pins on the Arduino it means that they can only read or write HIGH or LOW logic levels, they should not be used to read data from analog sensors or potentiometers.

We can find a lot of hardware and circuits based on this kind of shift registers like theAdafruit motor shield, 7 segment module. The use of this circuit is so handy and a great hands-on approach of the multiplexing an efficient technique for controlling many components wired together.

you can order 5 pics of 74HC595 online for less than 6$ Amazon order link.

So how to use the 74HC595!!

The circuit provides three interfacing pins which are the SHIFT_CLOCK (SH_CP), the LATCH_CLOCK (ST_CP) and the Data pin (DS).


The first step consist on storing the data in the storage register and to do so we need set latch pin to LOW to disable the outputs, this way the output pins won't change as we are sending in new data to the 74HC595.
The next step is sending the data bit by bit serially, by pulsing the clock pin and sending each byte of new data out the data pin.
The last step is setting the latch pin high. This way the register will update the (parallel outputs).
You can find more details about this integrated circuit in its Datasheet.
I’m just explaining how the shift register operates but, we’ll not do all this work because we gonna use the Arduino SPI library to control the whole thing and don’t forget that you will have a library to control the module, just a last information about the shift register it has 8 parallel outputs (Q0-Q7) and one serial output (Q7') for cascading.

The Hardware design (The circuit)

The IOExtension module is based on four shift registers (74HC595) to provide 16 Digital Inputs and 16 Digital Outputs, you will need only four pins in your Dev Board to control the module, plus the Vcc and the Gnd pins.

In order to have 32 I/O pins we will use four shift registers (74HC595) as showed in the schematic. The four registers should have a synchronised Data and update the all outputs and the inputs at the same time, this is why we should connect all the LATCH_CLOCK pins together and all the SHIFT_CLOCK too, but the Data pin of your first register will be connected to you Arduino board and the rest of registers will be connected to each other through the serial output (Q7') that means connect the serial output of your first shift register to the data pin of the next shift register and so.

I highly recommend the easyEDA website to make your PCB.

BUT What is the easyEDA!

It's a free online Electronic design automation community that allows the creation, testing and editing of schematics and PCBs.

Find the link to the easyEDA platform here.

This online program is supported in all platforms even android, with easyEDA you can make a Schematic Capture for your documents, Circuit Simulation, Online PCB Designing with the ability of importing PCB and Schematic files, so from this point we can understand that we can create the PCB in this online designer or just make it with another software and upload a gerber file to easyEDA to place an order.

The collaborative designing is the best part of easyEDA where you can collaborate and comment on designs easily with public or private access. The community came with a Perfect Cloud Development and this is not all of it we still have this great google chrome extension to keep you updated with all your chat mates and partners activities.

After the login start a new project give it a name and select its privacy, don’t forget that a short description is always good for your partners, then the auto assistance will guide you to start with the options and tools. In this project we will make the circuit showed in the picture above. There are some unavailable components in easyEDA libs like the 74hc595 shift register so you should search for it in other public project, just write the label and click on search and when you find it, select it then place it in the blank sheet but you need the package representation to complete your PCB design so click in the blank space of the package and update it.

After complete the schematic you can download a pretty PDF or image of it for your documents. About the PCB, click on convert project to PCB an you will get the appropriate PCB for your circuit, what I really liked in this platform that it range the components for you so can place them the way you want. The easyEDA solve the problem of manually routing and gives you the ability to make an auto router just over one click.

After finishing the rout you can add some options like images to improve the appearance and some indicator labels then click the fabrication output button if you want to place an order for your PCB. Our module costs less than 30$ for 5 pics, it's a good price for purchasing.

PCB Well recieved

Just 6 days and I got my order delivered and I was really impressed by the quality of the PCB that easyEDA community made, I didn't expect anything less from such talented makers.

The software (The library)

The IOExtension Library was developed by MEGA DAS community in order to facilitate the use of the Digital Extension module (Based on 74HC595 shift regisrters) made by the same community.

This is a Github link to download the library.

This library contain all the necessery APIs that can be used in your code written in the Arduino IDE for sure after adding this library to your libreries directory. The package contain also the exemples file where you can find some basic exemples to demonstrate how to wire the module to your Board and how to exploit the APIs like the DigitalRead and DigitalWrite exemples that shows the same behavior as the Arduino digitalRead and digitalWrite APIs.

Make some tests

After testing the module and following the wirring discription above we got a satisfying results and we can use our new GPIO pins with no problems.

Don't forget to share this project to support MEGA DAS cimmunity and tell us through a comment if there is anything you want to now.