diff --git a/gg.c b/gg.c index eeccc80..2dcb875 100644 --- a/gg.c +++ b/gg.c @@ -1,5 +1,5 @@ -void timer_init(void) +void timer_init_mega16(void) { ICR1 = (1 << 11) - 1;/* 11 bit pwm */ OCR1A = 0; @@ -8,3 +8,44 @@ void timer_init(void) DDRD |= (1 << PD5);/* set pwm pin as output */ TIMSK = 1 << TOIE1;/* interrupt at top */ } + +void timer_init_tiny45(void) +{ + PLLCSR = 1 << PLLE;/* pll enable */ + delay_us(100); + while(!(PLLCSR & (1 << PLOCK))) {;}/* wait for lock */ + PLLCSR |= 1 << PCKE;/* use pll */ + + OCR1C = 0xff; + + /* output pin: OC1A = PB1 = 6 */ + OCR1A = 0; + TCCR1 = (1 << PWM1A) | (1 << COM1A1) | (1 << CS10);/* pwm enable, non inverted, no prescaler */ + DDRB |= (1 << PB1); + + /* output pin: OC1B = PB5 = 3 */ + //OCR1B = 0; + //TCCR1 = (1 << CS10);/* no prescaler */ + //GTCCR = (1 << PWM1B) | (1 << COM1B1);/* pwm enable, non inverted */ + //DDRB |= (1 << PB5); + + TIMSK = 1 << TOIE1;/* interrupt on overflow */ +} + +void timer_init_tiny26(void) +{ + PLLCSR = 1 << PLLE;/* pll enable */ + delay_us(100); + while(!(PLLCSR & (1 << PLOCK))) {;}/* wait for lock */ + PLLCSR |= 1 << PCKE;/* use pll */ + + OCR1C = 0xff;/* unused */ + + /* output pin: OC1A = PB1 = 1 or OC1B = PB3 = 2 */ + OCR1A = 0; + TCCR1A = (1 << COM1A1) (1 << PWM1A);/* pwm enable, not inverted */ + TCCR1B = (1 << CS10);/* fast pwm, no prescaler */ + DDRB |= (1 << PB1); + + TIMSK = 1 << TOIE1;/* interrupt on overflow */ +}