diff --git a/main.c b/main.c index a830f35..1ad2521 100644 --- a/main.c +++ b/main.c @@ -1,7 +1,13 @@ -#define F_CPU 1000000UL +//#pragma GCC push_options +//#pragma GCC optimize ("O0") +#define F_CPU 8000000UL #include #include #include +#include + + + #define PATTERN_COUNT 4 #define attiny45 @@ -13,16 +19,18 @@ typedef struct int time_hold; }rgbval; volatile uint16_t ms; -volatile int counts; - - +volatile uint16_t counts; +void InitTimer0(void); +void InitTimer1(void); +void setrgb(unsigned int r,unsigned int g, unsigned int b); +void InitInterrupts(void); void count(void) { //counts=0;//0..65535 counts++; - if(counts>=128) //1m //1ms + if(counts>3) //1m //1ms { counts=0; if(ms<60000)//1 minute @@ -34,25 +42,21 @@ void count(void) ms=0; } } - } ISR(TIMER0_OVF_vect) { count(); } - - int main (void) { // (2) - rgbval pattern[6][PATTERN_COUNT]={ {{0,0,0,10}, {0,0,0,10}, {0,0,0,10}, {0,0,0,10}}, + rgbval pattern[6][PATTERN_COUNT]={ {{0,0,0,100}, {0,0,0,100}, {0,0,0,100}, {0,0,0,100}}, {{1,1,1,10}, {1,1,153,20}, {200,50,39,10}, {204,255,153,20}}, {{1,1,1,10}, {10,255,0,10}, {1,1,255,20}, {1,200,1,20}}, {{1,1,5,10}, {1,1,255,10}, {1,1,5,10}, {1,1,255,10}}, {{252,102,3,10}, {161,67,47,10}, {118,120,74,10}, {83,120,74,20}}, {{87,119,122,10}, {95,87,122,10}, {52, 69, 56,10}, {83, 84, 72,10}}}; - //rgbval *pattern=pattern1[0]; - int i=0,i2=0,i3; + int i=0,i2=0,i3=0; int r,g,b = 0; int set=0; int input=0; @@ -61,102 +65,123 @@ int main (void) { // (2) counts = 0; //disable prescaler - CLKPR = (1< /8 -// PLLCSR |= (1 << PLLE) | (1 << PCKE); -//######Timer1-setup - - TCCR1 = (1< pattern[i2][i+1].r) {r--;} if(g < pattern[i2][i+1].g) {g++;} if(g > pattern[i2][i+1].g) {g--;} if(b < pattern[i2][i+1].b) {b++;} if(b > pattern[i2][i+1].b) {b--;} - - OCR0A = g;//green - OCR0B = r;//red - OCR1B = b;//blue - // :wq - // _delay_ms(10); - pre_delay = ms; - // :wq - while((ms-pre_delay) < pattern[i2][i+1].time_hold){}; - if(r == pattern[i2][i+1].r && g == pattern[i2][i+1].g && b == pattern[i2][i+1].b) break; + setrgb(r,g,b); + //delay_ms(10); +//read timer evaluate time since read in 1ms steps + // pre_delay = ms; + // while((ms-pre_delay) <1000); + _delay_ms(30); + if(r == pattern[i2][i+1].r && g == pattern[i2][i+1].g && b == pattern[i2][i+1].b) break; } + + // pre_delay = ms; + // while((ms-pre_delay) < 10); } + /* pre_delay = ms; + setrgb(255,0,0); + while((ms-pre_delay) < 100); + + pre_delay = ms; + setrgb(0,255,0); + + while((ms-pre_delay) < 100); + pre_delay = ms; + setrgb(0,0,0); + while((ms-pre_delay) < 100);*/ + + } + + + return 0; } +void InitTimer0(void) +{ +//#######Timer0-setup##### |Phase correct pwm + TCCR0A = (2< /8 + TCCR0B = (1<