Pages: [1] 2   Go Down
Author Topic: I2C voltage problem  (Read 1472 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I have the Uno connected to two devices on a 3.3V I2C bus as per the diagram on the page linked below (i.e. 4.7k pull-up resistors connected to 3.3V supply for each SDA/SCL):
http://playground.arduino.cc/Main/I2CBi-directionalLevelShifter
One of the devices is USB powered device.
Everything works fine as long as the two devices are powered up with the I2C bus voltage level measuring 3.3V
If no USB is plugged into the USB powered device, the voltage on the I2C bus drops to about 2V, and the communications between the Arduino and the non-USB device appear to hang.
Is this normal? Do all the devices connected on an i2C bus have to be powered up all the time for the bus to work? Are there any work-arounds?
My current thoughts are to use a relay powered by the USB device which will ensure that the I2C bus only connects to the USB device when it is powered up. This should work but is obviously very inconvenient so was wondering whether there are some other ways of dealing with this?
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Is this normal? Do all the devices connected on an i2C bus have to be powered up all the time for the bus to work? Are there any work-arounds?

No, this is not normal. Usually an inactive device sets it's bus line to high-imp and doesn't affect the bus anymore.

Your description sound a bit like the USB device having the relevant pull-ups installed. Can you provide links to the datasheets of the two devices connected to your bus? And, if possible, a diagram of how you wired everything up?
Logged

the land of sun+snow
Offline Offline
Faraday Member
**
Karma: 159
Posts: 2895
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

The UNO has a 3.3V v.reg on-board, while some of the other boards like Duemilanove do not.
Are you actually using a UNO board or just a UNO chip? What voltage are you measuring at the
3V3 header pin when disconnected from USB?
Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17263
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The UNO has a 3.3V v.reg on-board, while some of the other boards like Duemilanove do not.
Are you actually using a UNO board or just a UNO chip? What voltage are you measuring at the
3V3 header pin when disconnected from USB?

Well the Duemilanove board does have a on-board 3.3vdc voltage regulator supplying the 3.3v pin, but it happens to be mounted inside the FTDI chip and carries a 50ma max output current. Kind of leaves a dilemma for shield developers that need to utilize the 3.3v pin, on if to stick to the 50ma limit specification and be able to work on all legacy arduino boards, or draw the higher current allowed on a current Uno or mega2560 based board that have true on-board 3.3vdc regulators that can safely supply >50ma, and risk damaging older boards if the shield is used with them.

 Interestingly both the current Uno and Mega2560 boards still rate their 3.3vdc shield pin at 50ma max, even thought their on board 3.3vdc can certainly handle more then 50ma max.



Lefty
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


No, this is not normal. Usually an inactive device sets it's bus line to high-imp and doesn't affect the bus anymore.

Your description sound a bit like the USB device having the relevant pull-ups installed. Can you provide links to the datasheets of the two devices connected to your bus? And, if possible, a diagram of how you wired everything up?

The datasheet for the USB device is quite basic but you can see it in the link below:
http://amanero.com/drivers/combo384-D.pdf
I am not having much success in getting my I2C queries resolved by the Designer - he is desperately trying to write a Windows driver for the device.
However, if you follow the information Pins 2 and 12 are SDA/SCL and if you look at the Gerber drawing on Page 5/8, you can see that the two terminals marked TWD.C are connected via two pull-up resistors to the extensive Vcc 3.3V network on the board. With the USB device unpowered, the  3.3V I am supplying on the SDA/SCL lines is effectively powering up the whole 3.3V supply on the board, hence the depression in volts (from 3.3V to 2.0V). I don't see any mechanism for the device to change its pull-up resistors to high impedance. That probably explains what is happening.
There are some poor schematics here. (marked as Combo384 usb/cpld schematics)
http://amanero.com/
In terms of how it is wired up, I need to polish up my drawing skills but it is quite simple, basically Pins A4 and A5 (SDA/SCL) connected to the 3.3V power pin on the Uno via 4.7k resistors and then pins A4/A5 connected to the SDA/SCL terminals of the two devices (+ earth connections). There is no other interconnection between the devices and the Arduino.
Any ideas as to how I might be able to work around this?
Logged

the land of sun+snow
Offline Offline
Faraday Member
**
Karma: 159
Posts: 2895
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Well the Duemilanove board does have a on-board 3.3vdc voltage regulator supplying the 3.3v pin, but it happens to be mounted inside the FTDI chip and carries a 50ma max output current.

Right, I forgot to say that 3V3 goes away on the Duemilanove board when the USB is
disconnected from the PC. No? Hmmm, I thought the 3V3 went away on mine, but now it
seems maybe I was just loading it too much. ???? 50-mA is nothing. [unfortunately, some
guy borrowed my Duemilanove so I cannot check].
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The UNO has a 3.3V v.reg on-board, while some of the other boards like Duemilanove do not.
Are you actually using a UNO board or just a UNO chip? What voltage are you measuring at the
3V3 header pin when disconnected from USB?

I am using the Uno board. The 3.3V pin measures 3.3V when the USB device I2C connections are disconnected or when the USB device is powered up with the I2C connections connected. I haven't actually measured at the 3.3Vpin with the USB disconnected but I am assuming the drop from 3.3v to 2V (1.3V) across the 4.7k resistors is due to a small standing load?
Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17263
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Well the Duemilanove board does have a on-board 3.3vdc voltage regulator supplying the 3.3v pin, but it happens to be mounted inside the FTDI chip and carries a 50ma max output current.

Right, I forgot to say that 3V3 goes away on the Duemilanove board when the USB is
disconnected from the PC. No? Hmmm, I thought the 3V3 went away on mine, but now it
seems maybe I was just loading it too much. ???? 50-mA is nothing. [unfortunately, some
guy borrowed my Duemilanove so I cannot check].

No, the FTDI chip gets it's Vcc from the same +5vdc bus that powers the AVR chip. So if only external (Vin) power is being used the FTDI chip is still powered up and it's 3.3vdc output voltage is still available to the shield pin even though the USB cable is not attached to the board.

Lefty
Logged

the land of sun+snow
Offline Offline
Faraday Member
**
Karma: 159
Posts: 2895
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

OP, without sorting through all the schematics/whatnot, I imagine all that is happening
is the I2C pullup Rs on the Cortex bd are simply dragging down the I2C levels on the UNO
when the Cortex board is not powered. Just voltage-divider action.
Logged

the land of sun+snow
Offline Offline
Faraday Member
**
Karma: 159
Posts: 2895
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
No, the FTDI chip gets it's Vcc from the same +5vdc bus that powers the AVR chip.

Yeah, I just looked at the Duemilanove schematic. I must have overloaded the measly
50-mA.

Hmm, this makes for a real PITN when stacking bds, as you cannot even bypass that
3V3, and supply your own 3.3V power from above. Probably blow the FTDI chip.
« Last Edit: December 05, 2012, 06:12:32 pm by oric_dan(333) » Logged

Left Coast, CA (USA)
Offline Offline
Brattain Member
*****
Karma: 361
Posts: 17263
Measurement changes behavior
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
No, the FTDI chip gets it's Vcc from the same +5vdc bus that powers the AVR chip.

Yeah, I just looked at the Duemilanove schematic. I must have overloaded the measly
50-mA.

Hmm, this makes for a real PITN when stacking bds, as you cannot even bypass that
3V3, and supply your own 3.3V power from above. Probably low the FTDI chip.

That's why you will see on many shield boards that if they require 3.3vdc they don't take it from the shield pin at all but rather mount their own 3.3vdc regulator powered from the 5v pin.

Lefty
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
The datasheet for the USB device is quite basic but you can see it in the link below:
http://amanero.com/drivers/combo384-D.pdf
I am not having much success in getting my I2C queries resolved by the Designer - he is desperately trying to write a Windows driver for the device.

This device doesn't have an I2C bus but an I2S bus. I don't know the I2S bus but it doesn't seem to be compatible with the I2C bus electrically (active high instead of low and high > 2V instead of the >3V of the Arduino). The logical system seems different too. How do you get the impression that this device will be I2C compatible?
Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 7
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


This device doesn't have an I2C bus but an I2S bus. I don't know the I2S bus but it doesn't seem to be compatible with the I2C bus electrically (active high instead of low and high > 2V instead of the >3V of the Arduino). The logical system seems different too. How do you get the impression that this device will be I2C compatible?
The device has both I2S and I2C Buses. The I2S bus is not compatible with the I2C bus and has a completely different function - to transfer audio stream data to the Digital to Analogue converter downstream in the circuit. This is working well.
The I2C bus which presents itself on Terminals 2 and 12 of the device is also functioning well and transmitting event information to the Uno. The Uno is succesfully reading these events and displaying it on the LCD.
The only issue I have is when the device is not powered up, the I2C bus fails.
I believe your original comment was spot-on. This device does not seem to have any means of setting the I2C bus to high impedance when unpowered and has its pull-up resistors in circuit to its 3.3V supply circuitry (which also feeds other items on the board) all the time.
How do devices normally set their I2C bus connections to high impedance when unpowered? Are there any standard solutions?
Many thanks for your help........
Logged

the land of sun+snow
Offline Offline
Faraday Member
**
Karma: 159
Posts: 2895
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
How do devices normally set their I2C bus connections to high impedance when unpowered? Are there any standard solutions?

It should be clear this doesn't matter if the pullup Rs are pulling down to gnd, because
they are not being powered.
Logged

Switzerland
Offline Offline
Faraday Member
**
Karma: 108
Posts: 5144
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
How do devices normally set their I2C bus connections to high impedance when unpowered? Are there any standard solutions?

This is not the problem here, problematic are the pull-ups on board of your device. For an I2C bus pull-ups should be installed only once per bus and not on every device PCB. I would try to remove the pull-ups on the PCB of your amanero device.
Logged

Pages: [1] 2   Go Up
Jump to: