One term - 7 courses - DONE

@ 2010-06-13 by João Paulo Pizani Flor

Last semester I took many, many courses in college. Most of them didn’t interest me much, but one particular was very exciting, namely INE5438 - Embedded Systems Laboratory, an elective course with a completely practical approach. The goal of the course is to enable students to design and implement embedded systems, specially those involving microcontrollers.

The course is composed of two parts. First we have an initial lecture set and weekly lab assignments (9 in total). In these we code for AVR microcontrollers, in a growing difficulty level; all my assignments and solutions are published under

The other half of the course is spent working on a Final Project. We were completely free to choose the problem we wanted to solve and the platform to be used. Of course we made these decisions in the last minute :), and had several nice and interesting ideas, but I’ve chosen to work on Guitar2MIDI (together with Daniel, Diogo, Mauricio and Rodrigo)…

Basically, our project consisted of writing some software to run on a development kit with a microcontroller. You would connect a guitar to this board, and the output of the board (sent through USB, for instance) would be the MIDI of what you’re playing. By storing this output you could edit the song you just played in your favorite score/tab editor (GuitarPro, Encore, Finale, etc). The output coming from the guitar’s cable is simply an analog electrical signal, corresponding to the WAVEFORM of the note/chord played on the guitar. So our software has to perform a relatively complex task: detect the frequency of the note being played, and also its duration, so that we can output the simbolic representation of this note according to the MIDI format. The following diagram shows the system’s high-level architecture:

Blocos funcionais
Blocos funcionais

We spent a LOT of time doing nothing at all (because of problems with the equipment), and so we started to really program in the last week of the schedule (as always :P). What matters, anyways, is that we FINISHED the project, and ON SCHEDULE \o/\o/. The songs we are able to recognize, though, are very simple and there is still room for various improvements, mainly on the code detecting note duration. To keep a long story short, if you want more information about the project, to find out HOW we made this work, which were the algorithms we used and so on, here is the link to the report:

With no false modesty, it’s a very well-written report, with lots of diagrams and explanations of the concepts involved…

I am overall very happy with the project. To REALLY finish it gave me the great sensation of “I made something”. I risk saying it’s the first time, since my first day at college, that I developed a group project with so much independence and personal motivation, and that gave us so palpable and cool results… I am now even tempted to redevelop the project using the brand new Arduíno I just bought, but this is going to be another long post :D