Генерация двух сигналов ШИМ частотой 1 МГц и коэффициентом заполнения 33%.

Я пытался сгенерировать два идентичных сигнала ШИМ. Оба сигнала должны иметь рабочий цикл 33%. Первый сигнал начинается с 0us, а другой с 0.5us. После просмотра руководств я придумал следующий код, но он не компилируется.

#include <PWM.h> 

pinMode(3, OUTPUT);
pinMode(11, OUTPUT);
TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
TCCR2B = _BV(CS22);
OCR2A = 76;
OCR2B = 76;

Я так и думал

Рабочий цикл A и B = (76+1)/256 = 33%. Буду признателен за любую помощь. Спасибо!

, 👍0

Обсуждение

код не компилируется не описывает никаких ошибок, которые вы можете получить... пожалуйста, опубликуйте полную программу... если это ваша полная программа, то вам не хватает части кода... пожалуйста, взгляните на некоторые примеры кода, которые включены в Arduino IDE., @jsotola

Также задали вопрос на: http://forum.arduino.cc/index.php?topic=565149 Если вы собираетесь это сделать, то, пожалуйста, будьте достаточно внимательны и добавьте ссылки на другие места, где вы делаете перекрестные публикации. Это позволит нам избежать траты времени из-за дублирования усилий, а также поможет другим, у кого есть те же вопросы и кто найдет ваш пост, найти всю необходимую информацию., @per1234


1 ответ


1

#include <PWM.h>

Это библиотека, предназначенная для абстрагирования деталей таймеров, поэтому вы не нужно напрямую обращаться к аппаратным регистрам. Если вы делаете доступ непосредственно к оборудованию, вам не нужна эта библиотека: просто удалите ее линия.

pinMode(3, ВЫХОД);

Это программная инструкция (технически называемая «утверждением»). Вы не может иметь инструкций на верхнем уровне программы: они все должны быть внутри функции. Поскольку вы хотите, чтобы все, что следует, было выполнено только один раз при запуске программы (так как это всего лишь разовое действие) configuration), вам необходимо поместить его в setup(), как:

void setup() {
    pinMode(3, OUTPUT);
    pinMode(11, OUTPUT);
    TCCR2A = _BV(COM2A1) | _BV(COM2B1) | _BV(WGM21) | _BV(WGM20);
    TCCR2B = _BV(CS22);
    OCR2A = 76;
    OCR2B = 76;
}

Обратите внимание, что для корректной программы Arduino также необходима функция loop(), с все то, что должно быть выполнено повторно. В вашем случае есть ничего не должно выполняться повторно, но вам все равно придется определить пустой loop() функция:

void loop() {
}
,