int main(void) { led__init(); schedule(); for(;;) { if (timer0__overflow__interrupt__pending__get()) { timer0__overflow__interrupt__pending__clear(); timer0__conf__set(TIMER0_CONF_DEFAULT); led__toggle(); schedule(); } } }
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 schedule(void) { timer0__value__set(0); timer0__conf__set(TIMER0_CONF_PRESCALER_64|TIMER0_CONF_WGM_NORMAL); }
/** * 1-wire thread function. * Invoked when it's time to render new bit on the bus. * Other interrupts in the system should not take much time (say, less than 3uS) not to skrew up 1-wire timings. */ void onewire__thread__run(void) { timer0__overflow__interrupt__pending__clear(); VT_BEGIN(onewire__thread, onewire__thread__ip); // timer0__conf__set(TIMER0_CONF_DEFAULT); led__toggle(); VT_YIELD(onewire__thread, onewire__thread__ip); led__toggle(); VT_YIELD(onewire__thread, onewire__thread__ip); led__toggle(); VT_YIELD(onewire__thread, onewire__thread__ip); led__toggle(); VT_YIELD(onewire__thread, onewire__thread__ip); timer0__conf__set(TIMER0_CONF_DEFAULT); /* onewire__bus__set(0); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); onewire__bus__set(1); timer0__conf__set(TIMER0_CONF_DEFAULT); */ /* onewire__bus__set(0); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); onewire__bus__set(1); timer0__conf__set(TIMER0_CONF_DEFAULT); onewire__bus__set(0); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); onewire__bus__set(1); timer0__conf__set(TIMER0_CONF_DEFAULT); onewire__bus__set(0); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); onewire__bus__set(1); timer0__conf__set(TIMER0_CONF_DEFAULT); */ /* //Render "0" bit onewire__bus__set(0); timer2__compare_a__value__set(238); // 238 timer2__value__set(118); // start from 118, count till 238 = 120, 60uS timer2__conf__set(ONEWIRE__BIT_FORM_TIMER__FAST_CONF); timer2__compare_a__interrupt__enable(); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); timer0__conf__set(TIMER0_CONF_DEFAULT); timer2__conf__set(TIMER2_CONF_DEFAULT); timer2__compare_a__interrupt__disable(); // Render 32uS low pulse onewire__bus__set(0); timer2__compare_a__value__set(238); timer2__value__set(174); // start from 174, count till 238 = 64, 32uS timer2__conf__set(ONEWIRE__BIT_FORM_TIMER__FAST_CONF); timer2__compare_a__interrupt__enable(); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); timer0__conf__set(TIMER0_CONF_DEFAULT); timer2__conf__set(TIMER2_CONF_DEFAULT); timer2__compare_a__interrupt__disable(); // Render "1" bit onewire__bus__set(0); timer2__compare_a__value__set(238); // 238 timer2__value__set(226); // start from 226, count till 238 = 12, 6uS timer2__conf__set(ONEWIRE__BIT_FORM_TIMER__FAST_CONF); timer2__compare_a__interrupt__enable(); timer0__value__set(0); // 0.5uS * 256 = 128uS timeout timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); VT_YIELD(onewire__thread, onewire__thread__ip); timer0__conf__set(TIMER0_CONF_DEFAULT); timer2__conf__set(TIMER2_CONF_DEFAULT); timer2__compare_a__interrupt__disable(); */ onewire__thread__alive__set(false); VT_END(onewire__thread); }
/** Starts the thread */ void onewire__thread__start(void) { VT_INIT(onewire__thread, onewire__thread__ip); onewire__thread__alive__set(true); timer0__conf__set(ONEWIRE__BIT_SPAN_TIMER__FAST_CONF); }
void temperature_reader__thread__start(void) { VT_INIT(temperature_reader__thread, temperature_reader__thread__ip); timer0__conf__set(TIMER0_CONF_PRESCALER_1024|TIMER0_CONF_WGM_NORMAL); }