SparkFun Large Digit Driver

The SparkFun Large Digit Driver is a chainable controller backpack that can be soldered directly to the back of our large 6.5" 7-segment displays. Large numerical displays are a great addition to any project where you want to be able to see information at a distance. Scorekeepers and lap timers would be a great application for large 7-segment LED displays.

The SparkFun Large Digit Driver can easily be attached to the back of the 7-segment display by soldering all 10 castellations pins at the bottom of the board as well as the two additional castellations at the top. Keep in mind that the Large Digit Driver requires both 12V for the LEDs and 5V for the on-board TPIC6C596 IC. Each driver is equipped with six input pins and six output pins, these make the driver capable of being chained together. The input/output pins are listed as GND (Ground), LAT (Latch), CLK (Clock), SER (Serial), 5V (Power for the driver IC), and 12V (Power for the 7-segment display).

The Large Digit Driver has 8 inline 15 Ohm resistors to limit the current through each segment on the 6" display to 20mA (as dictated by the display datasheet). You will need approximately 160mA of current at 12V for each digit in your display.

We used the SparkFun Large Digit Driver in our AVC Battle-Bot Arena to display times and scores!

  • Designed to attach directly to the 6.5" 7-Segment Display
  • IC Operating Voltage: 5V
  • Sinks up to 250mA per channel
  • Chainable to another Large Digit Driver
  • Castellated Mounting Holes

SparkFun Large Digit Driver Product Help and Resources

Building a Safe Cracking Robot

March 29, 2017

How to crack an unknown safe in under an hour.

Large Digit Driver Hookup Guide

June 25, 2015

Getting started guide for the Large Digit display driver board. This tutorial explains how to solder the module (backpack) onto the back of the large 7-segment LED display and run example code from an Arduino.

Mind your voltage!

Take extra care to note the placement of the 5V and 12V pins. They are right next to each other, and we have seen instances where 12V was accidentally applied to the 5V line. This will not end well. It will usually wind up frying the microcontroller, resulting in a nonfunctioning board, and possibly tears.


Core Skill: Soldering

This skill defines how difficult the soldering is on a particular product. It might be a couple simple solder joints, or require special reflow tools.

3 Soldering

Skill Level: Competent - You will encounter surface mount components and basic SMD soldering techniques are required.
See all skill levels


Core Skill: Programming

If a board needs code or communicates somehow, you're going to need to know how to program or interface with it. The programming skill is all about communication and code.

2 Programming

Skill Level: Rookie - You will need a better fundamental understand of what code is, and how it works. You will be using beginner-level software and development tools like Arduino. You will be dealing directly with code, but numerous examples and libraries are available. Sensors or shields will communicate with serial or TTL.
See all skill levels


Core Skill: Electrical Prototyping

If it requires power, you need to know how much, what all the pins do, and how to hook it up. You may need to reference datasheets, schematics, and know the ins and outs of electronics.

2 Electrical Prototyping

Skill Level: Rookie - You may be required to know a bit more about the component, such as orientation, or how to hook it up, in addition to power requirements. You will need to understand polarized components.
See all skill levels


