2
\$\begingroup\$

I am having a strange issue interfacing between an Arduino and BeagleBoneBlack over UART.

The Arduino is 5v logic, and the BBB is 3.3v logic, so I'm using a bi-directional logic level converter from sparkfun.

The level converter works fine with my 3.3v USB/FTDI reading with my laptop When I connect GND,3.3v,RX,TX, but when I use the BBB, I don't get anything unless I disconnect the 3.3v line. Interestingly - on my computer using the FTDI cable, I get garbage UNLESS the 3.3v is connected.

On the BBB, with the 3.3v ref voltage disconnected the level-converter seems to convert from 5v - 2.5v (instead of the intended 5v-3.3v), and I'm weary of this floating voltage.

I made a voltage divider with resistors, and with the reference low-volt of 1.6v, communication still works, but again - not with the reference low-volt of 3.3v.

I'd love suggestions as to why this may be the case!

Edit:

To clarify with sweet ASCII art:

This Works (as it should):

___________             _________________               ________         ____________
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> |      | <-USB-> | Computer |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | FTDI | <-USB-> | Computer |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  | <-LV (3.3v)-> |(3.3v)| <-USB-> | Computer |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> |      | <-USB-> | Computer |
-----------             -----------------               --------         ------------

This doesn't work (and it shouldn't, as there's no ref LV):

___________             _________________               ________         ____________
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> |      | <-USB-> | Computer |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | FTDI | <-USB-> | Computer |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  |               |(3.3v)| <-USB-> | Computer |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> |      | <-USB-> | Computer |
-----------             -----------------               --------         ------------

This works (but it shouldn't):

___________             _________________               _______
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | BBB | (Actually reading about 2.5v)
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | BBB | (on these two lines)
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  |               | BBB |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
-----------             -----------------               -------

This works (also shouldn't):

___________             _________________               _______
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (1.6v)-> | BBB |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (1.6v)-> | BBB |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  | <-LV (1.6v)-> | BBB | (Using a voltage divider)
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
-----------             -----------------               -------

This doesn't work (but should):

___________             _________________               _______
|         | <-RX (5v)-> | HV1 (LLC) LV1 | <-TX (3.3v)-> | BBB |
| Arduino | <-TX (5v)-> | HV2 (LLC) LV2 | <-RX (3.3v)-> | BBB |
|   (5v)  | <-HV (5v)-> | HV  (LLC) LV  | <-LV (3.3v)-> | BBB |
|         | <-- GND --> | GND (LLC) GND | <--- GND ---> | BBB |
-----------             -----------------               -------
\$\endgroup\$
  • \$\begingroup\$ When you say "The level converter works fine with my 3.3v USB/FTDI", do you mean with the 3.3v side connected to the FTDI and the +5v side connected to the Arduino? Have you made a matrix of all voltages with the 3.3v side connected to the BBB and the +5v side connected to the Arduino (with both supply voltages connected also). Record all input and output voltages first, and then lift the wires going to the input pin of the converter (each side, one at a time), and set the input first to +5v (or +3.3v as applicable) and record the output voltage, and do the same for ground. \$\endgroup\$ – tcrosley Mar 28 '14 at 5:24
  • \$\begingroup\$ Edited to include what does and doesn't work with a bit more clarity :) \$\endgroup\$ – Jono Mar 29 '14 at 0:43
2
\$\begingroup\$

Strangely it seems as though the Arduino is outputting voltage over both RX and TX, while the BBB is only outputting voltage on the TX line.

My guess is that the bi-directional LLC isn't able detect which direction communication is supposed to happen, and so the BBB isn't able to transmit to the Arduino.

This Sparkfun LLC is the same as the one I'm using on the BBB -> Arduino channel, but the Arduino -> BBB side just uses a voltage divider. I rigged up this setup, and it seems to be working now.

\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.