Quote Originally Posted by Darrel Taylor View Post
Time to buy a new Scope.

The bit rate of 31,250 baud (midi) is 32us.
An entire byte would take 320us.

But the big question is, how are you interfacing with the 5ma current loop?
<br>
Wahoo! My TDS210 is so black and white. Those new colour plasma scopes look fun...

You're right about the byte time. Somehow I messed up that calculation.

Receiving data through a 220W series resistor, a 6N137 and a flyback diode across pins 2 & 3 for protection. 1K pullup on the output, and the signal is nice and clean.

I did some further testing yesterday. Basically sat in a tight loop around RCIF2 and twiddled a pin when something come in and/or an error occurred.

Found that everything was working perfectly. FERR and OERR were never set and every byte I received came through properly.

Then, I re-added my TMR0 interrupt routine, using DT_INTS 18. It ticks every 60 uS and does about 4 uS of PBP work before returning. The routine works well when data is transmitted fairly slowly. It crashes and I start missing bytes when lots of data is sent in a chain.

I suspect that what I hadn't considered was the overhead of 70+ 'hidden' instructions on each side of the interrupt. Even at 20 MHz, it looks like the total interrupt time is about 34 uS.

It shouldn't make a difference, since my main loop is so short. But that's all I can think of right now.

Today I'm going to try using an .asm interrupt routine and see if the extra leanness makes any difference.