tone() искажает ШИМ на другом выводе
Мне приходится использовать ШИМ для управления некоторыми источниками света. Я делаю это успешно с:
analogWrite(11, 127);
для импульса ШИМ 50% на pin 11.
Теперь мне также нужна поддержка tone() в моем коде. Когда я делаю:
тон (10, melodyArray[thisNote], noteDuration);
Я вызываю функцию tone() на контакте 10.
Когда я это делаю, импульс ШИМ искажается. Поскольку у меня нет осциллографа, я не могу точно понять, что происходит.
Но по влиянию на свет я могу предположить, что контакт ШИМ (контакт 11) всегда HIGH или всегда LOW.
Очевидно, что вывод ШИМ и вывод tone() отличаются.
Почему это происходит? Возможно, tone() использует какие-то таймеры, которые мешают ШИМ?
Когда я комментирую строку tone(), ШИМ работает как положено.
Есть ли решение этой проблемы? Могу ли я использовать функцию tone() и при этом иметь поддержку PWM (на другом выводе)?
@user1584421, 👍-1
1 ответ
Лучший ответ:
Цитата из документации Arduino для tone( ):
Использование функции tone() будет мешать выходу ШИМ на контактах 3 и 11 (на платах, отличных от Mega).
Так что да, для analogWrite() следует использовать другой контакт, а не 3 или 11. Это связано с тем, что tone() настроит аппаратный Timer2 для вывода этих синхронизированных сигналов через оборудование. ШИМ на этих контактах также привязан к Timer2. Когда обе функции пытаются настроить Timer2 по-разному, возникнут конфликты.
Примечание. В документации говорится о «платах, отличных от Mega», что было правдой, когда не было других плат Arduino, кроме старых Uno/Nano/Mini (на основе Atmega328p). В настоящее время существует так много плат, которые все можно запрограммировать с помощью среды Arduino, что это предложение является настоящей натяжкой. Вместо этого я бы сказал "на платах на базе Atmega328p". В зависимости от вашей подержанной платы ваш пробег может очень сильно отличаться. Проверьте техническое описание микроконтроллеров, чтобы узнать, какие аппаратные таймеры и их контакты подключены.
- Транзисторный усилитель для управления динамиком с использованием ШИМ Arduino
- Выполнить регулировку громкости на динамике arduino
- Можно ли использовать Arduino PWM для аудио с усилителем PAM8493?
- Как определить частоту среза для фильтра нижних частот?
- Использование ШИМ-выводов на UNO для создания стереозвука
- Установите частоту ШИМ на 25 кГц.
- Какова частота PWM-выхода на Arduino
- Управление скоростью вентилятора с помощью библиотеки Arduino PID
«на платах, отличных от Mega». похоже, это было написано давным-давно, когда у каждого Arduino был классический микроконтроллер ATmega, @Juraj
@Juraj Да, очень. Хотя Uno/Nano по-прежнему широко используется. Я добавлю предложение, чтобы прокомментировать это, @chrisl
Большое спасибо! К своему стыду, я провел месяцы, застряв на этом..., @user1584421