The colon is a decimal point
There is no colon register. Each clock panel wires its colon to the decimal-point line of its second digit, so on the assembled eight the colons are digits 1 and 5 — and on the other six digits the point bit lights nothing at all.
Bit 7, digit by digit
lc.setDigit(0, 1, value, true) lights it, and the “value” part is unaffected: the digit still shows its number.Step the point bit along the eight digits with colon panels fitted, then switch to decimal panels and do it again. Two of the eight positions do something on a clock panel; all eight do on a decimal one.
The reason is that there is no colon register and no colon pin. The MAX7219 has eight segment outputs per digit — seven bars and a point — and that is all it has. So a colon panel takes the point line of its second digit and wires the two colon LEDs to it instead of to a dot.
Each panel is four digits with one colon. Assembled, the left panel's colon is the point of digit 1 and the right panel's is the point of digit 5.
What that gives you
lc.setDigit(0, 0, 0, false);
lc.setDigit(0, 1, 8, true); // shows 8, and lights the left colon
lc.setDigit(0, 2, 3, false);
lc.setDigit(0, 3, 0, false); // 08:30The point argument and the value argument are independent. Digit 1 shows its 8 whether the colon is lit or not, so blinking the colon once a second costs one register write and does not touch the number.
And what it takes away
Six of the eight digits have a point bit that lights nothing.
That is not a fault and there is no error — the byte is valid, the chip drives its segment output, and there is no LED on the other end of it. If you set the point on digit 3 expecting a decimal point and got silence, this is why, and no change to the sketch will fix it. That half of the display needs a decimal-point panel.
Which is the real reason the two panel styles exist as separate products rather than one panel with both. There are eight segment lines and the eighth is either the points or the colon. Never both.
Verifying it on your own display
The mapping above is what the panels in this kit do, and it is worth knowing how to check it rather than trusting it, because a panel bought elsewhere may differ.
Set every digit to 8, then walk the point bit from 0 to 7 with a second between each, and watch what lights. On a colon pair you will see the left colon at 1 and the right colon at 5 and nothing at the other six. That is the whole test, and it takes about ten seconds:
for (int d = 0; d < 8; d++) {
for (int i = 0; i < 8; i++) lc.setDigit(0, i, 8, i == d);
delay(1000);
}The demo sketch in the Segment-Display repository records the result of that scan as a comment, which is where the digits 1 and 5 in this article come from — that, and the product photograph of it running, where the two colons are lit and no decimal point is.
When it does not work
Three causes in order. The panel is a decimal-point one and has no colon at all. Or the point bit is on the wrong digit — it is digits 1 and 5, counting from the left, not 0 and 4. Or you are on the digit-panel half of a mixed display, where the point appears as a point.
Correct behaviour on a colon panel. That panel spends its point line on the colon, so digits 0, 2 and 3 have no separator to light and setting their bit does nothing — no error, no dot. If you want a decimal point there, that half needs a decimal panel.
It should not have. The point is bit 7 and the character is the low four bits, and they are independent — lc.setDigit(0, 1, 8, true) shows an 8 and lights the colon. If the digit changed, check you are not sending 0x80 as the value instead of as the point.
Yes. They are two separate point bits on two separate digits, so digit 1's colon and digit 5's colon are entirely unrelated. Blinking one and holding the other steady is two ordinary register writes.
Then it is a mixed build, and that is a supported one — the driver board does not care. Digits 0 to 3 behave as whichever panel is on the left and digits 4 to 7 as whichever is on the right. Keep track of which is which; nothing in software can tell you.
An ESP32, a time server and the eight digits — including where the seconds actually fit.
A clock in a tube →Edit this page — content/books/max7219-tube-clock/the-colon-is-a-decimal-point.mdx
Questions about this product
See what other owners have asked, and read their solutions.
MAX7219 Vintage Tube LED Clock Kit
Loading discussions…
Discuss this article
Ask about this page. The answer stays here, on the page it belongs to, for whoever hits the same wall next.