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

Dependencies:   TextLCD mbed

Committer:
StijnS
Date:
Wed Dec 22 19:41:46 2010 +0000
Revision:
0:5ca9b9abcaf3

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
StijnS 0:5ca9b9abcaf3 1 /*********************************
StijnS 0:5ca9b9abcaf3 2 **Read DS1624 Temperature Sensor**
StijnS 0:5ca9b9abcaf3 3 ******Made by Stijn Sontrop*******
StijnS 0:5ca9b9abcaf3 4 **********22 Dec 2010*************
StijnS 0:5ca9b9abcaf3 5 **********************************/
StijnS 0:5ca9b9abcaf3 6
StijnS 0:5ca9b9abcaf3 7 #include "mbed.h"
StijnS 0:5ca9b9abcaf3 8 #include <TextLCD.h> //Include the TextLCD lib (add this one to your project)
StijnS 0:5ca9b9abcaf3 9
StijnS 0:5ca9b9abcaf3 10
StijnS 0:5ca9b9abcaf3 11 //Address of DS1642: 1001 A2 A1 A0 R/W'
StijnS 0:5ca9b9abcaf3 12 //Example: 0x92 = Sensor with address 1
StijnS 0:5ca9b9abcaf3 13 //Make R/W' 0
StijnS 0:5ca9b9abcaf3 14 #define DS1642WRITEADDR 0x92
StijnS 0:5ca9b9abcaf3 15 //Make R/W' 1
StijnS 0:5ca9b9abcaf3 16 #define DS1642READADDR 0x93
StijnS 0:5ca9b9abcaf3 17
StijnS 0:5ca9b9abcaf3 18 TextLCD lcd(p15, p16, p17, p18, p19, p20); //LCD Config rs, e, d4-d7
StijnS 0:5ca9b9abcaf3 19
StijnS 0:5ca9b9abcaf3 20 I2C i2c(p9, p10); //SDA & SCL from I2C
StijnS 0:5ca9b9abcaf3 21 typedef struct { //Struct that contains the MSB en LSB value
StijnS 0:5ca9b9abcaf3 22 char msb;
StijnS 0:5ca9b9abcaf3 23 char lsb;
StijnS 0:5ca9b9abcaf3 24 } temperature;
StijnS 0:5ca9b9abcaf3 25
StijnS 0:5ca9b9abcaf3 26 //Function that reads the temperature
StijnS 0:5ca9b9abcaf3 27 temperature readDS1624(void) {
StijnS 0:5ca9b9abcaf3 28 temperature readval;
StijnS 0:5ca9b9abcaf3 29 i2c.start();
StijnS 0:5ca9b9abcaf3 30 i2c.write(DS1642WRITEADDR); //address
StijnS 0:5ca9b9abcaf3 31 i2c.write(0xEE); //start conv T
StijnS 0:5ca9b9abcaf3 32 i2c.stop();
StijnS 0:5ca9b9abcaf3 33 wait_ms(2);
StijnS 0:5ca9b9abcaf3 34
StijnS 0:5ca9b9abcaf3 35 i2c.start();
StijnS 0:5ca9b9abcaf3 36 i2c.write(DS1642WRITEADDR); //Address
StijnS 0:5ca9b9abcaf3 37 i2c.write(0xAA); //read temp command
StijnS 0:5ca9b9abcaf3 38 i2c.stop();
StijnS 0:5ca9b9abcaf3 39 wait_ms(1);
StijnS 0:5ca9b9abcaf3 40
StijnS 0:5ca9b9abcaf3 41 i2c.start();
StijnS 0:5ca9b9abcaf3 42 i2c.write(DS1642READADDR); //Write Address
StijnS 0:5ca9b9abcaf3 43 readval.msb = i2c.read(1); //Read MSB + ACK
StijnS 0:5ca9b9abcaf3 44 readval.lsb = i2c.read(0); //Read LSB + No ACK
StijnS 0:5ca9b9abcaf3 45 i2c.stop();
StijnS 0:5ca9b9abcaf3 46 readval.msb = readval.msb - 2; //Apparently you need to do -2 to get the right value
StijnS 0:5ca9b9abcaf3 47 return readval; //Return value
StijnS 0:5ca9b9abcaf3 48 }
StijnS 0:5ca9b9abcaf3 49
StijnS 0:5ca9b9abcaf3 50 int main() {
StijnS 0:5ca9b9abcaf3 51 temperature readval;
StijnS 0:5ca9b9abcaf3 52 i2c.start();
StijnS 0:5ca9b9abcaf3 53 i2c.write(DS1642WRITEADDR); //b1001 A2 A1 A0 R/W'
StijnS 0:5ca9b9abcaf3 54 i2c.write(0xAC); //access config
StijnS 0:5ca9b9abcaf3 55 i2c.write(0x00); //continuous conversion
StijnS 0:5ca9b9abcaf3 56 i2c.stop();
StijnS 0:5ca9b9abcaf3 57
StijnS 0:5ca9b9abcaf3 58 while (1) {
StijnS 0:5ca9b9abcaf3 59 readval = readDS1624(); //Call the readDS162 function
StijnS 0:5ca9b9abcaf3 60 lcd.cls(); //Clear LCD
StijnS 0:5ca9b9abcaf3 61 lcd.printf("Temp: %d\n%d", readval.msb, readval.lsb); //Print values to LCD
StijnS 0:5ca9b9abcaf3 62 wait(0.3);
StijnS 0:5ca9b9abcaf3 63 }
StijnS 0:5ca9b9abcaf3 64 }