#define F_CPU 8000000UL #include #include #include #include #include #include #include #include #define BAUDRATE 9600 #define NTCBETA 3600 #define ONTEMP 4.0 // °C #define OFFTEMP 2.0 // °C #define ONTIME 60 // sec #define OFFTIME 180 // sec // attiny48 // pins // 1 : PB5 reset, ADC0 // 2 : PB3 ADC3 / COMPRESSOR // 3 : PB4 ADC2 / CAP // 4 : gnd // 5 : PB0 Mosi, AREF // 6 : PB1 Miso / TX // 7 : PB2 SCK, ADC1 / NTC // 8 : VCC #define COMPPIN PINB #define COMPDDR DDRB #define COMPPORT PORTB #define COMPBIT 3 #define CAPPIN PINB #define CAPDDR DDRB #define CAPPORT PORTB #define CAPBIT 4 #define NTCPIN PINB #define NTCPORT PORTB #define NTCDDR DDRB #define NTCMUX 1 #define NTCBIT 2 #define UARTTXPIN PINB #define UARTTXPORT PORTB #define UARTTXDDR DDRB #define UARTTXBIT 1 // // // // volatile uint32_t secs = 0; volatile uint32_t cycles = 0; volatile uint8_t status = 0; volatile uint16_t tstatus = 0; void usart_bitdelay() { _delay_us(1000000/BAUDRATE); // 1e6 us / baudrate } void usart_putchar(char data) { // 0 start, LSB...MSB, 1 stop uint8_t i; // start bit, 0 UARTTXPORT &= ~(1 << UARTTXBIT); usart_bitdelay(); // 8 data bits for (i = 0; i < 7; i++) { if (data && 0x01) { // 1 UARTTXPORT |= (1 << UARTTXBIT); } else // 0 UARTTXPORT &= ~(1 << UARTTXBIT); } data = (data >> 1); usart_bitdelay(); } // stop bit, 1 UARTTXPORT |= (1 << UARTTXBIT); usart_bitdelay(); } static FILE mystdout = FDEV_SETUP_STREAM(usart_putchar, NULL, _FDEV_SETUP_WRITE); void getTemp() { nop(); } void printData() { uint32_t lsecs; uint16_t lhours; uint8_t lmins; uint8_t lstatus; uint16_t ltstatus; double ltemp; ATOMIC_BLOCK(ATOMIC_RESTORESTATE) { lsecs = secs; lstatus = status; ltstatus = tstatus; }; lhours = lsecs / 3600; lsecs = lsecs - (lhours * 3600); lmins = lsecs / 60; lsecs = lsecs - (lmins * 60); // xx_hour : xx_min : xx_sec _ _ Temp: +/- xx.x °C _ _ Status: [_on|off|_LO|] _ _ Since: xxxxx sec \n printf_P("%05d:%02d:%02d ", lhours, lmins, lsecs); printf_P("Temperature: % 05.1f °C ", ltemp); printf_P("Status: %s ", lstatus); printf_P("Since: %5d secs\n", ltstatus); } int main(void) { // set compressor pin to output, set to low COMPDDR |= (1<