Как прочитать значение PIN PWM-выхода?
Как получить значение вывода ШИМ, которое находится в выводе pinMode?
Как получить цифровое значение ВЫХОДНОГО PIN-кода:
#define pin 3
void setup()
{
pinMode(pin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
delay(1000);
digitalWrite(pin, HIGH);
Serial.println(bitRead(PORTD,pin));
delay(1000);
digitalWrite(pin, LOW);
Serial.println(bitRead(PORTD,pin));
}
В целях тестирования я хочу получить значение выходного контакта ШИМ.
Неправильный скетч:
#define pin 3
void setup()
{
pinMode(pin, OUTPUT);
Serial.begin(9600);
}
void loop()
{
delay(1000);
analogWrite(pin, 100);
Serial.println(pulseIn(pin, HIGH)); // значение выходного контакта ШИМ
}
Этот скетч создан только для примера. Я не знаю значения ШИМ, поскольку значение ШИМ будет генерироваться динамически. Не могли бы вы объяснить, как получить значение выходного контакта ШИМ?
@Kvartu, 👍0
Обсуждение2 ответа
Лучший ответ:
В соответствии с реализацией исходного кода функции analogWrite
(Объяснение исходного кода аналоговой записи Arduino).
Вы можете использовать регистр OCRnx
для чтения значения ШИМ.
Это будет OCR2B для контакта 3., @Gerben
Я хочу получить значение выходного контакта ШИМ.
Пин будет иметь значение 0 или 1.
analogWrite(pin, 100);
В 100/256 (39%) случаях оно будет равно 1, а в остальное время — 0.
Почему вы хотите это сделать?
Потому что я ищу решение этого вопроса без создания новой переменной для хранения значения ШИМ., @Kvartu
Как упоминалось в другом ответе, вы можете опросить регистр таймера, чтобы узнать, какое значение туда поместил AnalogWrite, но зачем вообще делать эту непонятную вещь (которая будет меняться для каждого выходного контакта), если вы можете сохранить значение в одном байте в переменной? Кроме того, это не «значение выходного контакта», а *рабочий цикл* выхода ШИМ., @Nick Gammon
- Загрузка Arduino Nano дает ошибку: avrdude: stk500_recv(): programmer is not responding
- как быстро loop() работает в Arduino
- attiny85 и arduino — аналоговое чтение + pwmOut
- Двигатель постоянного тока шумит, но не вращается
- Использовать Arduino Nano V3 для программирования другого Arduino (Pro Mini)?
- Можно ли использовать цифровые контакты в качестве выхода ШИМ?
- Как мигать светодиодом и одновременно запускать другой код?
- Подключение Arduino Nano к Raspberry Pi Zero
Вы не можете. Для него не существует какой-то одной «ценности», она постоянно меняется. Вы можете усреднить его через фильтр нижних частот и передать обратно через аналоговый вывод. Или вы можете подключить его к входному контакту и измерить ширину и частоту импульса, но вы не сможете сделать это на самом контакте. Не с обычными инструментами Arduino. Кроме того, вы уже знаете цену. Это «100», поскольку вы именно это и установили. Чего вы *на самом деле* пытаетесь достичь?, @Majenko
Кстати: первый скетч считывает значение из регистра POTD, а не значение на фактическом выводе. Например, он может быть закорочен, и регистр PIND прочитает его правильно. Можно прочитать фактическое значение (читая PIND), но, как писал Маженко, оно меняется, поэтому вам придется читать его с постоянной скоростью или измерять минимальное и максимальное время. Забавно, импульсный вход действительно должен работать, поскольку он должен использовать внутренний PIND., @KIIV
Возможно, вы сможете получить значение обратно, прочитав соответствующие регистры сравнения вывода используемого таймера (я думаю, что это используется для генерации, хотя я не проверял)., @chrisl
сохранить значение в переменной. это правильный путь. но если ваша задача состоит в том, чтобы прочитать сгенерированный ШИМ на аналоговом выводе, тогда https://arduinoprosto.ru/q/55698/read-analog-port-set-as-output/55700#55700, @Juraj