Friday, September 30, 2022

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Shift Registers are very useful for expanding the controller I/O ports. However driving a dot matrix display, or multiple seven-segment display also need this kind of chip. Because only multiplexing could not achieve a good displaying task.

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Eight-Digit and Ten-Digit Serial Seven-Segment Display Using SN74HC595N

It's not important to make any DIY display like this. But I have many common-cathode type seven-segments display, SN74HC595N shift registers, copper clad board, etc. So I want to use them all rather than keep them new in my own repair shop.

The design was complicated due to multiple count of connection between register to register, and register to display. So I tried to eliminate some components especially the current cutting resistors.

The shift register chip output pin voltage is +5V while the display need around 2V to operate. Without using dozens of current cutting resistors, I reduce the voltage by making voltage division. I add 3 rectifier diodes in series with each common cathodes of the display to divide the voltage.

Eight-Digit Seven-Segment Display

For the first time I design, I was unwilling to do this task due to difficulty in PCB fabrication, and laser printing toner problem. Because the ink cartridge was old. So I only made an 8-digit display.

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Arduino Test Program

 I use Proteus 8.10 to design the schematic and PCB.

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Schematic Design
PCB contains a lot of wire connections due to a large amount of registers an displays. It seems to be a double side PCB, but I use jumper wire instead.
 

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

PCB View In Proteus

I previewed this design in 3D viewer. Most of components are lack of 3D packages.

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Design 3D View
I use toner transfer method to make this DIY PCB. Using sing any online PCB order cost around 10 US Dollars excluding shipping cost. However it is not necessary here.

 

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Component Side Label Transferring

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Copper Side After Etching

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Copper Side After Soldering

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Copper Side Before Etching
I spent one day to finish this DIY electronic hobby project.


Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Finished PCBA Assembling

It works well but the display doesn't have Dot Point.

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
I firstly test this PCBA With Arduino Program Due To Ease Of Use.

I store this design file in Github.

Arduino Test Program #1 Using SPI

#include <SPI.h>
 
 
void setup() {
  // put your setup code here, to run once:
  SPI.begin();
  pinMode(10,OUTPUT);
 
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 digitalWrite(10,LOW);
  SPI.transfer(0x3F);
  SPI.transfer(0x06);
  SPI.transfer(0x5B);
  SPI.transfer(0x4F);
  SPI.transfer(0x6D);
  SPI.transfer(0x7D);
  SPI.transfer(0x07);
  SPI.transfer(0x7F);
  digitalWrite(10,HIGH);
  delay(3000);
}

Arduino Test Program #2


#include <SPI.h>
 
unsigned char ssd[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
                      0x77,0x7C,0x39,0x5E,0x79,0x71};
 
unsigned char msg1[10]={0x08,0x08,0x76,0x79,0x38,0x38,0x5C,0x08,0x08,0x08};
void setup() {
  // put your setup code here, to run once:
  SPI.begin();
  pinMode(10,OUTPUT);
}
 
void loop() {
  // put your main code here, to run repeatedly:
  /*
 digitalWrite(10,LOW);
 
  for(int i=9;i>=0;i--)
    SPI.transfer(ssd[i]);
  digitalWrite(10,HIGH); 
  delay(5000);
 
  digitalWrite(10,LOW);
 
  for(int i=15;i>=10;i--)
    SPI.transfer(ssd[i]);
  digitalWrite(10,HIGH); 
  delay(5000);
  */

   for(int i=9;i>=0;i--){
   digitalWrite(10,LOW);
 
  SPI.transfer(msg1[i]);
  delay(1000);
  digitalWrite(10,HIGH); 
   }
}

Eight-Digit Seven-Segment Display

I add two more digits to previous design. The PCB design is  quit bigger.

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board

Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board


Making A DIY SN74HC595 Serial 10-Digit 7-Segment Display Board
Arduino Test Program

 Arduino Test Program for this PCBA

or #include <SPI.h>
 
unsigned char ssd[16]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x07,0x7F,0x6F,
                      0x77,0x7C,0x39,0x5E,0x79,0x71};
void setup() {
  // put your setup code here, to run once:
  SPI.begin();
  pinMode(10,OUTPUT);
 
 
}
 
void loop() {
  // put your main code here, to run repeatedly:
 digitalWrite(10,LOW);
 /*
  SPI.transfer(ssd[0]);
  SPI.transfer(ssd[1]);
 
  SPI.transfer(ssd[2]);
  SPI.transfer(ssd[3]);
 
  SPI.transfer(ssd[4]);
  SPI.transfer(ssd[5]);
 
  SPI.transfer(ssd[6]);
  SPI.transfer(ssd[7]);
 
  SPI.transfer(ssd[8]);
  SPI.transfer(ssd[9]);
  */

  for(int i=9;i>=0;i--)
    SPI.transfer(ssd[i]);
  digitalWrite(10,HIGH); 
  delay(5000);
 
  digitalWrite(10,LOW);
 
  for(int i=15;i>=10;i--)
    SPI.transfer(ssd[i]);
  digitalWrite(10,HIGH); 
  delay(5000);
}

Click here to download load this PCBA design file.