An example program that shows how to read a Maxim DS1631 temperature sensor via the I2C bus and print the results to an LCD.

Dependencies:   TextLCD mbed

Committer:
StijnS
Date:
Wed Dec 22 19:53:51 2010 +0000
Revision:
0:f00aca3e58e1

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
StijnS 0:f00aca3e58e1 1 /*********************************
StijnS 0:f00aca3e58e1 2 **Read DS1631 Temperature Sensor**
StijnS 0:f00aca3e58e1 3 ******Made by Stijn Sontrop*******
StijnS 0:f00aca3e58e1 4 **********22 Dec 2010*************
StijnS 0:f00aca3e58e1 5 **********************************/
StijnS 0:f00aca3e58e1 6
StijnS 0:f00aca3e58e1 7 #include "mbed.h"
StijnS 0:f00aca3e58e1 8 #include <TextLCD.h> //Include the TextLCD lib (add this one to your project)
StijnS 0:f00aca3e58e1 9
StijnS 0:f00aca3e58e1 10 ///DS1631 Address:
StijnS 0:f00aca3e58e1 11 //Formation: 1001 A2 A1 A0 R/W'
StijnS 0:f00aca3e58e1 12 //Write: Make R/W' 0
StijnS 0:f00aca3e58e1 13 #define DS1631WRITEADDRESS 0x90
StijnS 0:f00aca3e58e1 14 //Read: Make R/W' 1
StijnS 0:f00aca3e58e1 15 #define DS1631READADDRESS 0x91
StijnS 0:f00aca3e58e1 16
StijnS 0:f00aca3e58e1 17 TextLCD lcd(p15, p16, p17, p18, p19, p20); //LCD config rs, e, d4-d7
StijnS 0:f00aca3e58e1 18
StijnS 0:f00aca3e58e1 19 I2C i2c(p9, p10); //SDA & SCL from I2C
StijnS 0:f00aca3e58e1 20 typedef struct { //Struct to contain read values
StijnS 0:f00aca3e58e1 21 char msb;
StijnS 0:f00aca3e58e1 22 char lsb;
StijnS 0:f00aca3e58e1 23 } temperature;
StijnS 0:f00aca3e58e1 24
StijnS 0:f00aca3e58e1 25 temperature readds1631(void) {
StijnS 0:f00aca3e58e1 26 temperature readval;
StijnS 0:f00aca3e58e1 27 i2c.start();
StijnS 0:f00aca3e58e1 28 i2c.write(DS1631WRITEADDRESS);
StijnS 0:f00aca3e58e1 29 i2c.write(0xAA); //Read the temperature
StijnS 0:f00aca3e58e1 30 i2c.stop();
StijnS 0:f00aca3e58e1 31 wait_ms(1);
StijnS 0:f00aca3e58e1 32 i2c.start();
StijnS 0:f00aca3e58e1 33 i2c.write(DS1631READADDRESS);
StijnS 0:f00aca3e58e1 34 readval.msb = i2c.read(1); //Read the MSB (and do an ACK)
StijnS 0:f00aca3e58e1 35 readval.lsb = i2c.read(0); //Read the LSB (and don't do an ACK)
StijnS 0:f00aca3e58e1 36 i2c.stop();
StijnS 0:f00aca3e58e1 37 readval.msb = readval.msb - 2; //Apparently you need to do -2 to get the right value
StijnS 0:f00aca3e58e1 38 return readval; //Return the value
StijnS 0:f00aca3e58e1 39 }
StijnS 0:f00aca3e58e1 40
StijnS 0:f00aca3e58e1 41 int main() {
StijnS 0:f00aca3e58e1 42 temperature readval;
StijnS 0:f00aca3e58e1 43 i2c.start();
StijnS 0:f00aca3e58e1 44 i2c.write(DS1631WRITEADDRESS); //address
StijnS 0:f00aca3e58e1 45 i2c.write(0xAC); //config reg
StijnS 0:f00aca3e58e1 46 i2c.write(0x02); //config
StijnS 0:f00aca3e58e1 47 i2c.stop();
StijnS 0:f00aca3e58e1 48
StijnS 0:f00aca3e58e1 49 //Start conversion:
StijnS 0:f00aca3e58e1 50 i2c.start();
StijnS 0:f00aca3e58e1 51 i2c.write(DS1631WRITEADDRESS);
StijnS 0:f00aca3e58e1 52 i2c.write(0x51); //start conversion
StijnS 0:f00aca3e58e1 53 i2c.stop();
StijnS 0:f00aca3e58e1 54 while(1) {
StijnS 0:f00aca3e58e1 55 readval = readds1631(); //Call the readds1631 function
StijnS 0:f00aca3e58e1 56 lcd.cls(); //Clear the LCD
StijnS 0:f00aca3e58e1 57 lcd.printf("Temp: %d\nLSB:%d", readval.msb, readval.lsb);
StijnS 0:f00aca3e58e1 58 wait(0.3);
StijnS 0:f00aca3e58e1 59 }
StijnS 0:f00aca3e58e1 60 }