Что должно произойти при отправке сигнала AnalogWrite на не-ШИМ-вывод?

Я новичок в Arduino и любой электротехнике, я изучаю некоторые учебные пособия на Youtube.

Однако, насколько я понимаю, отправка аналоговых сигналов на не-ШИМ-вывод будет просто проверять пороговое значение и отправлять либо НИЗКИЙ, либо ВЫСОКИЙ, в отличие от возможности отправлять переменные напряжения на ШИМ-вывод.

НО ... это не то, что я вижу на практике...

Используя Arduino UNO, я сделал небольшой проект по изменению яркости синего светодиода. Сначала я делал это через вывод ШИМ (вывод 9), и он работал безупречно. Но затем я попытался посмотреть, что произойдет на выводе без ШИМ (вывод 8), вы знаете, потому что вы учитесь, пробуя и экспериментируя. Поэтому я переключился на вывод без ШИМ, и... он работает точно так же...

Я могу изменить яркость светодиода 5 различных уровней... с помощью аналоговой записи... на контакт без ШИМ...

Заранее спасибо

, 👍-1

Обсуждение

Я предполагаю, что ваш код переключает контакт, многократно вызывая AnalogWrite. добавьте свой тестовый скетч к вопросу, @Juraj

Вы можете проверить выходной сигнал с помощью осциллографа. Возможно, они расширили свою библиотеку, чтобы использовать таймер и его прерывание для генерации ШИМ с помощью программного обеспечения., @the busybee

Я бы также предположил, что вы просто как-то затемняете код. Я только что проверил это с Arduino Nano и последним ядром Arduino AVR (1.8.6), и он переключается точно между двумя уровнями: ВЫСОКИЙ и НИЗКИЙ. И код в wireing_analog.c отражает это. Пожалуйста, покажите нам код, с помощью которого вы получили эти 5 уровней., @chrisl

Вам нужно показать свой код. Пожалуйста, отредактируйте вопрос и сделайте это. * Я могу изменить яркость светодиода на 5 различных уровнях ... с помощью аналоговой записи ... на контакт без ШИМ ... * . Показать нам!, @Nick Gammon


1 ответ


Лучший ответ:

2

Однако, насколько я понимаю, отправка аналоговых сигналов на не-ШИМ-вывод будет просто проверять пороговое значение и отправлять либо НИЗКИЙ, либо ВЫСОКИЙ, в отличие от возможности отправлять переменные напряжения на ШИМ-вывод.

На Uno вы никуда не отправляете аналоговые сигналы. Выводы ШИМ — это просто цифровые выходы, которые быстро включаются и выключаются с заданной вами частотой и рабочим циклом.

Поэтому вы можете сделать то же самое с контактами без ШИМ, посылая HIGH/LOW с переменной скоростью.

Чтобы прокомментировать, почему ваш код "работает"; нам нужно это увидеть.


В чем смысл ШИМ-выводов, если также можно отправлять переменные высокие/низкие сигналы на не-ШИМ-выводы?

Ну, выводы ШИМ выдают высокий/низкий сигналы асинхронно. То есть без кода, который должен это делать. Итак, если вы настроите таймер (который подключен к контактам ШИМ) на выходную частоту 100 кГц, он будет делать это независимо от того, что в это время делает код. Возможно, вы вычисляете простые числа, но аппаратные таймеры будут бездумно включать и выключать этот вывод ШИМ с указанной частотой.

Если вы попытаетесь создать свой собственный ШИМ в коде, тогда код должен сделать это и ничего больше, если он собирается выводить согласованный сигнал.

,

Привет Ник, спасибо за ответ. Да, я понимаю эту концепцию того, что делают выводы ШИМ, быстро отправляя цифровые сигналы. Мой вопрос был в основном теоретическим, поэтому я не показывал код. Основываясь на вашем ответе, можно также отправлять переменные сигналы (высокий/низкий) на контакт без ШИМ, что меня смутило. В чем смысл ШИМ-выводов, если также можно отправлять переменные высокие/низкие сигналы на не-ШИМ-выводы? (Это единственная часть, которая меня смутила), @BlueStarXD

@BlueStarXD См. обновленный ответ. Во многих кодах есть простой и сложный пути. Вручную выполнять ШИМ с помощью кода — сложный путь., @Nick Gammon

У меня есть [страница об аппаратных таймерах] (https://www.gammon.com.au/timers), которая может помочь вашему пониманию., @Nick Gammon