cascading shift registers to drive 7-segment displays with PC input

  
Inside:
Repository
Four 595s together to drive 7-segment displays and alsoadded code to acceptinput from the PC. Instead of using 10-LED bar graphs like I did last time, I`ve moved on to 7-segment displays - which are more challenging and provide a more meaningful output. The 7-segment displays I have are common-cathode, wired as shown below: The code to illuminate decimal digits on a
cascading shift registers to drive 7-segment displays with PC input - schematic

7-segment display is pretty straightforward. I assigned each of the 7 segment-pins on the display to an output on the 595, from QA through QG (see the circuit diagram below). Each pin from QA to QG is assigned a binary valueof 2 pin#, so figuring out which pins to make high to produce each decimal digit is just a matter of adding together the binary values representing each pin necessary to light up the right segments. You can see this array being initialized in the setup() function. I`ve also moved to a proper coding style, with g_ prefixing each global variable to distinguish them from local variables inside functions and methods. It`s a good practice to define unchanging variables as const to allow the compiler to optimize the code around them - this also prevents mistakes where the code accidentally tries to change the value - the compiler won`t allow it as the variable is effectively read-only and a difficult-to-debug bug is avoided. To daisy-chain 595s together is really simple - connect the serial output (pin 9) of the `lowest` 595 to the serial input (pin 14) of the next one in the chain, and connect all the latch (pin 12) and clock (pin 11) inputs together. When the first 595 accepts a new bit, the highest bit in the register will be pushed out of it`s serial line as input to the next 595 in the chain. Enough bits must be pushed to fill all the 595s with new data correctly. In the previous post I only had a single...



Leave Comment

characters left:

New Circuits

.