Using basic electronic components (capacitors, transistors, etc) and/or chips (555, 74 series, etc) how do I convert from:
Input: 8-bits containing the binary representation of a MIDI number "m
", example: 0b1001000 (72) for the note C5
Output: A square wave with frequency corresponding to that note "f
", example: 523Hz for the note C5
I'm intending to build this on a breadboard to connect to a basic computer also on a breadboard.
My initial approach was for the output to come from a 555 chip configured in an astable state, with the input somehow manipulating the capacitance/resistance of the components used with the 555. The part in particular I'm struggling with is the fact that f
is proportional to 2^(m/12)
and I can't think of a way to combine the input in a non-linear way to get this exponential behaviour.
Edit: Clarification on the nature of the connected computer and the project: I've been following along with Ben Eater's 8-bit breadboard computer series on youtube, so the computing capabalities are very primitive (I can load/store 8-bit values, and add and subtract them).
As an extension of this project, I had the idea to store MIDI value notes in memory, and output them to some module that will create a square wave that makes a peizo/buzzer produce the note. The goal of the project in general is not to "cheat" by using chips that I don't fully understand the inner workings of, so limiting myself to basic chips. In some cases the project uses more complicated chips where the underlying principle is understood but would be laborious to implement (e.g. using a whole chip is a register, when I already understand and know how to build flip-flops; or programming and using a CMOS SRAM chip for the 7-segment decoder etc).