AFON // радиотехник affonya@mail.ru
← Все проекты для дронов

Линейка заряда на светодиодах

Отображение уровня заряда батареи столбиком из светодиодов.

DMC.08 · Питание · ATmega328P

Задача

Показывать напряжение батареи 4 светодиодами (0..4) по порогам.

Алгоритм

АЦП читает напряжение; по диапазонам зажигается соответствующее число светодиодов на порту D.

Исходный код (C, avr-gcc)

⇩ Скачать 08-voltage-led-bar.c

#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){
  DDRD |= 0x3C;                           // PD2..PD5 выходы
  const uint16_t th[4]={500,600,700,800}; // отсчёты-пороги
  for(;;){
    uint16_t v=adc_read(0); uint8_t n=0;
    for(uint8_t i=0;i<4;i++) if(v>=th[i]) n++;
    uint8_t mask=0; for(uint8_t i=0;i<n;i++) mask|=(1<<(PD2+i));
    PORTD=(PORTD&~0x3C)|mask;
    _delay_ms(150);
  }
}

Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf

Пояснения

Пороги задают под свою батарею (на банку). 4 светодиода на PD2..PD5.