Генератор прямоугольных импульсов 1,7 МГц

const uint8_t OUTPUT_PIN = 3;  // = OC2B
const uint8_t PERIOD = 9;      // 9 CPU cycles ~ 1.778 MHz

void setup()
{
    pinMode(OUTPUT_PIN, OUTPUT);
    TCCR2B = 0;           // stop timer
    TCNT2  = 0;           // reset timer
    TCCR2A = _BV(COM2B1)  // non-inverting PWM on OC2B
           | _BV(WGM20)   // fast PWM mode, TOP = OCR2A
           | _BV(WGM21);  // ...ditto
    TCCR2B = _BV(WGM22);  // ...ditto
    OCR2A = PERIOD - 1;
    OCR2B = PERIOD/2 - 1;
}

void soundBuzzer() {
    TCCR2B |= _BV(CS20);  // F_CPU / 1
}

void silenceBuzzer() {
    TCCR2B &= ~_BV(CS20);
    TCNT2 = 0;
}

Я взял это отсюда, посмотрите ответы

Эта программа должна генерировать прямоугольный сигнал частотой около 1,7 МГц, но у меня она не работает. Я пробовал симуляцию на Proteus 8, но результата нет. Во время компиляции появляется только одна ошибка: функция «цикл» отсутствует, я добавил ее, но вывода все равно нет. Пожалуйста, помогите мне.

, 👍1

Обсуждение

я предлагаю вам начать с просмотра примеров скетчей в Arduino IDE... обратите внимание на формат скетчей, @jsotola


1 ответ


1

В настройке есть некоторые настройки для таймера 2, но нет изменения прескалера, поэтому таймер остается остановленным.

Очевидно, что он был запущен вызовом soundBuzzer() где-то в коде. Но это имя функции теперь вводит в заблуждение. Просто установите прескалер в setup, и он должен работать.

,