Was Note 6 auf Seite 3/15 sagt ist mir net ganz klar.
Scheint aber ein normaler I2C-Sklave mit max 100kHz zu sein.
Ob das TWI der AVRs ein pulldown von SCL korrekt handhabt weiß ich net, aber ich geh mal davon aus.
Teste mal mit kleiner TWI-Frequenz, 50kHz zB.
Nach power up ist's immer ratsam was zu warten, mintestens 10ms, um die Slaves hochkommen zu lassen.
Und spendier mal Kondensatoren zum Entkoppeln: 100nF Keramik für jeden IC.
In twimaster.c:
Code:
#define F_CPU ...
#define SCL_CLOCK ...
Code:
#define ADDR_DS1307 0xd0
unsigned char reg_addr;
unsigned char data[n];
...
i2c_init();
// dummy write to set address
i2c_start (ADDR_DS1307 | I2C_WRITE);
i2c_write (reg_addr);
i2c_stop();
// read
i2c_start (ADDR_DS1307 | I2C_READ);
data[0] = i2c_readAck ();
data[1] = i2c_readAck ();
...
data[n-2] = i2c_readAck ();
data[n-1] = i2c_readNak ();
i2c_stop();
Mag sein, daß es in einem einzigen Transfer zu machen ist, da ist das Sheet irgendwie unklar.
Code:
i2c_start (ADDR_DS1307 | I2C_READ);
i2c_write (reg_addr);
data[0] = i2c_readAck ();
data[1] = i2c_readAck ();
...
data[n-2] = i2c_readAck ();
data[n-1] = i2c_readNak ();
i2c_stop();
Lesezeichen