96x96 pixels, 8 buttons, a speaker, and 1K operations.
CAD = Computer-Aided Design
It also equals lots of clicking and quiet cursing.
I did mechanical and PCB design for 1K-OP today in Autodesk Fusion 360 and Kicad. While trying to design scissor-switch mechanisms for the keys it sunk in that I have 1 day left in the 1K competition, so I simplified. There's lots left to do but the design of the body basically looks like this:
It's upside-down, but oriented that way because the screen that will stick off the end opposite the speaker grill isn't in the model. There are 8 buttons which are connected to the central spine by 2 mm spans of material. Underneath there is a pocket which perfectly fits on top of some tactile switches I have. Here's a more complete render:
The PCB will bolt onto the bottom of this body. It's nothing complicated. Here's a partly finished layout:
For tomorrow: finishing layout, milling the PCB and body, and writing all the software...
I made a couple small breakouts for some of the parts to make it easier to breadboard the design. The ATmega328PB, 24AA256, and ISP programming header got nicer milled PCBs and the APA102C RGB LED got a horrible melty perfboard breakout.
On the code side I just made an LED blink and then got a picture on the LCD screen by writing a simple driver based on the one from Adafruit.
The code and breakout boards can be found in the project repository on GitHub.
Next I'll probably wire up the rest of the hardware and write a little code to verify that each part works as expected. There's a lot of CAD and programming to do in the next two days.
Nothing complicated here, except maybe the audio seems weird. I'm going to try using an H bridge for differential output. Combined with two R2R ladders it gives 5 voltage levels, so ~2.3 bits of resolution.
The main visual inspiration is the OP-1 synthesizer from Teenage Engineering.
So there are 4 dominant squares, one for screen, one for speaker, and two for the buttons. The icons will be silkscreened in black and red. The OP-1 is aluminum but I'm going to work in Delrin for the body. It's what I have on hand but it's also nice on the eyes and to the touch.
Right now all I know is that besides basic support for reading the buttons, drawing on the LCD, and synthesizing audio, there will be a programming language for the user to use to orchestrate the parts. And I know it's all got to fit in 1 kilobyte because I want to submit this for the 1KB challenge.