Arduino Scoreboard (upgrading)

I’ve got a digital scoreboard that I built about two years ago but I started having some trouble with it a few weeks ago. I finally decided that I think I need to start over with the circuit boards in the scoreboard panel itself. Right now I have four separate prototype boards (one for each digit) crammed in the scoreboard panel. They are all pretty messy and hard to troubleshoot. I’ve been reading up on how to get PCBs printed, and I think I want to give it a try. I drew up the circuit in KiCad. I’d sure appreciate it if some of the experts here could take a look at it. I’m sure I have broken a lot of rules regarding conventions and whatnot, and I am happy to get that feedback too. But I’m mostly anxious to hear if my circuit is sound.

This circuit will be in the scoreboard panel itself. It will connect to a box (via an ethernet cable) that will hold the battery, switches for adjusting the score, and the arduino. The panel will be sealed up and normally will not

be open to the environment (so it is possible I suppose that heat may be a problem???)

I realize that I may have bitten off a lot for my first KiCad project and printing a PCB project. But maybe not! After I get this done, I then I will work on the hat for the arduino.

Here’s a zip of the KiCad files:
https://drive.google.com/open?id=1ByS0i_qA38Barliget3nZiVQOa9AkNyS

Thanks in advance!

Skip

Arduino typically uses the term “Shield” for the board you are mentioning.

The first potential problem that I see is using an RJ45 connector with a single pin for LED drive current on all four displays.

1 Like

It appears LGND is not connected to any ground.

C1-C4 should be connected across VCC-LGND

Style wise, I find “spaghetti” drawings too hard to follow, I would use more labels, also redraw U1-U4 to follow a functional model rather than physical layout. There may be other errors lurking in there, it’s hard to tell.

4 Likes

I agree with @bobc here. Some more specific points I’d like to make. (These are all style, so pick and choose the ones you like.) I’m just going by the uploaded schematic image, I haven’t bothered to download your project.

  1. Use power symbols for connecting powers together. Grounds, power sources, etc. Since you have two grounds and powers, choose (or make) different power symbols for each unique ground and power. When modifying an existing power symbol to create a new, unique symbol don’t forget to change both the symbol name and the hidden pin name. (This hidden pin’s name is the name of the net it will connect to.)
  2. Put labels on the wires of your input connector, even if you run the connection with a wire (instead of logical connections with labels). This will make it easier to identify the signals when you are laying out the PCB.
  3. If it isn’t clear what @bobc meant with “redraw U1-U4 to follow a functional model”, he was advising to redraw the symbols to group pins together by function. Usually inputs on the left, outputs on the right, powers on top, grounds on bottom. In this case, you may want to make the functional symbol not have the open drain outputs in numeric order, but in the order that they will connect to the RJ connectors to your 7-segment displays. That way your schematic will have less clutter between your driver chip and the display connectors.
  4. You may want to reconsider the wiring colors for your connectors. If you use the wiring pinout of standard network patch cables, you can use (dirt cheap) pre-built cables and the documented wire colors will match reality, making troubleshooting easier.
  5. Because you have 4 identical circuits, this might be the perfect project to learn hierarchical schematics. On your top page create 4 sheet symbols, each pointing to the same schematic file. (This will be new schematic file. Don’t worry that it doesn’t yet exists, it will exist once you make some changes and save.) On the sheet put the LED driver chip, the display connector, and the logic bypass cap. That way if you want to make a change to your driver, you only need to change one sheet and the other 3 will automatically get updated. KiCad will take care of keeping track of which references are on each sheet and keep nets separated (except where you connect a net out of the sheet using a hierarchical label or global label). Power symbols are global labels, so the only hierarchical pins that you would need are serial-in, serial-out, serial-clock, and G. Unless I missed one or two. Hard to read your current spaghetti schematic. :slight_smile: I just noticed RCK will also need to pass via hierarchial sheets. I’m not familiar with the driver chip you are using, so I don’t know what the difference between SRCK and RCK is, but apparently you do since you have them wired individually to different Arduino pins. If you don’t understand what I mean, I can download your project and create the hierarchical sheet style schematic to show you. Note, I won’t give you the project files back, I’ll leave it to you as a learning exercise to build your own version of hierarchical sheets if that is the way you want to go. :wink:

Errors I noticed:

  1. In your wiring notes to the displays, your 7-segment layout wire colors don’t match the list below.
  2. As @bobc noted, you have the logic bypass caps (C1-C4) miswired.
3 Likes

Re 4. (the wire colors), You might want to check here https://en.wikipedia.org/wiki/TIA/EIA-568#Wiring

Regarding 1, 3, 5: This could be your building block for a single digit.


A more functional symbol is already in your TPIC.lib Part is TPIC6595
Note: The mapping of drainX to pinY of the RJ is as provided in OP

3 Likes

Thank you for showing this. I usually try to keep my wires orthogonal, but you show here a case for how angled wires can lead to a more readable schematic. I’ll keep this in mind for my future circuits.

Well, yes, I do prefer orthogonal wires too… But sometimes i’ll make an exception. :wink:

Wow! These are some great comments! Give me a few days and I will post an update.

I saw that symbol in the TPIC library, but it wasn’t the same (some of the pins are different) and in fact, some pins are missing (10, 11, 20). So I thought I would try and make my own. I already have a handful of TPIC61595NE chips, so I wanted to stay true to those.

I can definitely see that advantage of the functional symbol vs. the physical symbol that I was using.

I’d guess that the missing pins are PGND pins and just hidden but would get connected with the visible one. But, yes the pinout differs. I figured there are at least two variants of the chip:

