Problems using Arduino Due with Bi-directional Logic Level Converter TXB0108

Hello!

This is my first post so I hope I won't make so many mistakes. I am doing a project in which I have to create a GPIB-USB interface.

At first I used an Arduino Duemilanove and the project was working. It was tested with several GPIB instruments and I was able to program all of them with my laptop using the arduino.

To improve the speed of the interface I moved to the new Arduino Due, which has a 3.3V logic. So I found the TXB0108 Bi-directional Logic Level Converter to implement the interface between the 3.3V arduino and the 5V GPIB.

http://www.adafruit.com/product/395

I tested the logic level converter and it was working. Yet when I connect it to the arduino from on side and to the GPIB to the other it stops working and the GPIB instrument goes crazy. I connected a oscilloscope to see what was happening on the lines and I found out that they were oscillating in a crazy way. I think there is a problem in the auto-detection of direction feature of the logic level converter, but I cant figure out what it is!

Hope you can help me. Thanks in advance :D

Without a complete schematic anything I can add here is at best conjecture... But a most common error is to not provide adequate bypassing for ANY additional circuitry added to an Arduino board. well over 90% of the 'schematics' I see don't have any shown. The issues you present are common to: 1. No or too little supply bypassing and/or 2. Poor grounding, wires too long or too thin or daisy chained. You might, while you are preparing a schematic AND Code... look to those issues first. IMO this question could get better answers If it were presented in the General Electronics section..[/color] OOPS Sorry.

Doc

Thanks for the reply!

Regarding the bypassing the logic level converter itself comes with a 100nF cap for each power supply (3.3V and 5V) so I think it might be enough.

On the other side I havent pay so much attention to the grounding: I mean that I used a normal wire longer than necessary so I could use a shorter one and see if anything change.

What do you mean by schematic? the one of the logic level converter chip or of the connections I made?

Thanks again.

It's your application of the TXB0108 that's at issue.. Not the internals of the device. Yes of course the application schematic.. As to your comment about a stray 100 nF capacitor being enough... Until you know for sure... 100uF isn't enough. Bypass capacitors are insurance... NOT an avoidable luxury... besides they are Cheap... And really easy to use too.

Doc

I attached the pdf of the schematic. According to the adafruit website, I just needed to add a pull-up resistor for the OE pin and the bypass cap were already added inside the breakout. Here it is the description:

Because the Arduino (and Basic Stamp) are 5V devices, and most modern sensors, displays, flash cards and modes are 3.3V-only, many makers find that they need to perform level shifting/conversion to protect the 3.3V device from 5V.

Although one can use resistors to make a divider, for high speed transfers, the resistors can add a lot of slew and cause havoc that is tough to debug. For that reason, we like using 4050/74LVX245 series and similar logic to perform proper level shifting. Only problem is that they are only good in one direction which can be a problem for some specialty bi-diectional interfaces and also makes wiring a little hairy.

That’s where this lovely chip, the TXB0108 bi-directional level converter comes in! This chip perform bidirectional level shifting from pretty much any voltage to any voltage and will auto-detect the direction. Only thing that doesn’t work well with this chip is i2c (because it uses strong pullups which confuse auto-direction sensor). If you need to use pullups, you can but they should be at least 50K ohm - the ones internal to AVRs/Arduino are about 100K ohm so those are OK! Its a little more luxurious than a 74LVX245 but if you just don’t want to worry about directional pins this is a life saver!

This breakout saves you from having to solder the very fine pitch packages that this chip comes with. We also add 0.1uF caps onto both sides and a 10K pull-up resistor on the output enable pin so you can use it right out of the box!

Do I need to add a further cap to my application?

schematic.pdf (5.52 KB)

Btw, I used a shorter ground and still have the problem...

Those chips have an internal 4k series resistor on each signal, that means that they have a very high impedance (well a lot higher than you normally expect from a a driven pin) and that could also play havoc with any pullup/down resistors in the circuit as they will create voltage dividers so you won't see the full voltage swing.


Rob

the pull up resistor is only for the OE input which remains connected to VCC all the time since I need the interface working permanently...i try the chip with an oscilloscope and the output were right at 5V and 3.3V on each side...

Your "schematic" is a great redux of the TBX0108... But I already have a data sheet for the level shifter. Posting another does nothing to solve your issues with it's application and not what I asked for in my last post: > It's your application of the TXB0108 that's at issue.. Not the internals of the device. Yes of course the application schematic..

I'm out of here

the output were right at 5V and 3.3V on each side...

When connected to an instrument?


Rob

Sorry I think I didnt understand. All I did is to connect the pin of the converter to the Arduino pins and to a GPIB connector. There is no other components in the application. I took the 3.3V and the 5V from the Arduino Board and I connected the OE input permanently to VCC with a 10k resistor. Then the arduino is connected to my MacBook Pro and the GPIB connector to a GPIB cable and then to a Waveform Generator.

When connected to an instrument?

Yes, the issue is that they are oscillating; as if both side of the interface are trying to drive the same line...

This sounds vaguely familiar. Yes, here:

http://forum.arduino.cc/index.php?topic=154906.55

Not the same chip but similar.

The latching of direction changes may be the problem.

Same here, I used this on arduino due - and same here - oscilations on line - checked on osciloscope. @kwasafa: since it is old thread have you been able to fix it somehow?

Can somebody suggest another voltage level translator - it doesn't need to be bidirectional - I want to interface Microstep Driver DM542 http://www.osmtec.com/stepper_motor_driver_dm542.htm from arduino DUE.

I connected arduinodue directly to DM542 and it works without voltage translators ;)

I think your time would be better spent seeking alternatives to the TXB0108 , instead of trying to diagnose the problem. If you have decoupling caps on both the 3.3V rail and the 5V rail and it is not working then maybe you should try posting on the ADAFRUIT tech support forum (assuming that’s where you got it). It takes them 24 to 48 hrs to respond to each ticket but they will address your issue. Otherwise, find another way to translate the levels.

I used TXB0108 in one project, was not good. The devices it connects to need 2mA output or better drive capability to switch the mode of the pin from output to input. The parts I had connected only had 1.6mA capability. Made a mess of my board cutting the return data path out so I could the return signals direct to the MISO pin of the processor I used.

I actually had the same experience but didn’t know (until now) that it was drive current related.
I was using it between a 3.3V Mini-Pro and a MAX31855 Thermocouple breakout board. It didn’t seem to switch modes.