A small library to read the tempature from ds1621(with little changes all those ds162x) devices over I2C.
ds1621.cpp@1:eda09b9ea6e2, 2010-11-02 (annotated)
- Committer:
- nullsub
- Date:
- Tue Nov 02 22:35:35 2010 +0000
- Revision:
- 1:eda09b9ea6e2
- Parent:
- 0:0687b136fcab
still not testet and full of bugs
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
nullsub | 0:0687b136fcab | 1 | #include "ds1621.h" |
nullsub | 0:0687b136fcab | 2 | |
nullsub | 0:0687b136fcab | 3 | static I2C* i2c; |
nullsub | 0:0687b136fcab | 4 | |
nullsub | 0:0687b136fcab | 5 | I2C * init_tempature(I2C *interface) { |
nullsub | 0:0687b136fcab | 6 | i2c = interface; |
nullsub | 0:0687b136fcab | 7 | if (i2c == NULL) { |
nullsub | 0:0687b136fcab | 8 | i2c = new I2C(p28,p27); |
nullsub | 0:0687b136fcab | 9 | } |
nullsub | 0:0687b136fcab | 10 | i2c->frequency(100000);//100khz |
nullsub | 0:0687b136fcab | 11 | |
nullsub | 0:0687b136fcab | 12 | return i2c; |
nullsub | 0:0687b136fcab | 13 | } |
nullsub | 0:0687b136fcab | 14 | /*FIXME: return a float or something instead of a lousy string*/ |
nullsub | 0:0687b136fcab | 15 | void get_tempature(unsigned int adress, char * s) { // adress of the i2c ds1621 sensor, char buffer to contain the |
nullsub | 0:0687b136fcab | 16 | unsigned char TempH, TempL; |
nullsub | 0:0687b136fcab | 17 | int8_t data; |
nullsub | 0:0687b136fcab | 18 | adress &= 0x0E; |
nullsub | 0:0687b136fcab | 19 | data = 0xEE; |
nullsub | 0:0687b136fcab | 20 | i2c->write(DS1621_Write|adress,(char *)&data,sizeof(data)); |
nullsub | 0:0687b136fcab | 21 | data = 0xAA; |
nullsub | 0:0687b136fcab | 22 | i2c->write(DS1621_Write|adress,(char *)&data,sizeof(data)); |
nullsub | 0:0687b136fcab | 23 | |
nullsub | 0:0687b136fcab | 24 | i2c->read(DS1621_Read|adress,(char *)&TempH,sizeof(TempH),1); |
nullsub | 0:0687b136fcab | 25 | i2c->read(DS1621_Read|adress,(char *)&TempL,sizeof(TempL),0); |
nullsub | 0:0687b136fcab | 26 | |
nullsub | 0:0687b136fcab | 27 | pc.printf("temph = 0x%x, TempL = 0x%x",TempH,TempL); |
nullsub | 0:0687b136fcab | 28 | /*itoa(TempH,s,10); // convert to string |
nullsub | 0:0687b136fcab | 29 | while (*s) { |
nullsub | 0:0687b136fcab | 30 | s++; // goto end of string |
nullsub | 0:0687b136fcab | 31 | } |
nullsub | 0:0687b136fcab | 32 | *s++ = '.'; |
nullsub | 0:0687b136fcab | 33 | if (TempL == 0x80) { |
nullsub | 0:0687b136fcab | 34 | *s++ = '5'; |
nullsub | 0:0687b136fcab | 35 | |
nullsub | 0:0687b136fcab | 36 | } else { |
nullsub | 0:0687b136fcab | 37 | *s++ = '0'; |
nullsub | 0:0687b136fcab | 38 | } |
nullsub | 0:0687b136fcab | 39 | *s = 0x00; //mark endo of string*/ |
nullsub | 0:0687b136fcab | 40 | } |