Created by: gwideman, Mar 28, 2014 2:17 am
Revised by: gwideman, Apr 7, 2015 9:21 pm (9 revisions)

Overview

Different Arduinos and AVRs can run with 5V or 3.3V power rails. There arises a need to connect to other devices (including other AVRs or Arduinos) running on the other supply voltage, leading to questions regarding whether the signals can be successfully interconnected.
There are several issues:
  • Logic levels
    • Does the destination device understand the logic zero and one voltages of the source device?
  • 5V device's Vout greater than 3.3V device's max allowed Vin?
    • Vin is typically limited by an input protection circuit. This is often a diode ("clamp") to Vcc, resulting in a spec where Vin_max = Vcc+0.5V. So, does the 5V device's Vout_max exceed the 3.3V device's Vin_max? If so, during logic high an inordinately large current will flow from the 5V device through the 3.3V device's protection diode to the 3.3V supply. This wastes power, and could damage either the 5V device's output or 3.3V device's input protection.
  • Different power supplies: What happens when one or other device is powered down?
    • 5V to 3.3V interface issues often arise at the junction between systems, where the two devices do not share a power supply, hence one may be powered while the other is not. In that situation, is the powered device's output active, and possibly high, and if so, what happens in the powered-down device as a result?

Buffers

Where voltage-incompatible devices need to be connected, we may be able to interpose a buffer IC that translates the logic levels. Where devices connect but do not share power supplies, again, a buffer may manage what happens when only one of the devices is powered.

Some common solutions

Some solutions which solve at least part of the problem.

Resistive dividers, possibly with diodes

[Examples]
May statically solve the translation of voltage levels (particularly with high-impedance inputs), but introduces two problems:
  • Resistors combine with input and circuit capacitances, resulting in slow transitions
  • Ongoing current flow through resistors -- wasted power.

Level shifter ICs

TXB0108 8-bit bidirectional logic level converter

Example product, adafruit
Suitability for handling one-side-powered: undetermined.

74LVC245

General characteristics of the LVC family running on 3.3V make them suitable for translating either direction.
Suitability for handling one-side-powered: undetermined.

74AC125, 74AHC125

See Other schemes ... Adafruit

Other schemes

Adafruit USBtinyISP AVR Programmer Kit


Programmer uses a 74AHC125 powered by the target system.
1. When the other system uses 3.3V, the AHC family thresholds and >5V input tolerance allow chips in this family to be used as translators in either direction. (But only barely: AHC's VOH < atmega VIH is not in-spec, but statistically likely to work, given no DC load.)
2. What happens in the one-side-powered scenarios?

FTDI Cable

FTDI FT232xx has a built-in 3.3V regulator. Jumper can select interface to 5V or 3.3V target system. Adafruit docs say that setting it to 3.3V (or buying the 3.3V model of the cable) works fine.

References


http://www.ti.com/lit/sg/sdyu001z/sdyu001z.pdf