Задать вопрос
@redcircle

Как сделать частотный генератор на GPIO Arduino?

Нужно получить на Arduino (Leonardo-совместимый, ATmega32U4, 16МГц) на одном из пинов GPIO однородный сигнал с частотой 200 кГц. В идеале синусообразный, но подойдёт и квадратный.

Вижу 2 подхода:
1) Как-то запрограммировать системный таймер, чтобы он сам управлял GPIO (без обработки прерывания таймера). Этот подход мне больше всего нравится, но непонятно, можно ли так сделать.
2) Запрограммировать системный таймер, и подвеситься на его прерывание. В прерывании менять уровень сигнала на GPIO.

Возможен ли 1й подход?
Если нет, хватит ли скорости у процессора обработать всё в прерывании (2й подход)?
  • Вопрос задан
  • 535 просмотров
Подписаться 1 Простой Комментировать
Решение пользователя vanyamba-electronics К ответам на вопрос (2)
@vanyamba-electronics
Можно использовать таймер-счётчик в режиме 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()
{
}

5c44dafd15cb8618166739.png
Библиотеку VE_AVR можно скачать здесь.
Ответ написан
Комментировать