#ifndef F_CPU
#define F_CPU 16000000UL
#endif

#include <avr/io.h>
#include <util/delay.h>

static uint16_t adc_read(uint8_t ch){
  ADMUX=(1<<REFS0)|(ch&0x0F);
  ADCSRA=(1<<ADEN)|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);
  ADCSRA|=(1<<ADSC); while(ADCSRA&(1<<ADSC));
  return ADC;
}
int main(void){
  DDRB|=(1<<PB5);
  _delay_ms(50);
  uint16_t zero = adc_read(1);            // калибровка нуля на ADC1
  const float VREF=5.0f, SENS=0.066f;     // 66 мВ/А
  for(;;){
    int16_t d = (int16_t)adc_read(1) - (int16_t)zero;
    float amps = (d*VREF/1024.0f)/SENS;
    if(amps<0) amps=-amps;
    if(amps>20.0f) PORTB|=(1<<PB5); else PORTB&=~(1<<PB5); // индикация перегрузки
    _delay_ms(100);
  }
}
