I had the idea for a while, but didn't really do too much with it until I had the Raspberry Pi 0 W boards from the Bluetooth SNES controller to SNES converter. One thing I didn't mention in that post was that I was planning to use some probe pins (aka "pogo pins") to connect the board to the GPIO pins, which carried over here. Reason for it is that it frees up space for trace routing, makes it easier to swap the boards as needed, and increases compactness.
Anyway, I think I originally started with using counters to run the seven-segment displays, which would require a pulse every so often over one pin, but would require a few more to set the display faster. I did get a breadboard, a seven-segment display or two, and a couple of the counters to test it out and it did work, but it was really fast since I was using jumper cables. Besides that, this version never really got anywhere else.
I think after the controller converter, I was going to maybe use the SN7407 for driving each segment, but probably didn't have enough GPIO pins? I forgot how I learned about the 74HC595 (probably looking sometehing up?), but after understanding how to use it, it was something better to use, since I only needed three GPIO pins. Before I forget, there seems to be a 74HC595 that has SPI communication, but I'm pretty sure I'm not talking about that one because it doesn't seem to be chainable?
One of my requirements for the clock was to have a button to turn the display on at minimum brightness while the button is held and to have a switch that would turn the display on at full brightness (well, within reason), and from getting a better idea of transistors from a previous project, I used a NPN transistor to connect the ground lines of the displays to ground. The only thing that was unclear was what resistor values I would need for the button and the switch, so I designed a prototype board that was derived from the final board for making it easy to test various resistances.
I also had read how to add an RTC (DS3231) to the Raspberry Pi, and I added it because I had the space and it'd make the clock less reliant on the internet for the correct time. With space still leftover, I also decided to add a temperature sensor (DS18B20, and yes, the DS3231 has its own sensor, but I wanted to leave it alone) using an FFC connector, and a flat flex board that the sensor would be carefully soldered to. It was a little tough to design the flat flex board because I hadn't designed the case at all (though I had ideas of how I wanted it to be), so I had originally desiged it with a right-angle bend, which would end up costing a lot because of the unused space to make a rectangle. Eventually I had a "duh" moment where I could just make a straight board and have it go around the back of the Raspberry Pi to where I wanted the sensor to be (outside of the case and isolated from the inside of the case).
There were also two more switches to be able to flip the display (if the display was upsidedown) and to display the temperature instead or the time. I also had a couple headers for the RTC's backup battery connection and a 5-volt input connection (I was going to use a DC jack so that it's more robust, compactish, and so I can have the cable run along the length of the clock).
I really didn't do anything with it for a while, and then I decided to dig into CircuitPython more, which led me to other solutions. I had made a very basic prototype board to be able to tweak the brightness with the intended transistor, a variable resistor (in the standard voltage divider circuit format), and the button I was intending to use. Powering it from 5 volts made it kinda tough to adjust, but it was doable.
I don't remember if it was this or the controller converter board where I measured the GPIO holes (only a couple) with a pin gauge and found them to be scarily close to the maximum of the probe pin diameter (based on the datasheet), but it wasn't until after I had ordered some pins for something else that I was able to test the pins to the GPIO holes. Suffice to say, they fit right into the hole, so I had to scrap the idea and look for something else. I did find a fairly low-profile header and mating socket, since I was trying to keep the distance between the top of the boards around 6mm (which is the distance I calculated for the controller converter board). Of course, this meant that I had less dead space for resistors and capacitors on the board, so they had to get moved.
Since I was using the SOIC package for the 74HC595, I didn't have a lot of space to move the resistors and caps to while trying to keep the board area underneath the display clear in case I do solder the displays directly to the board instead of using the planned sockets. I went with a smaller but wider package and it gave me plenty of room to stick the caps for each of them between them. For the resistors, I used a bussed resistor for all the inputs that needed to be pulled up to save space, and it allowed me to move the resistor for the temperature sensor underneath the board near the FFC connector (which is on top).
While playing with the Adafruit dev board I had (Trinket M0), I decided to toy around with using its onboard DAC and modded the prototype to be able to control the transistor's base from the DAC (the variable resistor is isolated from the base via the button), and it made it so much easier to control the brightness. I found a DAC (MCP4725) that has a CircuitPython library that I'd be able to use, so I added it to the board and re-routed the button and the switch to the GPIO pins instead. I also tweaked the code after saving a copy.
I found a temperature sensor (MCP9808) that has a CircuitPython library, and even though I don't like its package, I decided to use it while scrapping the case (I had modelled the case when I had the first iteration of the board finished). Doing so freed up some space, and I decided to just use a right-angle connector USB cable to the Raspberry Pi's micro USB port, which meant removing the flip functionality since it won't really sit well on the cable. With this, I dropped the switch count from three to one, and the switch displays the time or temperature and has the display at full brightness with either position. I also just used some vias for the backup battery instead of an actual connector since it'd be a little more compact and I didn't feel like running a long trace to where I have space for the connector to the RTC. I went back to discrete resistors because I only had three things to pull up and had the space for them. I also made another copy of the code and changed it accordingly.
I was also working on an internet-connected microcontroller clock around this time, and for it I had a different GPIO expander that connected via I²C (MCP23017) which I was going to use for another revision of this board, but I ended up dropping this project in favour of the microcontroller version. I was also going to add an accelerometer from that project to this one as well. The microcontroller version ended up being a little easier to work with in the code, but I think the main thing is that the board size is smaller than the one for this project, even if the total parts cost would end up being about the same.
Oh, I learned how to tent vias at or under a certain size sometime around the second revision, which made it easier to not have to worry about putting vias too close to stuff being soldered. And I also didn't think about the permanent dot point segments that I was using for a makeshift colon, so I had a note to fix that within the code (which I might've done, I don't remember) in the second and/or third revision board layout(s).