Customer Comments

  • Could 9 of these be chained together connected to some rather large LED seven segment displays? The displays would be 12v made with LED strip lights.

  • It is important to include the CLR line, especially for a clean start. It is also desirable that the power supply lines (12V, 5V, GND) are thicker since when placing more than 9 displays the current already exceeds 1A.

    In general it is good product.

  • I’m having a noise issue. I have 4 of these strung together with the large 7-seg displays and the segments will flash randomly during normal operation.

    I was at the Sparkfun factory last Friday and noticed that Nate’s safe-cracking robot’s sign had capacitors on each digit. I didn’t make a note to the size of each cap or where exactly they were placed but I’m thinking my noise problem will be solved with these caps.

    Could someone give me some guidance on adding caps to my large digit driver to minimize noise?

    Thanks, Jonathan

    • Hi Jonathan - Thanks for taking the tour!

      The display on the safe cracking robot is a bad example. When the motor changes direction quickly it (sucking up a few amps) pulls down the 12V power supply significantly, which causes the display to flash. The display doesn’t lose its memory, it just looks bad. I added caps in an effort to reduce blinking of the display but the caps didn’t end up helping (I didn’t have ones big enough). I was using 25V/1000uF caps placed across the 12V/GND pins.

      These displays can pull a fair amount of current. You might try adding more decoupling to your power supply but random flashing is weird, it will usually be associated with something going on in your system (such as motors turning or some piece pulling in a low of current). If you’re experiencing flashing either isolate your 12V supply or be sure your 12V supply has enough current to keep the 12V rail above 12V.

      • I gave up trying to control the LEDs directly with the Raspberry PI and added an Arduino Pro Mini in between. Everything works as expected now.

      • I’m looking at the datasheet and wondering if the source voltage and logic voltage should be the same; 3.3v?

      • Random flashing might not be the correct way to describe it; its more like the segments randomly change as if they are getting a signal to display something else.

        There is a motor but its completely separate running on 120 volts. There is however a beefcake relay turning the motor on and off. When the relay is switched the display changes.

        I’m controlling everything with a Raspberry Pi. Is it possible that the 3.3v GPIOs are the issue?

  • i cant work with nodemcu board (esp8266), any idea?

  • May I know if I want to make the exact same things with Lidar-lite v3, how much would be the maximum speed which it can detect, what about with Lidar-lite v2.

    • What a fun question to try to answer!

      The LIDAR-Lite v3 can achieve 500Hz with a max read range of 40m. If you were to cover roughly 38m in 1/500 of a second that would be 19,000m per second or 42,500 miles per hour.

      If you are building a copy of the speed trap there are other bottle necks to consider. Namely, the maximum read rate while running the Arduino sketch. The sketch is here and waits 50ms between reads. This is 20Hz. And for this discussion let’s say the LIDAR (v2) can read to about 15m reliably so using the same math we get 300m per second or 671 mph.

      I’m curious, what are you building?

      • Thank you very much for prompt reply, in fact my house is located in corner block where drivers turning from main road to our allay, I thought it might be a good idea if I show them their speed but not sure if legally I can do or not. anyway thank for consideration.

  • Just starting my first project with these and got 2 large 7-segment displays and the large digit drivers working with my Arduino Uno. Awesome tutorials SparkFun…thank you. So I’m making a small scoreboard for my sons room which I plan on also working as a clock while not in “scoreboard” mode. The numbers can be very bright when dark and I’d like to add a dimmer to this project. I’ve been playing with a potentiometer and PWM for with some simple LED dimming and got that working easily. How can I get the large 7-segment displays to dim with the large digit driver. Is this even possible? Thanks in advance for any guidance.

    • Awesome project idea!

      Hmm, dimming might be tricky. You could used a variable power supply and lower the 12V to say 10V. This should dim the LEDs quite a bit but I’m not sure how finicky the dim-ability will be.

      Maybe you could update the TPIC IC really to get PWM control of the segments. You’d need to move the postNumber routine to an interrupt that ran regularly and probably faster than 60Hz (so that your eye doesn’t notice it).

  • For anyone trying to create a simple arduino based countdown timer. Here’s the necessary function modified from the rest of the program provided in the tutorial.

    //Main Program Loop
        void loop()
            {
            countDownSeconds(5400);
            }
    //Create a seconds countdown timer -- time kept in total number of seconds.
        void countDownSeconds(int number){
            while(number!=0){
                showTime(number);
        Serial.println(number); //For debugging
        delay(1000);
        number--;
        }
    }
    
    //Take the raw number of seconds and divide it into seconds and minutes.\
    void showTime(float value)
    {
      int time;
      int number = abs(value); //Remove negative signs and any decimals
      int mm = number / 60; // hour timer
      int ss = number % 60; // minute timer
      Serial.print(mm);
      Serial.print(":");
      Serial.println(ss);
      time = mm*100+ss;
    
    //output to the display
      for (byte x = 0 ; x < 4 ; x++)
      {
        int remainder = time % 10;
        postNumber(remainder, false);
        time /= 10;
      }
    
      //Latch the current segment data
      digitalWrite(segmentLatch, LOW);
      digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
    }
    
  • These boards worked out great. So I updated my pace/walk clock design and code to use them and posted an intractable to help anyone do the same. http://www.instructables.com/id/100-Pace-Clock-or-Wall-Clock/

  • Help please! Trying to copy the GPS wall clock to the big LED 7-segs. I am having a tough time getting the basic display code to run out to 6 digits. I get to 5 but adding one more gets wrong results. Have 7 hours into this - (no big deal) but I’m missing something that I don’t think I’m going to solve. Thanks in advance for any pointers

    I removed the DP and other logic to simplify down the code and am only posting the relevant lines - have the setup{} and byte declare just as in both of the example programs here:

    // This code works but just for 5 digits
    int number = 23456;
    void loop() {
      showNumber(number);
    }
    void showNumber(float value) {
      int number = abs(value);
      for (byte x = 0 ; x < 5 ; x++) {
        int remainder = number % 10;
        postNumber(remainder);
        number /= 10;
      }
      digitalWrite(segmentLatch, LOW);
      digitalWrite(segmentLatch, HIGH);
    }    
    // ----------------
    // This code does not work - 
    // number = 023456 shows 010038
    // number = 888888 shows 028616
    int number = 023456;
    void loop() {
      showNumber(number);
     }
    void showNumber(float value) {
      int number = abs(value);
      for (byte x = 0 ; x < 6 ; x++) {
        int remainder = number % 10;
        postNumber(remainder);
        number /= 10;
      }
      digitalWrite(segmentLatch, LOW);
      digitalWrite(segmentLatch, HIGH);
    }
    
    • Ok, spent longer than it should have taken me, but finally figured out that the demo code had some ints in there, and once you get over 32,767 it’ll start to freak out. I’ve switched it to use longs and everything started working. Here’s the code that ended up doing the trick for me:

      /*
       Controlling large 7-segment displays
      
       Arduino pin mapping:
       5 -> LAT (Blue)
       6 -> CLK (Green on the 6-pin cable)
       7 -> SER on the IN side (Yellow)
      
       Power Arduino with 12V and connect to Vin -> 12V (Red)
       5V -> 5V (Orange)
       GND -> GND (Black)
      
      */
      
      //GPIO declarations
      //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
      byte segmentLatch = 5;
      byte segmentClock = 6;
      byte segmentData = 7;
      //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
      
      void setup()
      {
        Serial.begin(9600);
        Serial.println("Large Digit Driver Example");
      
        pinMode(segmentClock, OUTPUT);
        pinMode(segmentData, OUTPUT);
        pinMode(segmentLatch, OUTPUT);
      
        digitalWrite(segmentClock, LOW);
        digitalWrite(segmentData, LOW);
        digitalWrite(segmentLatch, LOW);
      }
      
      long number = 0;
      
      void loop()
      {
        long num_to_show = number * (long)111111;
        showNumber(num_to_show); //Test pattern
        number++;
        number %= 10; //Reset x after 9
      
        Serial.println(num_to_show); //For debugging
      
        delay(500);
      }
      
      //Takes a number and displays 5 numbers. Displays absolute value (no negatives)
      void showNumber(long number)
      {
        for (byte x = 0 ; x < 6 ; x++)
        {
          int remainder = number % 10;
      
          postNumber(remainder, x==3);
      
          number /= (long)10;
        }
      
        //Latch the current segment data
        digitalWrite(segmentLatch, LOW);
        digitalWrite(segmentLatch, HIGH); //Register moves storage register on the rising edge of RCK
      }
      
      //Given a number, or '-', shifts it out to the display
      void postNumber(byte number, boolean decimal)
      {
        //    -  A
        //   / / F/B
        //    -  G
        //   / / E/C
        //    -. D/DP
      
      #define a  1<<0
      #define b  1<<6
      #define c  1<<5
      #define d  1<<4
      #define e  1<<3
      #define f  1<<1
      #define g  1<<2
      #define dp 1<<7
      
        byte segments;
      
        switch (number)
        {
          case 1: segments = b | c; break;
          case 2: segments = a | b | d | e | g; break;
          case 3: segments = a | b | c | d | g; break;
          case 4: segments = f | g | b | c; break;
          case 5: segments = a | f | g | c | d; break;
          case 6: segments = a | f | g | e | c | d; break;
          case 7: segments = a | b | c; break;
          case 8: segments = a | b | c | d | e | f | g; break;
          case 9: segments = a | b | c | d | f | g; break;
          case 0: segments = a | b | c | d | e | f; break;
          case ' ': segments = 0; break;
          case 'c': segments = g | e | d; break;
          case '-': segments = g; break;
        }
      
        if (decimal) segments |= dp;
      
        //Clock these bits out to the drivers
        for (byte x = 0 ; x < 8 ; x++)
        {
          digitalWrite(segmentClock, LOW);
          digitalWrite(segmentData, segments & 1 << (7 - x));
          digitalWrite(segmentClock, HIGH); //Data transfers to the register on the rising edge of SRCK
        }
      }
      
      • While I would hate to deny you the fun I had figuring this out - here you go:

        https://github.com/bethanysciences/BIGLEDClock

        complete write-up and working code…

    • I’m running into a similar problem, I picked up six of these and have been testing adding them one at a time. I can get up to four with no problem (just cycling through all 1’s, all 2’s, etc), but once I add a 5th, the numbers will freak out once they get to the 3’s (and the same thing happens if I add the sixth digit).

      They do all reset back to 0’s once the loop hits the modulus limit, and I’ve tried adding delays before writing the latches, but nothing seems to be working. Anyone have any ideas?

  • Where can I get the link to the circuit for the Speed Trap? Will appreciate if you kindly post the link somewhere.

  • I would like to build a speed trap, Do you have a tutorial on how to build it with code etc. This is a great project

  • WARNING: before soldering, I’d strongly recommend putting a piece of tape on the back of this board to insulate the vias from the exposed copper traces on the 7 segment display.

    On my board, the via connected to pin 10 (RCK) on the shift register wasn’t fully covered by the solder mask and ended up bridging with the exposed 12V trace on the back of the 7 segment board. This caused a short from 12v to pin 10 (RCK) on the shift register, which made ~12V available on all the input pins as well as the 5V pin. I fried a couple Arduinos before I figured out what was happening. Seems like the shift register is fried too. Now that I’ve pulled it off the 7 segment board it’s no longer trying to supply 12V on all the input pins, but it doesn’t seem to do anything anymore.

    I’m going to order some new shift registers and try to salvage the board :(

    • Hi John - Really sorry to hear your board got fried :/ I wanted to point folks at the hookup guide - we do recommend a bit of electrical tape to isolate the backpack for this specific reason. Sorry you had a bad experience but I’m glad you found the culprit!

  • Really wish there was an RC network on the CLR\ pin to ensure the display is blank on power up. Otherwise, it works well.

  • This looks familiar…

    http://i.imgur.com/8pIqBmb.png

  • thanks Kirby

  • As well as the code, if you offer a parts list not unlike other demos I believe you would sell sell sell

  • Github link seems to be broken

  • Lol, nice video, that’s one way to get your employees blood flowing ;)

Customer Reviews

4.3 out of 5

Based on 3 ratings:

Currently viewing all customer reviews.

Won't work on power-up

This seems to be a workable driver chip for the large 7-segment displays. However, the enable pin is hard-wired, so most of the time when powering on the unit, all of the segments are lit. Also, when powering on, they appear to “lock up” the arduino until the reset button is pressed. I have tried adding delays of several seconds on on startup, and isolating the 5V supply (not using the arduino 5V out), but they still require a reset. Lastly, because this is just a basic shift register and doesn’t do PWM, the brightness of the segments varies depending on how many are lit at one time.

Hello!

Sorry to hear about the issues with getting the 7-segments working. Have you contacted our technical support department @ techsupport@sparkfun.com - they’re usually great at getting devices working.

Works great

I used six of these with the giant 7-segment displays to make a giant clock for a large meeting hall. They do exactly what they are supposed to do.