38 #include "dev/sht11/sht11.h" 39 #include "sht11-arch.h" 45 #define PRINTF(...) printf(__VA_ARGS__) 51 #define SDA_0() (SHT11_PxDIR |= BV(SHT11_ARCH_SDA)) 52 #define SDA_1() (SHT11_PxDIR &= ~BV(SHT11_ARCH_SDA)) 53 #define SDA_IS_1 (SHT11_PxIN & BV(SHT11_ARCH_SDA)) 55 #define SCL_0() (SHT11_PxOUT &= ~BV(SHT11_ARCH_SCL)) 56 #define SCL_1() (SHT11_PxOUT |= BV(SHT11_ARCH_SCL)) 59 #define STATUS_REG_W 0x06 60 #define STATUS_REG_R 0x07 61 #define MEASURE_TEMP 0x03 62 #define MEASURE_HUMI 0x05 67 #define delay_400ns() _NOP() 94 for(i = 0; i < 9 ; i++) {
109 unsigned char c = _c;
113 for(i = 0; i < 8; i++, c <<= 1) {
139 unsigned char c = 0x00;
142 for(i = 0; i < 8; i++) {
168 rev8bits(
unsigned char v)
173 for (v >>= 1; v; v >>= 1) {
184 crc8_add(
unsigned acc,
unsigned byte)
188 for(i = 0; i < 8; i++) {
190 acc = (acc << 1) ^ 0x31;
218 SHT11_PxSEL &= ~(BV(SHT11_ARCH_SDA) | BV(SHT11_ARCH_SCL));
219 #if defined(__MSP430_HAS_MSP430X_CPU__) || defined(__MSP430_HAS_MSP430XV2_CPU__) 220 SHT11_PxREN &= ~(BV(SHT11_ARCH_SDA) | BV(SHT11_ARCH_SCL));
224 SHT11_PxOUT |= BV(SHT11_ARCH_PWR);
225 SHT11_PxOUT &= ~(BV(SHT11_ARCH_SDA) | BV(SHT11_ARCH_SCL));
226 SHT11_PxDIR |= BV(SHT11_ARCH_PWR) | BV(SHT11_ARCH_SCL);
239 SHT11_PxOUT &= ~BV(SHT11_ARCH_PWR);
240 SHT11_PxOUT &= ~(BV(SHT11_ARCH_SDA) | BV(SHT11_ARCH_SCL));
241 SHT11_PxDIR |= BV(SHT11_ARCH_PWR) | BV(SHT11_ARCH_SCL);
253 if(cmd != MEASURE_HUMI && cmd != MEASURE_TEMP) {
254 PRINTF(
"Illegal command: %d\n", cmd);
260 PRINTF(
"SHT11: scmd - swrite failed\n");
264 for(n = 0; n < 20000; n++) {
266 unsigned t0, t1, rcrc;
270 PRINTF(
"SHT11: scmd - read %d, %d\n", t0, t1);
274 crc = crc8_add(0x0, cmd);
275 crc = crc8_add(crc, t0);
276 crc = crc8_add(crc, t1);
277 if(crc != rev8bits(rcrc)) {
278 PRINTF(
"SHT11: scmd - crc check failed %d vs %d\n",
279 crc, rev8bits(rcrc));
284 return (t0 << 8) | t1;
300 return scmd(MEASURE_TEMP);
309 return scmd(MEASURE_HUMI);
319 if(!swrite(STATUS_REG_R)) {
329 crc = crc8_add(0x0, STATUS_REG_R);
330 crc = crc8_add(crc, sreg);
331 if (crc != rev8bits(rcrc))
346 sht11_set_sreg(
unsigned sreg)
349 if(!swrite(STATUS_REG_W)) {
void clock_wait(clock_time_t i)
Wait for a given number of ticks.