The new Arduino Due board has its microcontroller running at 3.3V, but unfortunately most standard Arduino add-on shields (boards) run at 5V, thus their I/O signals are at different logic levels.
The number of signals is approximately 20, and includes:
- standard digital lines (some with hardware interrupt capability)
- analog I/O
- Serial UART lines
- as well as SPI and I2C signals
Now, I would like to add an in-between shield (board) so as to facilitate compatibility between the 3.3V Arduino Due board and all the signals of any given 5V shield. This in-between board would need to allow interfacing between the 3.3V signals and the 5V signals (i.e., both ways).
What is the best way to create bidirectional level-translation for a case like the above? Here, by "best", I just mean straightforward, inexpensive, and would work without problems across the various shields and signal types.
Based on my research of this kind of level shifting so far, the options available seem to be:
- A set of diodes that create a voltage drop (but this would be uni-directional)
- A set of resistive dividers (again uni-directional)
- A specialized level shifting chip?...