From 3d65b42a63efe1544ae6ef526c61807c2c0abeb7 Mon Sep 17 00:00:00 2001 From: DWW Date: Sun, 13 Mar 2022 14:43:55 +0200 Subject: [PATCH] Fix animation stuttering. --- ATtiny84_LED_PC.c | 93 +++++++++++++++++++++++++++-------------------- 1 file changed, 53 insertions(+), 40 deletions(-) diff --git a/ATtiny84_LED_PC.c b/ATtiny84_LED_PC.c index f5c55b4..2b9079a 100644 --- a/ATtiny84_LED_PC.c +++ b/ATtiny84_LED_PC.c @@ -72,7 +72,7 @@ uint64_t old_time_ms = 0; // ms Counter Func ISR(TIM1_CAPT_vect) { - ++ms; + ms += 100; } // NeoPixel Funcs @@ -447,9 +447,9 @@ void init() init_display(); #endif - // TIM1 init - TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS10); - ICR1 = (F_CPU / 1000) - 1; + // TIM1 init - prescaler 64 + TCCR1B = (1 << WGM13) | (1 << WGM12) | (1 << CS11) | (1 << CS10); + ICR1 = (F_CPU / 64 / 100) - 1; TIMSK1 = (1 << ICIE1); sei(); } @@ -459,33 +459,43 @@ void sun_and_moon(uint8_t count, uint8_t* idx, uint8_t colour, uint8_t led) uint8_t i; uint8_t colour1[3] = {0xFF, 0x80, 0x00}; uint8_t colour2[3] = {0x00, 0x80, 0xFF}; + uint8_t min; + uint8_t max; if (*idx <= count / 2) { - for (i = 0; i < count; ++i) + min = *idx; + max = *idx + count / 2; + + for (i = 0; i < min; ++i) { - if ((i < *idx) || (i >= *idx + count / 2)) - { - send_pixel(colour1[0], colour1[1], colour1[2], led); - } - else - { - send_pixel(colour2[0], colour2[1], colour2[2], led); - } + send_pixel(colour1[0], colour1[1], colour1[2], led); + } + for (i = min; i < max; ++i) + { + send_pixel(colour2[0], colour2[1], colour2[2], led); + } + for (i = max; i < count; ++i) + { + send_pixel(colour1[0], colour1[1], colour1[2], led); } } else { - for (i = 0; i < count; ++i) + min = *idx - count / 2; + max = *idx; + + for (i = 0; i < min; ++i) { - if ((i < *idx) && (i >= *idx - count / 2)) - { - send_pixel(colour1[0], colour1[1], colour1[2], led); - } - else - { - send_pixel(colour2[0], colour2[1], colour2[2], led); - } + send_pixel(colour2[0], colour2[1], colour2[2], led); + } + for (i = min; i < max; ++i) + { + send_pixel(colour1[0], colour1[1], colour1[2], led); + } + for (i = max; i < count; ++i) + { + send_pixel(colour2[0], colour2[1], colour2[2], led); } } (*idx)++; @@ -498,29 +508,32 @@ void clock_bg(uint8_t count, uint8_t* idx, uint8_t colour, uint8_t led) uint8_t colour1[3] = {0xFF, 0x80, 0x00}; uint8_t colour2[3] = {0x00, 0x80, 0xFF}; - uint8_t* main_colour; - uint8_t* bg_colour; - - if (0 == colour) + if (colour == 0) { - main_colour = colour1; - bg_colour = colour2; + for (i = 0; i < count; ++i) + { + if (i == *idx) + { + send_pixel(colour1[0], colour1[1], colour1[2], led); + } + else + { + send_pixel(colour2[0], colour2[1], colour2[2], led); + } + } } else { - main_colour = colour2; - bg_colour = colour1; - } - - for (i = 0; i < count; ++i) - { - if (i == *idx) + for (i = 0; i < count; ++i) { - send_pixel(main_colour[0], main_colour[1], main_colour[2], led); - } - else - { - send_pixel(bg_colour[0], bg_colour[1], bg_colour[2], led); + if (i == *idx) + { + send_pixel(colour2[0], colour2[1], colour2[2], led); + } + else + { + send_pixel(colour1[0], colour1[1], colour1[2], led); + } } }