Reading temperature from DS1631 via I2C

Dependencies:   mbed

Committer:
hoteloskar
Date:
Tue Mar 25 15:20:27 2014 +0000
Revision:
0:b65d2cdf2cc8
First version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
hoteloskar 0:b65d2cdf2cc8 1 #include "mbed.h"
hoteloskar 0:b65d2cdf2cc8 2
hoteloskar 0:b65d2cdf2cc8 3 /***********************************************************************
hoteloskar 0:b65d2cdf2cc8 4 * Read temperature by using DS1631
hoteloskar 0:b65d2cdf2cc8 5 *
hoteloskar 0:b65d2cdf2cc8 6 * Normal I2C-protocol (start,write,..,stop) does NOT work
hoteloskar 0:b65d2cdf2cc8 7 * It has to be used
hoteloskar 0:b65d2cdf2cc8 8 * i2c.write(address,data,length,repeat)
hoteloskar 0:b65d2cdf2cc8 9 * which includes start and stop and a special addressing function
hoteloskar 0:b65d2cdf2cc8 10 ************************************************************************/
hoteloskar 0:b65d2cdf2cc8 11 DigitalOut myled(LED2);
hoteloskar 0:b65d2cdf2cc8 12 DigitalIn button(USER_BUTTON);
hoteloskar 0:b65d2cdf2cc8 13 I2C i2c (PB_9,PB_8); // sda, scl
hoteloskar 0:b65d2cdf2cc8 14
hoteloskar 0:b65d2cdf2cc8 15 int main() {
hoteloskar 0:b65d2cdf2cc8 16 int data;
hoteloskar 0:b65d2cdf2cc8 17 uint16_t cr1;
hoteloskar 0:b65d2cdf2cc8 18 int ack;
hoteloskar 0:b65d2cdf2cc8 19 char data_write[2];
hoteloskar 0:b65d2cdf2cc8 20 char data_read[2];
hoteloskar 0:b65d2cdf2cc8 21 //cr1 = I2C1->CR1;
hoteloskar 0:b65d2cdf2cc8 22 //I2C1->CR2 = 0x0002;
hoteloskar 0:b65d2cdf2cc8 23
hoteloskar 0:b65d2cdf2cc8 24 data_write[0] = 0xEE;
hoteloskar 0:b65d2cdf2cc8 25 ack = i2c.write(0x90, data_write, 1, 0);
hoteloskar 0:b65d2cdf2cc8 26 data_write[0] = 0xAC; // writes the 1-byte configuration register
hoteloskar 0:b65d2cdf2cc8 27 data_write[1] = 0x0F; // 1shot;12bit;pol=1
hoteloskar 0:b65d2cdf2cc8 28 ack = i2c.write(0x90, data_write, 2, 0);
hoteloskar 0:b65d2cdf2cc8 29
hoteloskar 0:b65d2cdf2cc8 30 while(1) {
hoteloskar 0:b65d2cdf2cc8 31 while (button); // start measurement by user_button
hoteloskar 0:b65d2cdf2cc8 32
hoteloskar 0:b65d2cdf2cc8 33 data_write[0] = 0x51; // Initiates temperature conversions
hoteloskar 0:b65d2cdf2cc8 34 ack = i2c.write(0x90, data_write, 1, 0);
hoteloskar 0:b65d2cdf2cc8 35 //printf("%d\n",ack);
hoteloskar 0:b65d2cdf2cc8 36 wait_ms(1000);
hoteloskar 0:b65d2cdf2cc8 37
hoteloskar 0:b65d2cdf2cc8 38 data_write[0] = 0xAA; // Reads last converted temperature value from the 2-byte temperature register
hoteloskar 0:b65d2cdf2cc8 39 ack = i2c.write(0x90, data_write, 1, 1);
hoteloskar 0:b65d2cdf2cc8 40 i2c.read(0x90, data_read, 2, 0);
hoteloskar 0:b65d2cdf2cc8 41
hoteloskar 0:b65d2cdf2cc8 42 data=data_read[0]*100;
hoteloskar 0:b65d2cdf2cc8 43 data=data+(((data_read[1] >> 4 )* 50)/8);
hoteloskar 0:b65d2cdf2cc8 44 printf("%d\n",data);
hoteloskar 0:b65d2cdf2cc8 45 //wait_ms(1000);
hoteloskar 0:b65d2cdf2cc8 46 }
hoteloskar 0:b65d2cdf2cc8 47 }