diff --git a/TODO b/TODO index d2b91f8..af20ff1 100644 --- a/TODO +++ b/TODO @@ -8,11 +8,14 @@ done - rasten verändern (2.5°C) done - temperaturmaximum evtl reduzieren (80°C?) oderauchnicht done - beide temperaturmaxima gleich - kabel intern besser verwahren -- led beim ausschalten tatsächlich aus -- avr sleeping wenn ausgeschaltet +done - led beim ausschalten tatsächlich aus +done - avr sleeping wenn ausgeschaltet + - schaltung braucht 0.6W am Netzteil + - jetzt nur noch 0.3-0.4W "Langzeittests" - maximale temperatur + - ca. 105°C an der Oberfläche. Chips warsch bei 125°C oderso. 20W am Netzteil. - schmelzen kabel? - machen die schrauben dem tisch probleme? - Auswirkungen auf Tee diff --git a/firmware/cup.c b/firmware/cup.c index 6b99ac8..b726d52 100644 --- a/firmware/cup.c +++ b/firmware/cup.c @@ -2,6 +2,7 @@ #include #include #include +#include #define TEMP_PIN 0 #define IMPULS0_PIN 1 @@ -36,6 +37,7 @@ uint8_t heat_power = 0; // requested heating power; 0..255 uint8_t input_state = 0; uint8_t dev_state = 0; // whether the device is on or off +uint8_t led_is_on = 0; // whether led is on or off; used to start/stop timer 0 #define TOGGLE_TIMEOUT 5 #define TEN_SECONDS 256 @@ -208,6 +210,10 @@ inline void led_init(void) inline void led_set(uint16_t value) { + if(!led_is_on){ + led_init(); + led_is_on = 1; + } uint8_t pwmval; if (LED_GREEN_TEMP <= value && value < LED_RED_TEMP) { pwmval = ((uint32_t) (value-LED_GREEN_TEMP) * 255)/(LED_RED_TEMP-LED_GREEN_TEMP); @@ -222,8 +228,11 @@ inline void led_set(uint16_t value) inline void led_off(void) { - OCR0A = 0; - OCR0B = 255; + led_is_on = 0; + TCCR0B = 0; // stop pwm + TCCR0A = 0; // disconnect outputs; +// OCR0A = 0; +// OCR0B = 255; } inline void adc_init(void) @@ -314,6 +323,10 @@ int main(void) eeprom_write = 0; } + if(!dev_state) { + set_sleep_mode(SLEEP_MODE_IDLE); + sleep_mode(); + } } return 0;