[sdiy] MIDI velocity
rsdio at audiobanshee.com
rsdio at audiobanshee.com
Thu Apr 14 03:24:59 CEST 2016
On Apr 13, 2016, at 12:20 PM, Neil Johnson <neil.johnson71 at gmail.com> wrote:
> I wrote:
>
>> About 7 years ago when I was writing the keyboard scanning code for a
>> Siel Opera 6 I had a simple scheme for scanning and measuring play and
>> release velocity (not many folks seem to know about release velocity
>> although some synthesizers do recognise it).
>>
>> Using an Atmel ATMega8 scanning the entire keyboard every 1ms I run
>> 4-state state machine for each key, where the states are UP,
>> GOINGDOWN, DOWN, GOINGUP, and an 8-bit counter for each key.
>> Debouncing is handled by the algorithm rather than a separate
>> debouncing step. With the right encoding of the states you can do
>> most of the testing and state transitions using btiwise operations, 8
>> keys at a time (on a 32-bit processor you could do 32 keys at a time).
>>
>> I'll try and dig out the code and sling it up on github sometime.
>> It's all in C, no assembler required.
>
> Found it, and hosted up on github:
>
> https://github.com/nejohnson/kbdscan
>
> The keyboard scanner talks to a 74LS154 on the keyboard assembly, and
> generates key on and off events with associated velocities. There's
> also code for reading some analogue inputs and a footswitch, but
> that's not important right now.
Thanks for sharing this!
I was going to suggest that having the 'LS154 on the keyboard assembly is a great design choice, because that allows a simple, 14-pin connector, but then I realized you probably were stuck with that choice because of how the Siel Opera 6 was designed. Sure enough, looking at the schematic I see 8 row bits, 4 column address bits, power and ground. (feel free to swap the row and column nomenclature as you prefer - Roland seems to use the opposite terms)
Brian
More information about the Synth-diy
mailing list