#include "NXCDefs.h" #define u8 unsigned char #define s8 char #define u16 unsigned int #define s16 int #define u32 unsigned long #define s32 long u8 i2c_ds1631_access_config[]; u8 i2c_ds1631_start_convert[]; u8 i2c_ds1631_read_temp[]; u8 i2c_ds1631_software_por[]; u8 i2c_data[]; sub sense() { s8 result; u8 bytes_ready; u32 count; u8 done; count = 0; asm { arrbuild i2c_ds1631_access_config, 0x90, 0xAC arrbuild i2c_ds1631_start_convert, 0x90, 0x51 arrbuild i2c_ds1631_read_temp , 0x90, 0xAA arrbuild i2c_ds1631_software_por , 0x90, 0x54 } SetSensorType(IN_3, IN_TYPE_LOWSPEED_9V); SetSensorMode(IN_3, IN_MODE_RAW); ResetSensor(IN_3); TextOut(0,50,false,"cfg: "); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedWrite(IN_3, 1, i2c_ds1631_access_config); //NumOut(0,50,false,result); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedRead(IN_3, 1, i2c_data); //NumOut(0,50,false,result); if (result == 0) { NumOut(36,50,false,i2c_data[0]); } else { TextOut(36,50,false,"E"); NumOut(48,50,false,result); Wait(10000); return; } TextOut(0,40,false,"start: "); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedWrite(IN_3, 0, i2c_ds1631_start_convert); //NumOut(36,40,false,result); while (true) { count++; NumOut(0,0,false,count); /* done = false; do { TextOut(0,50,false,"cfg: "); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedWrite(IN_3, 1, i2c_ds1631_access_config); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedRead(IN_3, 1, i2c_data); if (result == 0) { NumOut(36,50,false,i2c_data[0]); done = (i2c_data[0] & 0x80) != 0; } else { TextOut(36,50,false,"E"); NumOut(48,50,false,result); Wait(10000); return; } } while (!done); */ TextOut(0,30,false,"temp:"); Wait(1000); // it takes about 750ms TextOut(36,30,false," "); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedWrite(IN_3, 2, i2c_ds1631_read_temp); //NumOut(0,30,false,result); do { result = LowspeedStatus(IN_3, bytes_ready); } while (result > 0); result = LowspeedRead(IN_3, 2, i2c_data); //NumOut(0,30,false,result); if (result == 0) { if (i2c_data[0] < 128) NumOut(36,30,false,i2c_data[0]); else { TextOut(36,30,false,"-"); NumOut(42,30,false,256-i2c_data[0]); } TextOut(54,30,false,"."); NumOut(60,30,false,(i2c_data[1]*100)/255); } else { TextOut(36,30,false,"E"); NumOut(48,30,false,result); Wait(10000); return; } } } task main() { sense(); }