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

Предстартовая самопроверка

При включении проверяет напряжение и сигнализирует готовность или отказ.

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

Задача

После включения измерить напряжение батареи и сообщить готовность (ОК) или запрет (низко).

Алгоритм

Однократное измерение при старте: если выше порога — длинный сигнал ОК, иначе серия коротких тревог.

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

⇩ Скачать 09-power-on-check.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;
}
static void tone(uint16_t ms){ uint16_t c=ms*10/2; while(c--){PORTD^=(1<<PD6);_delay_us(185);} }
int main(void){
  DDRD|=(1<<PD6); DDRB|=(1<<PB5);
  const uint16_t TH=620;
  if(adc_read(0)>=TH){ PORTB|=(1<<PB5); tone(400); }   // ОК
  else { for(uint8_t i=0;i<5;i++){ tone(80); _delay_ms(80);} } // отказ
  for(;;){}
}

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

Пояснения

Простейший self-test как элемент безопасности перед армингом. Тон на бузере, индикация светодиодом.