DMC.39 · Индикация и сигнал · ATmega328P
Задача
Издавать громкий периодический сигнал для поиска аппарата в траве/кустах.
Алгоритм
Меандр на бузере пачками с паузами; частота ~4 кГц для максимальной громкости пьезо.
Исходный код (C, avr-gcc)
#ifndef F_CPU
#define F_CPU 16000000UL
#endif
#include <avr/io.h>
#include <util/delay.h>
static void tone(uint16_t ms,uint16_t half_us){
uint32_t cycles=(uint32_t)ms*1000/(half_us*2);
while(cycles--){ PORTD^=(1<<PD6); _delay_us(1); for(uint16_t i=1;i<half_us;i++) _delay_us(1); }
}
int main(void){
DDRD|=(1<<PD6);
for(;;){ tone(300,125); _delay_ms(400); } // ~4кГц пачками
}
Сборка: avr-gcc -mmcu=atmega328p -DF_CPU=16000000UL -Os файл.c -o файл.elf
Пояснения
Включается по команде (потеря связи/переключатель). Резонанс пьезо обычно 3–4 кГц.