This guy is now turned into a simple clock, with the refresh of muxed LEDs still done in software. I had to move around the calls to the refresh function to avoid flickering: reading the RTC over I2C in between two refreshes (~2ms) is the most work that can be done, otherwise the display flickers.
Working close to the metal is a great experience to learn how important timing is and how hard it can be for software to meet timed deadlines, especially in constrained hardware.
Somehow I didn't order one of those handy LED controller chips (like the MAX7219) and decided to try coming up with something by myself without searching the Internet. As an exercise.
I ended up with this contraption which just worked on the first try 🙌: Two chained shift registers control all segments for a digit, its dot, the semicolon, and the transistors used to select muxed lines. Only three lines are needed to control the display (clock, select, data). Refresh is done in software for now.
Some more soldering. Today I added headers to a 16x2 alphanumeric LCD display and a DS1307 real-time clock breakout board. This makes them friendlier for prototyping using breadboards. Which I still won't have for a couple of weeks, so this is all I can do in the meanwhile.
Any recommendations on how to hold headers in place for soldering? So far I have been holding them with painting tape, but that feels a bit finicky.
...but there was a Metro 328 by @adafruit in the box so I spent some time after dinner soldering the headers. Not too shabby, specially knowing that last time I had an iron in my hands was 15+ years ago!
Tomorrow: getting an AVR toolchain and flasher working. I'm still a bit annoyed that the order got split, I'll have to salvage some LEDs and resistors from an old appliance or something to try the (apparently) classic blinky LED “Hello world!” 🤔