void soft_spi0__write(uint8_t value) { uint8_t i = 8; do { OUT_0(SOFT_SPI0__SCK); if (value & 0x80) OUT_1(SOFT_SPI0__MOSI); else OUT_0(SOFT_SPI0__MOSI); value <<= 1; OUT_1(SOFT_SPI0__SCK); } while (--i); }
void onewire__bus__set(const uint8_t value) { if (value) { OUT_1(ONEWIRE__OUT); // Buffer pull-up pulls up the bus high. } else { OUT_0(ONEWIRE__OUT); // Buffer inverts and drives the bus low. } }
void state_change_pulse_transmitter__run(void) { if (stateChangePulseTimeout != 0) // generating pulse { --stateChangePulseTimeout; if (stateChangePulseTimeout == 0) // just reached 0 - pulse generated { OUT_1(STATE_CHANGE); } } }
int main(void) { soft_spi1__init(); usart0__init(); usart0__rx__enabled__set(1); USE_AS_OUTPUT(LCD__LED); lcd__init(); lcd__clear(); lcd__terminal__reset(); #if !defined(__AVR_ARCH__) #pragma clang diagnostic push #pragma clang diagnostic ignored "-Wmissing-noreturn" #endif for(;;) { uint8_t c = usart0__in__read(); if (c == 0) { lcd__terminal__reset(); } else if (c == 1) { c = usart0__in__read(); lcd__contrast(c); } else if (c == 2) { OUT_1(LCD__LED); } else if (c == 3) { OUT_0(LCD__LED); } else if (c == 13) { } else if (c == 10) { lcd__terminal__line_feed(); } else if (c == 0x1F) { uint8_t count = usart0__in__read(); for (;;) { c = usart0__in__read(); soft_spi1__write(c); if (!(--count)) break; } } else { lcd__terminal__putch(c); } } #if !defined(__AVR_ARCH__) #pragma clang diagnostic pop #endif #if !defined(__AVR_ARCH__) #pragma clang diagnostic push #pragma ide diagnostic ignored "OCDFAInspection" #endif return 0; #if !defined(__AVR_ARCH__) #pragma clang diagnostic pop #endif }
void onewire__bus__init(void) { USE_AS_OUTPUT(ONEWIRE__OUT); OUT_1(ONEWIRE__OUT); }
/** Reads the bit value from the bus */ ISR(timer2__overflow__interrupt__VECTOR, ISR_NAKED) { if (onewire__bus__get()) OUT_1(LED); else OUT_0(LED); reti(); }