Many sensors operate at 3.3V logic levels, while microcontrollers and legacy systems may use 5V. Connecting these directly can lead to unreliable communication or even permanent damage.
This article explains when level shifting is required, how it works, and which solutions are reliable for sensor applications.
Why Level Shifting Is Important
Different devices often use different voltage levels:
- Modern sensors: typically 3.3V
- Arduino UNO and older systems: often 5V
Problem:
- 5V signals can damage 3.3V inputs
- 3.3V signals may not be recognized as HIGH by 5V systems
Level shifting ensures safe and reliable communication between these devices.
When You Need Level Shifting
| Scenario | Level Shifting Required? |
|---|---|
| 3.3V sensor → 3.3V MCU | No |
| 5V sensor → 5V MCU | No |
| 3.3V sensor → 5V MCU | Sometimes |
| 5V MCU → 3.3V sensor | Yes |
The critical case is when a 5V output connects to a 3.3V input.
Common Level Shifting Methods
Resistor Divider (Simple Signals)
- Two resistors reduce voltage (e.g. 5V → 3.3V)
Advantages:
- Very simple
- Low cost
Limitations:
- Only works for one-direction signals
- Not suitable for I2C or fast communication
MOSFET Level Shifter (Recommended for I2C)
- Uses N-channel MOSFET (e.g. BSS138)
- Bi-directional operation
Advantages:
- Works reliably with I2C
- Supports bi-directional communication
- Simple and widely used
This is the preferred solution for most sensor applications.
Dedicated Level Shifter ICs
- Examples: TXS0108E, TXB0108
Advantages:
- Multi-channel support
- Compact design
Important limitation:
- Many IC-based level shifters do not work reliably with I2C
- Automatic direction detection can fail with pull-up resistors
In practice, discrete MOSFET solutions are often more stable for sensor buses.
I2C and Level Shifting
I2C uses open-drain signals with pull-up resistors, which affects level shifting behavior.
- Pull-ups define the logic HIGH level
- Different voltage domains require careful design
Best practice:
- Use MOSFET-based level shifters
- Ensure correct pull-up resistors on both sides
Typical Wiring Example (I2C)
- Low side: 3.3V sensor
- High side: 5V microcontroller
- MOSFET connects both sides
- Separate pull-ups to 3.3V and 5V
This allows safe and reliable communication.
Common Mistakes
- Connecting 5V signals directly to 3.3V sensors
- Using resistor dividers for I2C
- Using incompatible level shifter ICs
- Ignoring pull-up resistor configuration
Practical Recommendations
- Use BSS138-based level shifters for I2C
- Use resistor dividers for simple one-way signals
- Avoid automatic level shifter ICs for sensor buses
When You Can Skip Level Shifting
Some 5V microcontrollers (like Arduino UNO) recognize 3.3V as HIGH.
- 3.3V sensor → 5V MCU input often works
- But 5V MCU → 3.3V sensor is still dangerous
Always check datasheets before skipping level shifting.
Conclusion
Level shifting is essential when mixing 3.3V and 5V systems. Choosing the right method ensures reliable communication and protects sensitive components.
For most sensor projects, MOSFET-based level shifters provide the best balance between simplicity and reliability.
