I didn’t really want to go further in this project, the button input wasn’t very great for easy use.
However, I remembered that some products allow the user to input notes with a special arragement (Roland TB303). I’m not really up to add so many buttons (12 for a complete octave), but inputting notes via a midi keyboard is very doable ! Although it requires a midi keyboard and the implementation of the midi protocol. Nothing too biggy though. Besides, every manufacters now make a microkey usb/midi thingy.
As it, it works very well, so well that I’m more twiddling knobs that writting code for it….(meaning that the concept work)
basically, the µC collects midi datas, loads them into an array and then goes the management of the data and its outputing. One of the essential thing is to allow external clocking. Luckily, the atmega is full of interupt !!
Unfortunately, the I/O pin count can be an issue considering the use of a 16X2 LCD which is a necessary evil in this case. However ebay China sells some I2C LCD (two wires for a LCD !!) with the bit expander PCF8574T which could do the trick.
Still needs a bit of work to add some kind interesting variation for the sequencer.
If this can be of any use to someone, here are the C (ugly) codes : https://github.com/ThebigDickhead/AVR_PROG/tree/master/midi_seq.
Although I used a ADC read for the speed with a table, I think It’ll be nicer to scale the output speed with the BPM standard.
Note that it is in its very basic form, ideally I’d add velocity output (double DAC to SPI protocol to make use of my microchip ones), the pitch bend output, transposition, arpegiator all that glorious jazz…One could even imagine recording several sequences that could be chained…but first thing first…
here is a very essential document for MIDI protocol in details : http://oktopus.hu/uploaded/Tudastar/MIDI%201.0%20Detailed%20Specification.pdf