Over on Hackaday.io, [danjovic] presents clOCkTAL, a simple LED clock for those of us who struggle with the very concept of making it easy to read the time. Move aside binary clocks, you’re easy, let’s talk binary coded octal. Yes, it is a thing. We’ll leave it to [danjovic] to describe how to read the time from it:
Do not try to do the math using 6 bits. The trick to read this clock is to read every 3-bit digit in binary and multiply the MSBs by 8 before summing to the LSBs.
Simple. If you’re awake enough, that is. Anyway, we’re a big fan of the stripped-down raw build method using perf board, and scrap wood. No details hidden here. The circuit is straightforward, being based on a minimal configuration needed to drive the PIC16F688 and a handful of LEDs arranged in a 3×4 matrix.
An interesting detail is the use of Bresenham’s Algorithm to derive the one event-per-second needed to keep track of time. And no, this isn’t the more famous Bresenham’s line algorithm you may be more familiar with, it’s much simpler, but does work on the same principle of replacing expensive arithmetic division operations with incremental errors. The original Bresenham’s Algorithm was devised for using with X-Y plotters, which had limited resolution, and was intended to allow movements that were in an imperfect ratio to that resolution. It was developed into a method for approximating lines, then extended to cover circles, ellipses and other types of drawables.
Bresenham’s Algorithm allows you to create the event you want, with any period from any oscillator frequency, and this is very useful indeed. Now obviously you don’t get something for nothing, and the downside is periodic jitter, but at least it is deterministic. The way it works is to alternate the period being counted between two power-of-two division ratios (or something easily created from that) such that the average period is what you want. Cycle-to-cycle there is an error, but overall these errors do not accumulate, and we get the desired average period. The example given in [Roman Black]’s description is to alternate 16 cycles and 24 cycles to get an average of 20 cycles.
The software side of things can be inspected by heading over to the clOCkTAL GitHub which makes use of the Small Device C Compiler which has support for a fair few devices, in case dear readers, you had not yet come across it.
The video shows the clock being put through a simple test demonstrating the LED dimming in response to ambient light. All-in-all a pretty simple and effective build.