Hallo,
Das ist denkbar einfach(Dattenblatt zu DS hast Du ?), so ein DS1621 hat 3 ? Adresspins,
wenn alle 3 auf Low liegen hat er die adresse 0x90, Du kannst auch welche auf High legen, dadurch änderst Du die Adressen(steht im Dattenblatt, wie die Werte zusammenkommen)
Wichtig ist, daß Du keine 2 mit gleicher Adresse hast
Dann besorgst Du Dir die i2cmaster lib von hier
Es gibt da zwar TWI und USI, je nach Controller, aber die lib von Peter Fleury ist erste Sahne; klein, schnell, gut.
Jetzt mußt Du alle DS1621 "in den Hintern treten" um die Messung zu starten.
Man sendet 0xEE an alle Bausteine.
Mit der lib von Fleury z.B. so:
Code:
#define I2CTHERMO 0x90
#define STARTCONVERT 0xEE
...
unsigned char i2cstatus;
i2cstatus = i2c_start(I2CTHERMO+I2C_WRITE);
if (i2cstatus){
LCD_puts("Error");
i2c_stop();
} else {
i2c_write(STARTCONVERT);
i2c_stop();
LCD_puts("Convert starting...");
so Werte abholen:
Code:
#define GETTEMP 0xAA
...
...
i2c_start_wait(I2CTHERMO+I2C_WRITE);
i2c_write(GETTEMP);
i2c_rep_start(I2CTHERMO+I2C_READ);
i2cpuffer[0] = i2c_readAck();
i2cpuffer[1] = i2c_readNak();
i2c_stop();
in i2cpuffer[0] steht die Temperatur drin, in i2cpuffer[1] die 0,5 Grad
Einfach ?
Am besten probierst Du erstmal mit einem Baustein...
Und die Pullups am Bus nicht vergessen, sonst klappt es nicht!
Gruß Sebastian
P.S. Es gibt noch andere schöne Sachen, die Du mit dem DS1621 machen kannst, wie Thermostatfunktion usw.
Was man Ihm dann zuflüstern muß kannst Du auch in Dattenblatt nachschlagen.
Wenn noch fragen offen sind, dann frag einfach
Lesezeichen