В чем разница между analogWrite и digitalWrite?

Как указано в заголовке. В чем разница между ними?

analogWrite(pin,0-255) vs digitalWrite(pin,LOW-HIGH)

8 голосов | спросил pijemcolu 16 MarpmThu, 16 Mar 2017 12:06:50 +03002017-03-16T12:06:50+03:0012 2017, 12:06:50

7 ответов


13

digitalWrite установит указанный контакт в одно из двух состояний - HIGH /LOW, которые равны 5v (3.3v на некоторых платах) и заземлены соответственно.

analogWrite может варьироваться в зависимости от типа используемого выхода.

Если применяется к штырю ШИМ - он установит булавку на периодический сигнал высокого /низкого уровня, где процентное соотношение сигнала, полученного высоким, пропорционально записанному значению. например -

    analogWrite(PWMpin,255)

Будет ВЫСОКО 100% времени, а

    analogWrite(PWMpin,127)

Будет ВЫСОКОЙ 50% времени, а НИЗКИЙ 50% времени

При применении analogWrite к выходу ЦАП (доступного на некоторых платах, таких как DUE или MEGA ), analogWrite фактически приведет к тому, что указанный контакт выдает уровень напряжения, пропорциональный указанному аналоговому значению

Например, на Due, с максимальным напряжением 3,3 В и стандартным аналоговым разрешением 8 бит - [0: 255]

    analogWrite(DACpin,255)

Вывести указанный вывод для вывода 3.3v и -

    analogWrite(DACpin,127)

Будет вызывать указанный вывод для вывода 1.35v

ответил TanyaV 16 MarpmThu, 16 Mar 2017 15:18:08 +03002017-03-16T15:18:08+03:0003 2017, 15:18:08
6

analogWrite (): Метод analogWrite () устанавливает значение выходного вывода ШИМ. AnalogWrite () имеет шкалу от 0 до 255, так что analogWrite (255) запрашивает 100% -ный рабочий цикл (всегда включен), а analogWrite (127) - это 50% -ный рабочий цикл (в половине случаев).

 PWM Duty Cycle

Синтаксис : analogWrite (pin, val)

Где

: номер выходного штыря ШИМ.

val: int значение рабочего цикла между 0 (всегда выключено) до 255 (всегда включено)

Пример кода:

int outLed = 10;  //LED connected to digital pin 10
int value = 0;    //variable to store the read value
int analogIN = 3; //input pin

void setup()
{
  pinMode(outLed, OUTPUT); // set the PWM pin as OUTPUT
}

void loop()
{
  value = analogRead(analogIN); // read the value of analogIN (values between from 0 to 1023)
  analogWrite(outLed, value/4); // sets the read value on outLed (values between from 0 to 255)
}

digitalWrite: Метод digitalWrite () устанавливает значение цифрового вывода как HIGH или LOW. Здесь 5 В (или 3,3 В на платах 3,3 В) для HIGH, 0 В (земля) для LOW.

Синтаксис: digitalWrite (pin, val)

Где

pin: номер контакта

val: HIGH или LOW

Пример кода:

int ledPin = 13;                // LED connected to digital pin 13

void setup()
{
  pinMode(ledPin, OUTPUT);      // sets the digital pin as output
}

void loop()
{
  digitalWrite(ledPin, HIGH);   // sets the LED on
  delay(1000);                  // waits for a second
  digitalWrite(ledPin, LOW);    // sets the LED off
  delay(1000);                  // waits for a second
}
ответил Hasan 20 MaramMon, 20 Mar 2017 06:55:53 +03002017-03-20T06:55:53+03:0006 2017, 06:55:53
5