That’s why…

@SkipMorrow while @Ronnie followed your existing connections, this was probably not necessary. The existing software likely already “maps” to the hardware to achieve the effect of displaying digits, however it is not a difficult task to change the software to the new hardware configuration.

One of the issues the OP has is that the part pin layout is a little weird. Not knowing the datasheet for the specific RJ45 part, this is the suggested connection paths to make the PcbNew layout more direct with fewer Vias.

Drain 3 to Pin 8
Drain 2 to Pin 7
Drain 1 to Pin 6
Drain 0 to Pin 5
Drain 7 to Pin 4
Drain 6 to Pin 3
Drain 5 to Pin 2
Drain 4 to Pin 1

Sometimes the physical PCB layout affects the schematic design.

If this is not clear enough, with what you have learned now; I may be able to spend the time for screen shots of the concept.

Always easy to say if you are not writing the software :smiley:

That seems to be a completely pointless goal.

Already done it twice; pretty simple.

Vias take up space and there can become DRC clearance issues for small boards on the different Fab Layers; yeah, I’ve only been bitten by this a couple of times.

You are not writing the OPs software are you? Since it is completely pointless changing the hardware, it’s also pointless changing the software. But I understand some people like to make work for themselves and others.

Hence, always easy to say if you are not writing the software :smiley:

@bobc With the 595 series shift register, and any seven segment display, the data bits programmed to be sent are only based upon a couple of conditions.

  1. Whether or not the display is common Anode or common Cathode.
  2. The physical configuration of the 595 “output pins”.
  3. The display “pin number” to conventional segment letter.

For a “zero” to be displayed, with an eight LED 7 Segment display(single decimal/dot), 6 different outputs need to be “enabled” (this could mean “active LOW”),

If Digit = 0 then,
byte = “10000010”

If Digit = 0 then,
byte = “01000010”

That is pretty simple to do, compared to trying to route traces in PcbNew around all the other pins. This is one example of where it is better to do it first in hardware, then complete it in software.

1 Like

As it turns out, I did write the arduino software and I can easily change the mapping for the digits with a single line of code. I just have to figure out the pattern for each digit and done. In fact, once I saw the benefit of the functional diagram, last night I redid the schematic and I have all of my wires going straight across.

@Sprig, why is your layout “recommended”? Is it related noise or something like that in the cat5 or inside the RJ45?

Just to put this project in perspective, this is a portable scoreboard, about 2 feet wide by 18 inches tall, powered by a LiPo. I use it for ultimate frisbee. I prop it up on a plastic storage container that has the buttons and holds the arduino and battery. The digit segments are LED strips about 8 inches long.

He was suggesting a different layout because of the relation of the physical pins of the driver chip to the physical pins of the connector. Routing (and later troubleshooting) the board may be easier if the traces between the driver pins and the connector pins are straight runs w/o having to jump back and forth between layers.

I haven’t looked into his suggest pin mapping to see if it makes sense, but give it a try if you want. You’ll need to update your bitmap table for the segments, but that can be easily solved in software with an array lookup table: (in Arduino flavor of C++)

byte digit[10];
digit[0] = <bit array for digit "zero">;
digit[1] = <bit array for digit "one">;
digit[2] = <bit array for digit "two">;
etc...

Or if you have the need and/or memory for it, map as much of the ASCII data set as you need in a 128 byte array (or 256 if you need the extended bits) and reference the array with the actual characters. For example for characters 0, 1, 2, and A: (Again in Arduinoized C++)

byte digit[128];
digit[0x30] = <bit array for digit "zero">;
digit[0x31] = <bit array for digit "one">;
digit[0x32] = <bit array for digit "two">;
digit[0x41] = <bit array for letter "A">;

Though this full mapping seems wasteful for 7-segment displays… I’m just showing it to show that there are many ways to skin this particular cat.

3 Likes

Let me change the order of my prior post:
Drain 0 to Pin 5
Drain 1 to Pin 6
Drain 2 to Pin 7
Drain 3 to Pin 8
Drain 4 to Pin 1
Drain 5 to Pin 2
Drain 6 to Pin 3
Drain 7 to Pin 4

@SkipMorrow The above is recommended IF the RJ45 connector pins are all in a row (no datasheet has been provided). When you go to layout the reason should become obvious.

I would leave the 595 symbol as currently shown (regarding the outputs). This is a very good example of how a schematic should be easily electrically readable. Just as the pin numbers of the 595 are not in order, but the function of outputs are in order; having the pin numbers out of order on the RJ45 would not detract from the readability of the schematic.

If I were being thorough, I’d also edit/(create a new one specifically for this project) the RJ45 to include the text for each corresponding segment label. If, perhaps, pin 5 were segment “A” then that label would also be in the schematic symbol. The reason for this recommendation is that not all 7-segment displays use the same pins for the same segments; though the segment labels seem to be fairly standard. The information is included in the text of the schematic, but it is quicker to troubleshoot if the label information is in the symbol.

AFAIK, based on Skip’s past message, his 7-segment displays are hand crafted by him using lengths of LED strips for each element. In my imagination I suspect it is similar in construction to what John Park does in this tutorial but with using dumb LEDs:

Thus Skip has full control over which pin goes to which segment.

That said, I agree that documentation right at the schematic symbols in addition to his text notes would make troubleshooting easier, but I’d contend for using net labels instead of changing the connector symbol. The reason why I make that argument is then the nets will be labeled in PCBNew for board layout.

1 Like