[sdiy] MIDI I/O c code..

dougall dougalli at gmail.com
Fri Mar 20 02:06:06 CET 2020


Are you handling running status and note off sent as zero velocity note on?

-d

On Fri, 20 Mar 2020 at 11:55, <eidorian at aladan.net> wrote:

> Sorry, I don't have example code for you, but here is some analysis that I
> hope might help point you in the right direction:
>
> 20MHz / 31,250Hz => ~640 instructions per MIDI data bit, or 6,400
> instructions per MIDI data byte.  That's quite a lot of instruction
> execution time between notes, so I'd be checking the
> efficiency/optimisation of the code.
>
> How long is it taking to update the analog outputs and do other
> processing?  If it's updating all 8 CVs via a "slow" protocol like I2C
> every time it loops then that might be taking a while, and maybe you need a
> different approach (i.e. only update a CV output when it changes).
>
> How have you implemented the FIFO?  Do you have locking to ensure the
> interrupt isn't writing to it while the main loop is updating it?
>
> Create a debug version that has checks on the FIFO size in the interrupt,
> and sets an LED on if it overflows, so you can confirm for certainly
> whether or not that's the problem.
>
> What I do (with 30+ years of programming experience) is pretend I'm the
> CPU, and "execute" the code in my head (or on paper if complex) in order to
> try to work out what unplanned or unexpected things might be happening to
> cause the problematic behaviour.
>
> Cheers,
> A.
> ---
>
>
>
> On 20-03-2020 11:14, Jean-Pierre Desrochers wrote:
>
>
>
> I’m working on a new polyphonic MIDI to CV module (8 voices).
>
> So far I did my tests with an old PIC16F887 @ 20Mhz micro I had on hand.
>
> I use a USART interrupt driven c function to ‘catch’ all the incoming MIDI
> bytes.
>
> My code is pretty fast, but still, since I only read one MIDI channel
> (1-16) at the time
> when I play very fast chords on an external keyboard
>
> all the notes are read in the incoming queue but sometimes
>
> I get stuck notes or unread ones..
>
> Same thing happens when playing MIDI files on Cakewalk SONAR
> feeding my prototype with  a MIDI cable.
> The interrupt function grabs each incoming byte and put them
>
> In a receive buffer of 32 bytes and the main () reads and treats them in a
> FIFO manner
>
> Later in the main loop.
>
>
>
> *-Would a 32Mhz micro do a difference in the USART interrupt reading speed
> ?*
>
> *-And is 32 bytes long enough for the RxBuffer to handle a 6 voices chords
> ?*
>
> *-And finaly I checked the web for a ‘decent’ C code examples*
>
>
> *  for MIDI reception (MIDI Tx is much easier to implement) with no
> success..  ‘Obscure’ Arduino libraries all around with no explainations of
> its inner code.*
>
>
>
> Did anybody use good C code available ?
>
> JP
>
>
>
> Synth-diy at synth-diy.org
>
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at synth-diy.org
> http://synth-diy.org/mailman/listinfo/synth-diy
>
> _______________________________________________
> Synth-diy mailing list
> Synth-diy at synth-diy.org
> http://synth-diy.org/mailman/listinfo/synth-diy
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://synth-diy.org/pipermail/synth-diy/attachments/20200320/efad9b9b/attachment.htm>


More information about the Synth-diy mailing list