示例#1
0
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);
}
示例#2
0
void main__thread__run(void) {
    onewire__thread__start();
    do {
        if (onewire__thread__is_runnable())
            onewire__thread__run();
    }
    while (onewire__thread__is_alive());
}
示例#3
0
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');
*/
}