Every group wants their final project to be something that will be remembered long after they’re gone. Some do highly sophisticated and complex projects that entail upwards of a hundred hours to complete. Yet others go out of their way to develop something ‘cool’ and ‘fun’. Luke and I decided that we wanted to be in this second category, because developing something that’s ‘cool’ would also be fun to do. So in deciding what to design we tried to think of something that would catch the attention of the people in the lab. The easiest way of doing this is to create something that would make noise or play music so everyone in the lab could enjoy it. Realizing this would be the best way to go, we decided to create a synthesizer that could record and playback notes, ‘teach’ the user how to play a simple melody, and also play some prerecorded tunes. After all, don’t you think being remembered as the group that played back the Imperial March theme from Star Wars is cooler than a paper tape reader? (no offense to those groups doing paper tape readers)
High Level Design
Seeing the synthesizer not just as a keyboard for playback but something with multiple options, we opted to use a simple state machine to section off each option. In other words, there would be states for the different options (one for single note play, record play, etc…) Since the main program would be this state machine, it was wise to have the generation of the sine wave output to be interrupt driven. This gives a lot of freedom to the main program functions because the state machine for the main program doesn’t have to worry about creating these tones.
State Machine Design
Since our design involved the user being able to choose from several different playback option, it was obvious that the program would entail the use of a simple state machine. Each option of the synthesizer (Default or waiting, Single Note Play, Record Play, Mem Playback, LCD play, and Recorded Tunes) would correspond with one of these states. The buttons on the proto-board would be used to change from one state to another.
For more detail: Sine Wave Synthesizer