home > hardware > simple bus level-shift |
![]() |
![]() |
![]() |
![]() [2001-12-19; updated 2013-03-02]
While doing some background reading about the Philips I2C bus
I came across an application note written by Herman Schutte (of
Philips Semiconductors Systems Laboratory in Eindhoven). Mr. Schutte described an elegant
mechanism for interfacing sections of I2C-bus which are operating at different
voltages through the use of MOSFETs and pull-up resistors. I had also been
looking at a number of options for
interfacing a 5V LCD panel to a microcontroller system that I
wanted to run at 3V and so decided to try applying this idea
to the data and control lines in my circuit. AT90S8515 @ 3V meets L203400J00 @ 5V Although I was building the circuit by hand I decided to use a surface mount package for the MOSFETs. As three-terminal devices they are relatively easy to solder as long as you can hang onto them. The image above on the right shows some of the 11 MOSFETs in use on the 0.1" proto board. I used the Fairchild Semiconductor BSS138 (product page; Onsemi acquired Fairchild in 2016) N-channel enhancement mode MOSFET which is available in the standard SOT-23 package from folks like Digi-Key. Below on the right are wave forms for the circuit using three different values for the pull-up resistors: 100k, 10k and 4.7k ohms. These values were picked from what I had close at hand. The circuit functions with any of them in fact. |
![]() An interesting feature of the circuit is that two halfs of the bus can be isolated from each other by pulling the FET gates low. Mr. Schutte describes a number of similar extensions to his basic circuit idea and discusses the necessary MOSFET features as well as some results.
The Philips Semiconductor application note is currently (2010) at:
AN97055
Other folks using Mr Schutte's circuit including versions with the BSS138 MOSFET:
|
© 2001, d.holmes
CC BY-SA [Creative Commons Attribution-ShareAlike] (more info)