The XBee communication (RX/TX) pins definitely operate off of a 5V signal with the Arduino. We’ve seen this a lot and done this a lot, and it certainly keeps things simple. That said, there’s nothing wrong with adding a level-shifting circuit to deliver 3.3 V signals to the XBee and 5 V signals to a microcontroller. Definitely a good idea for commercial applications where you will need to keep the module stable across its entire temperature range, etc.
Level shifting can be accomplished with:
- a resistor-based voltage divider: This will work but will also slow down signal rise and fall times significantly. For most cases this won’t be a problem, but it might affect the integrity of fast signals over long wires.
- a Zener circuit (with a resistor for level-shift): This is better but the part isn’t one most people have lying around, and it’s not stocked say, at Radio Shack
- a diode circuit: The two in the schematic below use easily available parts and the diodes can be any common silicon rectifier type
Thanks to Zach Eveland for providing this helpful diagram and details.