]> www.fi.muni.cz Git - bike-lights.git/blob - lights.c
653e8d4f7e7b3dcd1e550120f637652b7d82f2e4
[bike-lights.git] / lights.c
1 #include <avr/io.h>
2 #include <avr/eeprom.h>
3 #include <util/delay.h>
4 #include <avr/sleep.h>
5 #include <avr/interrupt.h>
6
7 uint16_t pwmee EEMEM;
8
9 int main(void)
10 {
11         char seen = 0;
12
13         TCCR1C = _BV(COM1D0) | _BV(COM1D1) | _BV(PWM1D);
14         TCCR1A = _BV(PWM1A) | _BV(PWM1B);
15         TCCR1B = 0x80| _BV(CS13) | _BV(CS11);
16         TC1H  = 0x03;
17         OCR1C = 0xFF;
18         OCR1D = 0x20;
19         TCNT1 = 0;
20         DDRB |= _BV( PB5 );
21         PORTB &= ~_BV( PB5 );
22
23         ADCSRA = _BV(ADEN) | _BV(ADATE) | _BV(ADPS1) | _BV(ADPS0);
24         ADMUX = _BV(REFS1) | _BV(MUX0);
25         // ADCSRB = _BV(REFS2); 
26         DIDR0 = _BV(ADC1D) | _BV(AREFD);
27
28         while (1) {
29                 uint16_t pwm;
30                 unsigned char pwmhi, pwmlo;
31
32                 ADCSRA |= _BV(ADSC);
33
34                 _delay_ms(100);
35
36                 pwm = ADCW;
37                 if (!seen) {
38                         seen = 1;
39                         eeprom_write_word(&pwmee, pwm);
40                 }
41                 if (pwm > 0x3C0)
42                         pwm = 0x3C0;
43                 if (pwm < 1)
44                         pwm = 1;
45                 pwmhi = pwm >> 8;
46                 pwmlo = pwm & 0xFF;
47
48                 TC1H = pwmhi;
49                 OCR1D = pwmlo;
50         }
51
52         sleep_mode();
53     DDRA |= _BV( PA0 );
54     while( 1 ) { 
55         PORTA |=  _BV( PA0 );
56         _delay_ms(2000);
57         PORTA &=~ _BV( PA0 );
58         _delay_ms(2000);
59     }
60 }