When I was a senior in high school my friends were taking a computer science course. In the class they were learning to program an Arduino and using different IC as peripherals. One of the peripherals was the 74LS595 shift register. This shift register takes in serial data and outputs the data in parallel. I thought it was an interesting chip and decided to use it in a project. Looking online there were many examples of how to use the IC with a microcontroller but not many examples of humans interacting with the shift register. I wanted my project to be different and unique, so I designed my project around manually entering data into the shift register.
Requirements of the Project
For this project I wanted a simple design where a user could manually enter data into the shift register and see the data on its output. Also, the final product needed to be ergonomic. If it was too small, then the user would not be able to hold the PCB comfortably.
The first part of the design was to figure out what all of the pins on the shift register did. I turned to the datasheet to find out. For this project I determined that there were three control signals that the user would need to be able to control. The three control signals are data, clock, and latch. I used push buttons to let the user, interact with these control signals. To make the output of the shift register easy to see I used one LED per output bit.
Once I planned out how the circuit was going to be wired I created the circuit on a breadboard. When I first tested the project, it didn’t work. Even though the clock button would only get pressed once multiple bits would get clocked into the register. After researching the issue, I came to the conclusion that the issue was mechanical button bounce. Many sources used a low pass filter to solve the problem. I implemented a simple RC filter between the output of the button and the shift register’s clock pin. The other buttons did not need this filter because the button would have time to stabilize before the rising edge of the clock. This solved all of the problems and my circuit worked exactly as it should.
Figure: Shift register circuit on breadboard.
I wanted a permanent solution for my project. Using KiCAD I was able to make a schematic and route a PCB. Since this was the first PCB I created I used as many through hole components as possible. Once the board was routed I needed to get the board manufactured. I attempted to create my own PCB at home. Using a transparency and Hydrochloric Acid I was able to etch my design into a PCB blank. This method did not work well. There were traces that had discontinuities in them and drill holes where not aligned with pads. Because of the faulty traces I was left with a useless PCB. I sent my Gerber files to OSHpark to get the board professionally manufactured. The PCB I received looked great and had no manufacturing flaws. I populated my board and tested it out.
Figure: My homemade PCB. Components populated to test fit.
Figure: A render in KiCAD of the final PCB.
Figure: Completed PCB
Figure: The completed PCB with 01001001 sifted into the register
In the end this project worked exactly as I designed it to. I learned a lot about the 74LS595 shift register, mechanical button debounce, and PCB design. If I were to make a second revision I would add an input for an external clock source, add a switch so that every time data is entered into the shift register it would latch, and add an output so that multiple boards could be cascaded together.