Генератор прямоугольных импульсов 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, но результата нет. Во время компиляции появляется только одна ошибка: функция «цикл» отсутствует, я добавил ее, но вывода все равно нет. Пожалуйста, помогите мне.
@Arjun, 👍1
Обсуждение1 ответ
▲ 1
В настройке
есть некоторые настройки для таймера 2, но нет изменения прескалера, поэтому таймер остается остановленным.
Очевидно, что он был запущен вызовом soundBuzzer()
где-то в коде. Но это имя функции теперь вводит в заблуждение. Просто установите прескалер в setup
, и он должен работать.
,
@KIIV
Смотрите также:
- Как использовать SPI на Arduino?
- Как решить проблему «avrdude: stk500_recv(): programmer is not responding»?
- Как создать несколько запущенных потоков?
- Как подключиться к Arduino с помощью WiFi?
- avrdude ser_open() can't set com-state
- Как узнать частоту дискретизации?
- Что такое Serial.begin(9600)?
- Я закирпичил свой Arduino Uno? Проблемы с загрузкой скетчей на плату
я предлагаю вам начать с просмотра примеров скетчей в Arduino IDE... обратите внимание на формат скетчей, @jsotola