#define F_CPU 16000000UL #include "../library/IC595.h" #include "../library/LCD.h" #include #include #include IC595 sr; LCD lcd; int pinSVR = 0; int svr = 0; void adc_init() { ADCSRA |= _BV(ADPS2) | _BV(ADPS1) | _BV(ADPS0); ADMUX = _BV(REFS0); ADCSRA |= _BV(ADEN); ADCSRA |= _BV(ADSC); } uint16_t read_adc(uint8_t channel) { ADMUX &= 0xF0; ADMUX |= channel; ADCSRA |= _BV(ADSC); while (ADCSRA & _BV(ADSC)); return ADCW; } ISR(TIMER1_OVF_vect) { svr = read_adc(0); OCR1A = 2000 + 2000*(svr/1024.0); } void timer_init() { TCCR1A = _BV(COM1A1) | _BV(WGM11); TCCR1B = _BV(CS11) | _BV(WGM13) | _BV(WGM12); // prescaler = 8 TCNT1 = 0; ICR1 = 40000; OCR1A = 2000; TIMSK1 = _BV(TOIE1); } void setup() { IC595_init(&sr, 5, 6, 7); LCD_init(&lcd, &sr, 2, 3); // set analog adc_init(); DDRB |= 0x02; cli(); timer_init(); sei(); } int main() { setup(); int i = 0; char str[5] = {0}; //DDRB |= 0x04; //PORTB |= 0x04; while (1) { itoa(svr, str, 10); LCD_write_command( &lcd, (1<<7) | 0x00 ); for (i=0; i<4; i++) { if (i < strlen(str)) LCD_putch( &lcd, str[i] ); else LCD_putch( &lcd, ' ' ); } _delay_ms(10); } return 0; }