Hallo,
ich habe mal wieder Probleme mit meinem DS1631 und hoffe iihr könnt mir
nochmal helfen.
Die Kommunikation über I2C mit meinem ATMega2561 läuft und ich kann
beide Temperaturregister auslesen. Dazu habe ich den Code von Peter
Fleury genommen.
Laut Datenblatt sollen Ro und R1 nach dem Power Up "1" sein, also sollte
ich eine 12 Bit Auflösung erhalten. Zurzeit habe ich aber nur eine 9 Bit
Auflösung.
Die Initilaliesrung mach ich wie folgt
1 | void DS1631_init(void)
|
2 | {
|
3 | i2c_init();
|
4 | i2c_start(DS1631_ADDRESS + I2C_WRITE); // 0x90
|
5 | i2c_write(0xAC); // Access Config
|
6 | i2c_write(0x08); // nur R0 und R1 setzen
|
7 | i2c_stop();
|
8 | _delay_ms(200);
|
9 | }
|
Und das Auslesen der Temperatur
1 | int16_t DS1631_temperatur(void)
|
2 | {
|
3 |
|
4 | i2c_start(DS1631_ADDRESS + I2C_WRITE);
|
5 | i2c_write(0xAA); // Read Temp
|
6 | i2c_stop();
|
7 | i2c_start(DS1631_ADDRESS + I2C_READ);
|
8 | temperatur = i2c_readAck(); // MS Byte lesen
|
9 | temperatur = temperatur<<8; // Bit shift 8 nach links
|
10 | temperatur |= i2c_readNak(); // LS Byte lesen
|
11 | return temperatur;
|
12 | }
|
Wo habe ich meinen Gedankenfehler?
Es scheint ehal zu sein ob ich die R0 und R1 setzte oder nicht, ich
erhalte immer 9 Bit anstatt 12 Bit. Auch ein Neustart des DS1631 von
Hand vor dem Init hat nicht geholfen.
Gruß
Carsten