Нужно получить на Arduino (Leonardo-совместимый, ATmega32U4, 16МГц) на одном из пинов GPIO однородный сигнал с частотой 200 кГц. В идеале синусообразный, но подойдёт и квадратный.
Вижу 2 подхода:
1) Как-то запрограммировать системный таймер, чтобы он сам управлял GPIO (без обработки прерывания таймера). Этот подход мне больше всего нравится, но непонятно, можно ли так сделать.
2) Запрограммировать системный таймер, и подвеситься на его прерывание. В прерывании менять уровень сигнала на GPIO.
Возможен ли 1й подход?
Если нет, хватит ли скорости у процессора обработать всё в прерывании (2й подход)?
Можно использовать таймер-счётчик в режиме CTC с переключением вывода OCnA по совпадению с регистром OCRnA. Для таймера-счётчика 1 Arduino Leonardo это вывод Digital 9.
#include <ve_avr.h> // Используется библиотека VE_AVR
#define PIN_OC1A 9 // Пин Digital 9 - OC1A
void setup() {
DEV_TIMER1.setWaveGenMode(TimerW::CTC_OCRA);
DEV_TIMER1.setClockSelect(TimerW::Prescaler_1); // PR = 1
DEV_TIMER1.setOutputCompareA(39); // 16e6/(2*PR*(1+39)) = 200 kHz
DEV_TIMER1.setCompOutModeA(TimerW::Toggle);
pinMode(PIN_OC1A, OUTPUT);
}
void loop()
{
}