View previous topic :: View next topic |
Author |
Message |
tienchuan
Joined: 25 Aug 2009 Posts: 175
|
[HELP! ]Problem when interface both Ext EEPROM and DS1307 |
Posted: Wed Jun 26, 2013 8:36 pm |
|
|
Dear all.
I have a problem in my project when trying to interface between PIC18F4680 with both DS1307 and external EEPROM AT24C04A, CCS C version 4.140
Sometime, the data readout from DS1307 is incorrect.
In my header file, I found that defined hardware file for I2C of DS1307 and Ext EEPROM is same Master:
1. Ext EEPROM AT24C04A
Code: |
#ifndef EEPROM_SDA
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
#endif
#use i2c(master, sda=EEPROM_SDA, scl=EEPROM_SCL)
|
2. DS1307
Code: |
#define DS1307_SDA PIN_C4
#define DS1307_SCL PIN_C3
#use i2c(master, sda=DS1307_SDA, scl=DS1307_SCL)
|
when i try to change from "MASTER" to "MULTI_MASTER" for this code, it not run.
In my order, pls show me way if i want to configure them to avoid conflicts.
Thanks all. _________________ Begin Begin Begin !!! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jun 26, 2013 9:12 pm |
|
|
i2c is a multi-drop bus. You can connect many i2c slaves to the same bus.
Each i2c slave has a different address. It's 0xD0 for ds1307 and 0xA0
for the eeprom. There is no conflict.
But, you should have only one #use i2c statement.
Make sure your i2c bus pullup resistors are in the range from 1.6K to 4.7K.
For example, you could use 2.2K pullup resistors. |
|
|
tienchuan
Joined: 25 Aug 2009 Posts: 175
|
|
Posted: Wed Jun 26, 2013 9:48 pm |
|
|
PCM programmer wrote: | i2c is a multi-drop bus. You can connect many i2c slaves to the same bus.
Each i2c slave has a different address. It's 0xD0 for ds1307 and 0xA0
for the eeprom. There is no conflict.
But, you should have only one #use i2c statement.
Make sure your i2c bus pullup resistors are in the range from 1.6K to 4.7K.
For example, you could use 2.2K pullup resistors. |
Thanks PCM programmer.
I changed both to slave but it no change, after i delete one configure #use i2c in ds1307 header file, but it no changed too.
I used 2 R4.7K pullup on bus I2C. _________________ Begin Begin Begin !!! |
|
|
PCM programmer
Joined: 06 Sep 2003 Posts: 21708
|
|
Posted: Wed Jun 26, 2013 10:00 pm |
|
|
Quote: | I changed both to slave |
What does this mean ? Did you remove 'Master' from the #use i2c()
and change it to 'Slave' ? I hope not. |
|
|
tienchuan
Joined: 25 Aug 2009 Posts: 175
|
|
Posted: Wed Jun 26, 2013 10:52 pm |
|
|
PCM programmer wrote: | Quote: | I changed both to slave |
What does this mean ? Did you remove 'Master' from the #use i2c()
and change it to 'Slave' ? I hope not. |
sorry, i careless when write this, i tried change #use i2c of ds1307 or 24c04, not change both. _________________ Begin Begin Begin !!! |
|
|
Ttelmah
Joined: 11 Mar 2010 Posts: 19504
|
|
Posted: Thu Jun 27, 2013 1:11 am |
|
|
Lets take a couple of steps 'back'.
First, an I2C master can always control multiple devices. 'MULTI_MASTER', is for where you put two (or more) masters on one bus.
You just need your I2C setup as a normal MASTER.
Now, you should really simply 'REM' out the I2C setup lines on the second driver. So the bus is setup _once_ in the first driver loaded, and nowhere else.
On the pullups, it all depends on the length of the bus, and the number of devices attached. 4K7, is a fairly 'safe' value for a short bus controlling one device. With two devices, and any length in the bus, a bit lower is generally 'safer'. Go 2K2.
Start by getting your I2C 'setup' line sorted out, and test the bus using the I2C scanner program posted by PCM programmer in the code section. If your hardware is working, it should find both devices. If it doesn't, you have a hardware problem, and this needs to be sorted before worrying about the code.
Best Wishes |
|
|
|