У чым розніца паміж analogWrite і digitalWrite?

Як відаць з назвы дзяржаў. У чым розніца паміж імі?

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

8

7 адказы

digitalWrite ўсталюе ўказаны штыфт ў адным з двух станаў - HIGH/LOW, якія прыраўноўваюць да 5v (3.3v на некаторых поплатках) і зазямленне адпаведна.

analogWrite можа вар'іравацца ў залежнасці ад тыпу выкарыстоўванага выхаду.

Калі прымяняецца да ШІМ штыфтам - ён будзе ўсталяваны штыфт да перыядычнага высокага/нізкага сігналу, дзе працэнт сігналу высокага адпрацавала прапарцыйная значэнню пісьмовага. напрыклад -

    analogWrite(PWMpin,255)

Будзе высокая 100% часу, у той час як

    analogWrite(PWMpin,127)

Будзе высокая 50% часу, і LOW 50% часу

Што датычыцца прымянення analogWrite да DAC штыфтам (даступна на некаторых поплатках, як з прычыны або MEGA ) analogWrite будзе на самой справе прычына Указаны загваздка для вываду ўзроўню напружання proportinal да зададзенага аналагавага значэння

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

    analogWrite(DACpin,255)

Выкліку ўказаны штыфт для вываду 3.3v, і-

    analogWrite(DACpin,127)

Выкліку ўказаны штыфт для вываду 1.35V

13
дададзена
вы маеце рацыю, адказ адрэдагаваныя, каб адлюстраваць гэта.
дададзена аўтар christoff, крыніца
Я лічу, што ёсць «maxanalog» вызначаюць або канстанту, для забеспячэння лепшай сумяшчальнасці з іншымі платформамі. Esp8266 мае analogwrite, які можа вар'іравацца ад 0 да 1024. * Я пачухаў некаторыя валасы, спрабуючы знайсці, чаму мой RGB прывёў кантролер не будзе гэтак жа яркім з тым жа кодам, падумаў, што гэта з-за розніцы ў магутнасці або напружанне, але я выкарыстаў МОП-транзістар з прыдатным (атрымаць?) фактар. Гэта было проста на працягу (1024/256) часу.
дададзена аўтар dotnetengineer, крыніца
Не, не DAC на Mega.
дададзена аўтар Sprogz, крыніца
Выдатна. Я ўзяў на сябе смеласць, каб зрабіць рэдагаванне больш кароткім.
дададзена аўтар Sprogz, крыніца

analogWrite(): The analogWrite() method sets the value of a PWM output pin. The analogWrite() is on a scale of 0 - 255, such that analogWrite(255) requests a 100% duty cycle (always on), and analogWrite(127) is a 50% duty cycle (on half the time).

PWM Duty Cycle

Syntax: analogWrite(pin, 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: The digitalWrite() method sets the value of a digital pin as HIGH or LOW. Here, 5V (or 3.3V on 3.3V boards) for HIGH, 0V (ground) for LOW.

Syntax: digitalWrite(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
}
6
дададзена

digitalWrite sets the output pin to either LOW or HIGH (where those voltages depend on the Vcc of the processor. For a Uno or Mega that would be 0V or 5V (or close to it).

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

digitalWrite (LOW)

Гэта значыць, выхадны кантакт знаходзіцца ў 0В.


Зараз для digitalWrite (HIGH):

Выхадныя напружанне 5V.

digitalWrite (HIGH)


analogWrite really should have been named PWMwrite since it configures the processor timers to output PWM (pulse-width modulation).

Давайце паспрабуем analogWrite (1):

analogWrite (1)

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


Змяненне маштабу:

analogWrite (1) - zoomed

Выхад мае высокі ўзровень на працягу 8 мкс, што з'яўляецца ў дакладнасці 1/256 2048 мкс, які з'яўляецца перыядам таймера. Такім чынам, мы маем працоўны цыкл 1/256 (0,39%).


Давайце паспрабуем analogWrite (127) - на паўдарозе ад 0 да 255:

analogWrite (127)

Цяпер вы можаце ўбачыць, што выхад Высокія роўна палову часу, і LOW астатняга часу.


Давайце паспрабуем analogWrite (254):

analogWrite (254)

This is the opposite of analogWrite (1). The output is HIGH all the time except for a brief period. Змяненне маштабу:

analogWrite (254) - zoomed

Цяпер выхад ад 8 мкс - у параўнанні з папярэднім выявай, дзе ён быў на 8 мкс.


analogWrite (0) is the same as digitalWrite (LOW).

analogWrite (255) is the same as digitalWrite (HIGH).

Гэта пацвярджаецца адпаведным кодам у wiring_analog.c:

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

рэзюмэ

analogWrite basically configures the hardware timers to output PWM. Once you do that the timer hardware outputs the requested duty cycle (from 0 to 255) where 0 is always off, 255 is always on, and some value inbetween gives you PWM (pulsed output).


Для атрымання дадатковай інфармацыі аб таймер см маёй старонка аб таймер .

5
дададзена

digitalWrite ўсталёўвае шпільку да высокай ці нізкай кошту, якая застаецца дакладна гэта значэнне да таго часу, пакуль 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.
3
дададзена

analogWrite(): Writes an analog value (PWM wave) to a pin. Can be used to light a LED at varying brightnesses or drive a motor at various speeds. After a call to analogWrite(), the pin will generate a steady square wave of the specified duty cycle until the next call to analogWrite() (or a call to digitalRead() or digitalWrite() on the same pin). The frequency of the PWM signal on most pins is approximately 490 Hz. On the Uno and similar boards, pins 5 and 6 have a frequency of approximately 980 Hz. Pins 3 and 11 on the Leonardo also run at 980 Hz.

For details visit: https://www.arduino.cc/en/Reference/analogWrite

analogRead(): Reads the value from the specified analog pin. The Arduino board contains a 6 channel (8 channels on the Mini and Nano, 16 on the Mega), 10-bit analog to digital converter. This means that it will map input voltages between 0 and 5 volts into integer values between 0 and 1023. This yields a resolution between readings of: 5 volts/1024 units or, .0049 volts (4.9 mV) per unit. The input range and resolution can be changed using analogReference().

For details visit: https://www.arduino.cc/en/Reference/analogRead

2
дададзена

digitalWrite set the specified pin to one of two states - HIGH/LOW

Дзе, Высокія = 5 У і нізкім = 0 У

analogWrite Set the PWM value of PWM pin

(У Arduino UNO, PWM шпількі 3, 5, 6, 9, 10, 11)

Ён будзе ўсталяваны штыфт да перыядычнага высокага/нізкага сігналу.

analogWrite(PWMpin,255)

Будзе высокая 100% часу, у той час як

analogWrite(PWMpin,127)

Будзе высокая 50% часу, і LOW 50% часу

1
дададзена

Так у чым жа розніца паміж analogWrite (X, 255) і digitalWrite (X, HIGH)? Напэўна, нічога, акрамя хіба што працэсар не мае, каб зрабіць некаторыя дадатковыя рэчы, каб зразумець, што гэта не трэба выкарыстоўваць PWM, а таксама стыль.

0
дададзена