555

Dependencies:   mbed

Committer:
yunfei
Date:
Sun May 03 01:18:30 2015 +0000
Revision:
0:1e8f259cef5b
555

Who changed what in which revision?

UserRevisionLine numberNew contents of line
yunfei 0:1e8f259cef5b 1 #include "mbed.h"
yunfei 0:1e8f259cef5b 2
yunfei 0:1e8f259cef5b 3 #define LM75_REG_TEMP (0x00) // Temperature Register
yunfei 0:1e8f259cef5b 4 #define LM75_REG_CONF (0x01) // Configuration Register
yunfei 0:1e8f259cef5b 5 #define LM75_ADDR (0x90) // LM75 address
yunfei 0:1e8f259cef5b 6
yunfei 0:1e8f259cef5b 7 I2C i2c(I2C_SDA, I2C_SCL);
yunfei 0:1e8f259cef5b 8
yunfei 0:1e8f259cef5b 9 DigitalOut myled(LED1);
yunfei 0:1e8f259cef5b 10
yunfei 0:1e8f259cef5b 11 Serial pc(SERIAL_TX, SERIAL_RX);
yunfei 0:1e8f259cef5b 12
yunfei 0:1e8f259cef5b 13 volatile char TempCelsiusDisplay[] = "+abc.d C";
yunfei 0:1e8f259cef5b 14
yunfei 0:1e8f259cef5b 15 int main()
yunfei 0:1e8f259cef5b 16 {
yunfei 0:1e8f259cef5b 17
yunfei 0:1e8f259cef5b 18 char data_write[2];
yunfei 0:1e8f259cef5b 19 char data_read[2];
yunfei 0:1e8f259cef5b 20
yunfei 0:1e8f259cef5b 21 /* Configure the Temperature sensor device STLM75:
yunfei 0:1e8f259cef5b 22 - Thermostat mode Interrupt
yunfei 0:1e8f259cef5b 23 - Fault tolerance: 0
yunfei 0:1e8f259cef5b 24 */
yunfei 0:1e8f259cef5b 25 data_write[0] = LM75_REG_CONF;
yunfei 0:1e8f259cef5b 26 data_write[1] = 0x02;
yunfei 0:1e8f259cef5b 27 int status = i2c.write(LM75_ADDR, data_write, 2, 0);
yunfei 0:1e8f259cef5b 28 if (status != 0) { // Error
yunfei 0:1e8f259cef5b 29 while (1) {
yunfei 0:1e8f259cef5b 30 myled = !myled;
yunfei 0:1e8f259cef5b 31 wait(0.2);
yunfei 0:1e8f259cef5b 32 }
yunfei 0:1e8f259cef5b 33 }
yunfei 0:1e8f259cef5b 34
yunfei 0:1e8f259cef5b 35 while (1) {
yunfei 0:1e8f259cef5b 36 // Read temperature register
yunfei 0:1e8f259cef5b 37 data_write[0] = LM75_REG_TEMP;
yunfei 0:1e8f259cef5b 38 i2c.write(LM75_ADDR, data_write, 1, 1); // no stop
yunfei 0:1e8f259cef5b 39 i2c.read(LM75_ADDR, data_read, 2, 0);
yunfei 0:1e8f259cef5b 40
yunfei 0:1e8f259cef5b 41 // Calculate temperature value in Celcius
yunfei 0:1e8f259cef5b 42 int tempval = (int)((int)data_read[0] << 8) | data_read[1];
yunfei 0:1e8f259cef5b 43 tempval >>= 7;
yunfei 0:1e8f259cef5b 44 if (tempval <= 256) {
yunfei 0:1e8f259cef5b 45 TempCelsiusDisplay[0] = '+';
yunfei 0:1e8f259cef5b 46 } else {
yunfei 0:1e8f259cef5b 47 TempCelsiusDisplay[0] = '-';
yunfei 0:1e8f259cef5b 48 tempval = 512 - tempval;
yunfei 0:1e8f259cef5b 49 }
yunfei 0:1e8f259cef5b 50
yunfei 0:1e8f259cef5b 51 // Decimal part (0.5°C precision)
yunfei 0:1e8f259cef5b 52 if (tempval & 0x01) {
yunfei 0:1e8f259cef5b 53 TempCelsiusDisplay[5] = 0x05 + 0x30;
yunfei 0:1e8f259cef5b 54 } else {
yunfei 0:1e8f259cef5b 55 TempCelsiusDisplay[5] = 0x00 + 0x30;
yunfei 0:1e8f259cef5b 56 }
yunfei 0:1e8f259cef5b 57
yunfei 0:1e8f259cef5b 58 // Integer part
yunfei 0:1e8f259cef5b 59 tempval >>= 1;
yunfei 0:1e8f259cef5b 60 TempCelsiusDisplay[1] = (tempval / 100) + 0x30;
yunfei 0:1e8f259cef5b 61 TempCelsiusDisplay[2] = ((tempval % 100) / 10) + 0x30;
yunfei 0:1e8f259cef5b 62 TempCelsiusDisplay[3] = ((tempval % 100) % 10) + 0x30;
yunfei 0:1e8f259cef5b 63
yunfei 0:1e8f259cef5b 64 // Display result
yunfei 0:1e8f259cef5b 65 pc.printf("temp = %s\n", TempCelsiusDisplay);
yunfei 0:1e8f259cef5b 66 myled = !myled;
yunfei 0:1e8f259cef5b 67 wait(1.0);
yunfei 0:1e8f259cef5b 68 }
yunfei 0:1e8f259cef5b 69
yunfei 0:1e8f259cef5b 70 }
yunfei 0:1e8f259cef5b 71