Ejemplo n.º 1
0
int16_t lome6_get_temperature (struct ow_rom_code_t *rom) {

	int16_t retval = 0x7FFF;  // error

	// disable interrupts
	uint8_t sreg = SREG;
	cli();

	struct ow_temp_scratchpad_t sp;
	if (ow_temp_read_scratchpad(rom, &sp) != 1)
		goto out;  // scratchpad read failed

	uint16_t temp = ow_temp_normalize(rom, &sp);
	retval = ((int8_t) HI8(temp)) * 10 + HI8(((temp & 0x00ff) * 10) + 0x80);

out:
	sei();
	SREG = sreg;
	return retval;
	
}
Ejemplo n.º 2
0
/*This function will be called every 800 ms*/
void ow_periodic(void) {
	/*At startup we want an immediate discovery*/
	static uint16_t discover_delay = 3;
	if (--discover_delay == 0) {
		discover_delay = OW_DISCOVER_DELAY;
		ow_discover_sensor();
#ifdef DEBUG_OW_POLLING
		for (uint8_t i = 0, k = 0; i < OW_SENSORS_COUNT; i++) {
			if (ow_sensors[i].ow_rom_code.raw != 0) {
				debug_printf("sensor #%d in list is: %02x %02x %02x %02x %02x %02x %02x %02x\n",
						++k,
						ow_sensors[i].ow_rom_code.bytewise[0],
						ow_sensors[i].ow_rom_code.bytewise[1],
						ow_sensors[i].ow_rom_code.bytewise[2],
						ow_sensors[i].ow_rom_code.bytewise[3],
						ow_sensors[i].ow_rom_code.bytewise[4],
						ow_sensors[i].ow_rom_code.bytewise[5],
						ow_sensors[i].ow_rom_code.bytewise[6],
						ow_sensors[i].ow_rom_code.bytewise[7]);
			}
		}
#endif /* DEBUG_OW_POLLING */
	}
	for (uint8_t i = 0; i < OW_SENSORS_COUNT; i++) {
		if (ow_temp_sensor(&ow_sensors[i].ow_rom_code)) {
			if (ow_sensors[i].converted == 1) {
				if (ow_sensors[i].convert_delay == 1)
					ow_sensors[i].convert_delay = 0;
				else {
#ifdef DEBUG_OW_POLLING
					debug_printf("reading temperature\n");
#endif /* DEBUG_OW_POLLING */
					int8_t ret;
					ow_temp_scratchpad_t sp;
					ATOMIC_BLOCK(ATOMIC_RESTORESTATE) {
						ret = ow_temp_read_scratchpad(&ow_sensors[i].ow_rom_code, &sp);
					}
					if (ret != 1) {
#ifdef DEBUG_OW_POLLING
						debug_printf("scratchpad read failed: %d\n", ret);
#endif /* DEBUG_OW_POLLING */
						return;
					}
#ifdef DEBUG_OW_POLLING
					debug_printf("scratchpad read succeeded\n");
#endif /* DEBUG_OW_POLLING */
					int16_t temp = ow_temp_normalize(&ow_sensors[i].ow_rom_code, &sp);
#ifdef DEBUG_OW_POLLING
					debug_printf("temperature: %d.%d\n", HI8(temp), LO8(temp) > 0 ? 5 : 0);
#endif /* DEBUG_OW_POLLING */
					ow_sensors[i].temp = ((int8_t) HI8(temp)) * 10 + HI8(((temp & 0x00ff) * 10) + 0x80);
					ow_sensors[i].converted = 0;
				}
			}
			if (--ow_sensors[i].read_delay == 0 && ow_sensors[i].converted == 0) {
				ow_sensors[i].read_delay = OW_READ_DELAY;
				ow_temp_start_convert_nowait(&ow_sensors[i].ow_rom_code);
				ow_sensors[i].convert_delay = 1;
				ow_sensors[i].converted = 1;
			}
		}
	}
}