Log in

No account? Create an account
Previous Entry Share Next Entry
I have ordered...electronics.
I placed an order to Sparkfun for the MIDI breakout board, a new Arduino Uno, and some tools. It should be shipped in the next couple of days by FedEx Ground. I expect it to arrive by next week. I also ordered a set of stackable headers to use with the breakout board. Since the Arduino doesn't use 10-pin stackable headers but the Ti Launchpad does, I ended up ordering the headers from LaunchpadShields.com.

Next week I'm going to Binghamton for a dinner party, and I will stop by Unicorn Electronics to get a breadboard and parts. The plan is to use a breadboard to develop the Arduino->MIDI->Sound interface first, then add in the Concertina buttons to Arduino interface, then design a PCB to hold all the electronics and put the whole thing together.

The goal for this upcoming week is to have a parts-list to take with me to Unicorn -- and to post preliminary schematics to this journal.

  • 1
Unicorn Electronics.

Now there's a good memory. :-)

Sounds like fun! Let me know if you need anything, I have a good parts stash, and I do this sort of thing fairly often.

Right now I'm trying to figure out a way to fake the MIDI connection between the Arduino and the MIDI board:

The Arduino outputs 5V on its TX line. The MIDI chip wants 3.3V (up to 3.6V) max on its RX line. The reference implementation for the MIDI board uses an opto-isolator between the MIDI in and the RX line on the chip (just like the MIDI spec says to use). This will work, but...

1st: I'm getting 5V Vcc and GND for the MIDI breakout board from the Arduino, so the opto-isolator is doing absolutely no isolation. The only practical purpose it's serving is converting TTL to 3.3V levels.

2nd: Even though it's just an 8-pin DIP, the opto-isolator was the dominating factor on my early PCB designs (since thrown out, deleted from my hard drive, lessons learned). Eliminating it would save a significant amount of board real estate (I was unable to find an SMD opto-isolator in a quick search at Jameco.com)

My next thought was to use a zener diode to drop the 5V to 3.3V, but Jameco.com didn't have any SMD 3.3V zeners, either.

A search for a circuit to do the job turned up the dope-slap-worthy idea of simple voltage divider.

This got complicated when I did a check of the schematic for the MIDI BOB and found the RX line was protected by a 100KOhm pull-up resistor (the spec for the chip says to tie the RX input to DVcc (3.3V) if unused, so that, at least, makes sense).

So I'm thinking that I could simply feed the Arduino TX line (5V high, 0V low) to the RX of the BOB through a properly-sized resistor (which I figure is 194KOhm), and when the line goes low, there will be 3.3V at the RX pin.

Similarly, most of the inputs to the BOB are tied low via a 100K resistor, so can I get away with using an 55K resistor to Vcc to pull them high (to 3.3V)? The Arduino does provide a 3.3V reference that's limited to 50mA draw that I could use, but it seems reasonable to try to avoid drawing current from it if possible. I'm not so concerned about the GPIO0 pin (tied high at startup to signal RT-MIDI) as I am about the RESET pin (low to reset, and it's tied low on the BOB via a 100K resistor, so it needs to be pulled high, with a switch). The current draw normally would be low, but when the reset switch is pressed, it could be a problem.

So, yeah. I've got questions. I'll work on schematics to detail what's going on, and make posts w/ pictures.

Yeah, a voltage divider is the way to go. I'm not sure I follow your verbiage correctly, however. If you connect an I/O line from the Arduino to the RX line on the BOB, with 100k pull-up to 3.3V and 194k series (assuming
infinite impedance on the RX line), you'll get 3.9V when the Arduino pin is at 5V, and 2.2V when the Arduino pin is 0V. I don't think this is what you want.

For the inputs with a 100k pulldown, I wouldn't bother with a pullup. I'd just use a 56k series resistor. Then, with the Arduino pin at 5V, you'd get 3.1V. With the Arduino pin at 0V, you'd get 0V.

However, those inputs are probably not infinite impedance, so you'd have to adjust the values to provide the proper voltage at the proper current to drive your inputs.

I can see your comments about the I/O line from the Arduino to RX (with it's 100K pullup). I actually decided a simpler solution (at least, I hope it's a simpler solution) is to use a diode instead of a resistor. When the Arduino is high, the cathode of the diode will be at 5V and the anode will be connected to a 3.3V supply via a resistor, and no current will flow. The RX pin will be pulled high by the resistor. When the Arduino is low, the cathode will be at 0V, and there the RX has a low-resistance path to ground.

Take a look at my most recent post on the matter.

  • 1