I sat down to do one of my micro-controller labs for uni today and noticed we had to play a single tone using PWM. “Easy” I thought. Keep reading. Until I get to the final part of the lab. it was basically “Load this HEX file and play it. It plays a musical piece” .
I was a little let down…
I mean, I was fully expecting it to ask us to write the program ourselves to play a given song, but no. Here it was just giving us the HEX file to load and play.
I wasn’t going to let this deter me. I had it in my head to have this thing play The Imperial March by John Williams from Starwars.
Mate and I got together, and off we went.

It’s a relatively simple program. 2 arrays holding the frequencies and durations of each note, PWM output, and a loop to play each note in sequence, and then start again.


Easy as!
Here’s the source code for anyone interested.

Source Code

This uses about 50% of the atmega16’s memory, becuase of the arrays. So keep that in mind while writing new songs!

Have a go yourself! Port some new songs into chiptunes!
Post your results!