digitalWrite устанавливает выходной вывод на LOW или HIGH (где эти напряжения зависят от V cc процессора. Для Uno или Mega, которые будут 0 В или 5V (или близко к нему).

Вот скриншот digitalWrite (LOW):

 digitalWrite (LOW)

То есть выходной вывод находится на 0 В.


Теперь для digitalWrite (HIGH):

Выходное напряжение составляет 5 В.

 digitalWrite (HIGH)


analogWrite действительно должен был быть назван PWMwrite, поскольку он настраивает таймеры процессора для вывода PWM (широтно-импульсная модуляция).

Попробуем analogWrite (1):

 analogWrite (1)

Вы можете видеть, что уровень напряжения в большинстве случаев составляет 0 В и составляет 5 В в течение коротких периодов времени. Вы также видите, что частота составляет 490 Гц, что означает справочная страница для analogWrite . будет.


Масштабирование:

 analogWrite (1) - увеличено

Выход высок для 8 Âμs, что составляет ровно 1/256 от 2048 Âμs, который является периодом таймера. Итак, у нас есть рабочий цикл 1/256 (0,39%).


Попробуем analogWrite (127) - на полпути от 0 до 255:

 analogWrite (127)

Теперь вы можете видеть, что выход HIGH ровно в половине случаев, а LOW - остальное время.


Попробуем analogWrite (254):

 analogWrite (254)

Это противоположность analogWrite (1). Выходной сигнал ВЫСОКО все время, за исключением короткого периода. Масштабирование:

 analogWrite (254) - увеличено

Теперь вывод off для 8 Âμs - по сравнению с предыдущим изображением, где он был включен для 8 мкс.


analogWrite (0) совпадает с digitalWrite (LOW).

analogWrite (255) совпадает с digitalWrite (HIGH).

Это подтверждается соответствующим кодом в файле wiring_analog.c:

if (val == 0)
{
    digitalWrite(pin, LOW);
}
else if (val == 255)
{
    digitalWrite(pin, HIGH);
}

Резюме

analogWrite в основном настраивает аппаратные таймеры для вывода PWM. Как только вы сделаете это, аппаратное обеспечение таймера выведет запрошенный рабочий цикл (от 0 до 255), где 0 всегда выключен, 255 всегда включен, а некоторое значение между ними дает вам PWM (импульсный выход).


Для получения дополнительной информации о таймерах см. мою страницу о таймерах .

ответил Nick Gammon 19 MarpmSun, 19 Mar 2017 12:27:13 +03002017-03-19T12:27:13+03:0012 2017, 12:27:13
3

digitalWrite устанавливает вывод на высокое или низкое значение, которое остается точно таким, до тех пор, пока не будет вызван цифровой вызов для этого вывода.

analogWrite устанавливает, чтобы штырь имел колебательное значение, которое имеет длительность импульса на основе рабочего цикла, указанного в качестве второго параметра.

Итак:

digitalWrite (5, HIGH);    // Pin 5 goes high
analogWrite (6, 127);      // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.
ответил Code Gorilla 16 MarpmThu, 16 Mar 2017 12:20:04 +03002017-03-16T12:20:04+03:0012 2017, 12:20:04
2

analogWrite (): Записывает аналоговое значение (волна PWM) на вывод. Может использоваться для подсветки светодиода при различной яркости или приводом двигателя на разных скоростях. После вызова analogWrite(), контакт будет генерировать устойчивую прямоугольную волну заданного рабочего цикла до следующего вызова analogWrite() (или вызов digitalRead() или digitalWrite() на том же выводе). Частота ШИМ-сигнала на большинстве контактов составляет приблизительно 490 Гц. На Uno и подобных досках контакты 5 и 6 имеют частоту приблизительно 980 Гц. Штыри 3 и 11 на Леонардо также работают на частоте 980 Гц.

Подробнее см .: https://www.arduino.cc/ru/Reference/analogWrite

analogRead (): Считывает значение с указанного аналогового вывода. Плата Arduino содержит 6 каналов (8 каналов на Mini и Nano, 16 на Mega), 10-битный аналого-цифровой преобразователь. Это означает, что он отображает входные напряжения от 0 до 5 вольт в целые значения от 0 до 1023. Это дает разрешение между показаниями: 5 вольт /1024 единицы или 0,4949 вольт (4,9 мВ) на единицу. Диапазон ввода и разрешение можно изменить с помощью analogReference().

Подробнее см. https://www.arduino.cc/ru/Reference/analogRead

ответил Tanmay Yerunkar 19 MarpmSun, 19 Mar 2017 22:03:41 +03002017-03-19T22:03:41+03:0010 2017, 22:03:41
1

digitalWrite установите указанный контакт в одно из двух состояний - HIGH /LOW

Где, HIGH = 5 V и LOW = 0 V

analogWrite Задайте значение ШИМ для вывода ШИМ

(В Arduino UNO штыри ШИМ 3, 5, 6, 9, 10, 11)

Он установит булавку на периодический высокий /низкий сигнал.

analogWrite(PWMpin,255)

Будет ВЫСОКО 100% времени, а

analogWrite(PWMpin,127)

Будет ВЫСОКОЙ 50% времени, а НИЗКИЙ 50% времени

ответил sam 7 PMpFri, 07 Apr 2017 15:15:54 +030015Friday 2017, 15:15:54
0

В чем разница между analogWrite (X, 255) и digitalWrite (X, HIGH)? Наверное, ничего, кроме, возможно, процессор должен сделать некоторые дополнительные вещи, чтобы понять, что ему не нужно использовать PWM, а также стиль.

ответил PaulMurrayCbr 26 MarpmSun, 26 Mar 2017 12:46:01 +03002017-03-26T12:46:01+03:0012 2017, 12:46:01

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132