View previous topic :: View next topic |
Author |
Message |
brenato
Joined: 21 Oct 2013 Posts: 1
|
Multiple LM75 addressing and reaching |
Posted: Mon Oct 21, 2013 1:21 am |
|
|
Hi all!
I have troubles with accessing multiple LM75 ics on i2c bus.
I made PCB with 5K pullups for SDA and SDL too.
I made addressing in
Code: |
#DEFINE LM75a 0x9e //sens nr3
#DEFINE LM75b 0x96 //sens nr2
#DEFINE LM75c 0x9c //sens nr1
#DEFINE LM75d 0x90 //sens nr0
//1001 A0 A1 A2 + write 0 or read 1
// 9 0 0 0 0 =90h
// 9 1 1 1 0 =9Eh |
When I choose LM75 I do the follow:
Code: |
t1=gettemperature(lm75d);
void lm75_setandread(void)
{
i2c_start();
i2c_write(i2caddr);
i2c_write(0x00); // Pointer Byte
i2c_start();
i2c_write(i2caddr | 1);
dataH = i2c_read(); // with ACK
dataL = i2c_read(0); // with NOACK
i2c_stop();
}
|
My problem is that I can read each lm75 until I plug more then 1 device to the bus.
I made hardware config for A0-A2 pins. All ICs for different address.
If I connect just 1 from 4 then I can read the correct temperature value from each chip, each address. But when I connect 2 or more chip to the i2c bus then I have no data from chips.
What can be the problem? |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19550
|
|
Posted: Mon Oct 21, 2013 2:22 am |
|
|
You may well need lower pull-ups.
There are two 'limits' to the pull up resistors:
1) Minimum value - simple DC calculation based on the drive capabilities of the chips. Normally about 1.2KR, for a 'minimum rated' driver at 5v. Can be lower with lower supply voltage, and for many more powerful drivers.
2) Maximum value - depends on the speed being used, and the bus capacitance. Key thing here is that the bus capacitance will go up as you add more devices.... 4K7 is typically used for short I2C busses with just one device. 2K2 to 2K5, is normally needed for a 'slow' bus with multiple devices, while for a high speed bus with multiple devices, look at values more like 1K5.
It may just be that your wiring has significant capacitance, and adding another device is not allowing the line to get high quickly enough.
Forget your code for a moment, use PCM_programmers 'scanner' program, and test what it say. If it fails with multiple devices, lower the pull up resistors, and try again, till it finds all four devices. If the resistance if having to go very low (towards the minimum with all the devices), then try to work out ways of reducing your wiring capacitance....
Best Wishes |
|
|
temtronic
Joined: 01 Jul 2010 Posts: 9245 Location: Greensville,Ontario
|
|
Posted: Mon Oct 21, 2013 5:31 am |
|
|
I have to agree with 'T' on this! I've run 4 sensors like your setup and needed to use 3K3r to get reliable communications using 5V PICs.
Like 'T' says, run the 'scanner' program first. It'll confirm your hardware is good and any problems after that could be software.
hth
jay |
|
|
|