void temperature_reader__thread__run(void) { VT_BEGIN(temperature_reader__thread, temperature_reader__thread__ip); timer0__overflow__interrupt__pending__clear(); for (;;) { // led1__set(1); // led2__set(1); onewire__setup_transaction((uint8_t) sizeof(command_convert), 0, command_convert, 0); onewire__transaction(); do { VT_YIELD_WITH_MARK(temperature_reader__thread, temperature_reader__thread__ip, COMMAND_CONVERT); onewire__thread__run(); } while (onewire__thread__is_alive()); // led1__set(1); // led2__set(0); onewire__thread__delay_counter = 46; timer0__conf__set(TIMER0_CONF_PRESCALER_1024|TIMER0_CONF_WGM_NORMAL); for (;;) { VT_YIELD_WITH_MARK(temperature_reader__thread, temperature_reader__thread__ip, SLEEP); timer0__overflow__interrupt__pending__clear(); if (--onewire__thread__delay_counter == 0) break; } // led1__set(0); // led2__set(1); onewire__setup_transaction(sizeof(command), sizeof(response), command, response); onewire__transaction(); do { VT_YIELD_WITH_MARK(temperature_reader__thread, temperature_reader__thread__ip, COMMAND_READ); onewire__thread__run(); } while (onewire__thread__is_alive()); // led1__set(0); // led2__set(0); temperature_reader__reading = (response[0] | (response[1] << 8)) << 4; temperature_reader__reading__on_changed(); // _delay_ms(1); } VT_UNREACHEABLE_END(temperature_reader__thread); }
void main__thread__run(void) { onewire__thread__start(); do { if (onewire__thread__is_runnable()) onewire__thread__run(); } while (onewire__thread__is_alive()); }
void main__thread__run(void) { onewire__command(sizeof(command_convert), 0, command_convert, 0); do { if (onewire__thread__is_runnable()) onewire__thread__run(); // else // sleep_cpu(); } while (onewire__thread__is_alive()); _delay_ms(750); onewire__command(sizeof(command), sizeof(response), command, response); do { if (onewire__thread__is_runnable()) onewire__thread__run(); // else // sleep_cpu(); } while (onewire__thread__is_alive()); display__render_packed(response[1]); uint16_t temperature = (response[0] | (response[1] << 8)) >> 4; display__render_packed((uint8_t)uint9_to_bcd(temperature)); _delay_ms(1); /* display__render_packed(4); uint8_t *r = response; for(uint8_t i = 0; i < DS18X20_SP_SIZE; i++) { debug__print_byte_as_hex(*r++); } display__render_packed(5); debug__print_P(PSTR("CRC: ")); debug__print_byte_as_hex(onewire__crc__get()); debug__putc('\n'); */ }