AnalogWrite ve digitalWrite arasındaki fark nedir?

Başlık belirttiği gibi. İkisi arasındaki fark nedir?

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

8

7 cevap

digitalWrite, belirtilen pimi iki durumdan birine ayarlayacaktır - YÜKSEK/DÜŞÜK, sırasıyla 5v (bazı kartlarda 3,3 v) ve zemin.

analogWrite kullanılan çıkış türüne göre değişebilir.

PWM pimine uygulandığında - pimi, yüksek harcanan sinyalin yüzdesinin yazılı değere orantılı olduğu periyodik bir yüksek/düşük sinyale ayarlayacaktır. Örneğin -

    analogWrite(PWMpin,255)

Zamanın YÜKSEK 100% olacak

    analogWrite(PWMpin,127)

Zamanın% 50’si ve bu sürenin% 50’si DÜŞÜK

DAC pinine analogWrite uygularken (DUE veya MEGA gibi bazı kartlarda bulunur) analogWrite, belirtilen pin değerinin belirtilen analog değere orantılı bir voltaj seviyesi vermesine neden olacaktır.

Örneğin, Maksimumda 3,3 voltluk voltaj ve 8 bitlik bir varsayılan analog çözünürlük ile - [0: 255]

    analogWrite(DACpin,255)

Belirtilen pinin 3,3v çıkışa neden olacak ve

    analogWrite(DACpin,127)

Belirtilen pin 1.35v çıkışına neden olur

13
katma
Doğru, cevabı bunu yansıtmak için düzenlenmiş.
katma yazar christoff, kaynak
Diğer platformlarla daha iyi uyum sağlamak için "maxanalog" tanımlaması veya sabiti olduğuna inanıyorum. Esp8266, 0 ile 1024 arasında değişebilen bir analog yazara sahiptir. * RGB led denetleyicimin neden aynı kodla parlak olmayacağını bulmaya çalışırken bazı kılları çizdim. Gerilim, ama uygun (kazanç?) faktörü ile bir MOSFET kullanılır. Zamanın (1024/256) için açıktı.
katma yazar dotnetengineer, kaynak
Hayır, Mega'da DAC yok.
katma yazar Sprogz, kaynak
Harika. Düzenlemeyi daha özlü yapmak için özgürlüğü aldım.
katma yazar Sprogz, kaynak

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)

Nerede,

pin: PWM çıkış pin numarası.

val: 0 (her zaman kapalı) ile 255 (her zaman açık) arasında görev döngüsü int değeri

Örnek Kod:

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)

Nerede,

pin: pin numarası

val: YÜKSEK veya DÜŞÜK

Örnek Kod:

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
katma

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).

Burada digitalWrite (LOW) ekran görüntüsü:

digitalWrite (LOW)

Yani, çıkış pini 0V'dedir.


Şimdi digitalWrite (YÜKSEK) için:

Çıkış voltajı 5V'dir.

digitalWrite (HIGH)


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

Hadi analogu deneyelim (1):

analogWrite (1)

Gerilim seviyesinin çoğu zaman 0V olduğunu ve kısa süreler için 5V'a gittiğini görebilirsiniz. Ayrıca frekansın 490 Hz olduğunu görüyorsunuz, bu da analogWrite için referans sayfası ne diyor? olacak.


Yakınlaştırma:

analogWrite (1) - zoomed

Çıkış, zamanlayıcının periyodu olan 2048 µs'nin tam olarak 1/25'i olan 8 µs için yüksektir. Yani, 1/256 (% 0.39) bir görev döngüsü var.


AnalogWrite (127) deneyelim - 0 ile 255 arasında bir yarı yol:

analogWrite (127)

Şimdi çıktıyı tam olarak yarıya, YÜKSEK zamanın YÜKSEK olduğunu görebiliyorsunuz.


Hadi analogWrite'ı (254) deneyelim:

analogWrite (254)

This is the opposite of analogWrite (1). The output is HIGH all the time except for a brief period. Yakınlaştırma:

analogWrite (254) - zoomed

Şimdi çıkış 8 µs için açık olan önceki resme kıyasla 8 µs için kapalı .


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

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

Bu, wiring_analog.c dosyasındaki ilgili kod tarafından kanıtlanmıştır:

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

özet

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).


Zamanlayıcılar hakkında daha fazla bilgi için zamanlayıcılar hakkındaki sayfamıza bakın.

5
katma

digitalWrite, pini, yine bu pin için digitalWrite çağrılana kadar tam olarak bu değerde kalan bir yüksek veya düşük değere ayarlar.

analogWrite, pimi ikinci parametre olarak belirtilen görev döngüsüne göre bir darbe uzunluğuna sahip olan bir salınım değerine sahip olacak şekilde ayarlar.

Yani:

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
katma

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
katma

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

Nerede, YÜKSEK = 5 V ve DÜŞÜK = 0 V

analogWrite Set the PWM value of PWM pin

(Arduino UNO'da, PWM pimleri 3, 5, 6, 9, 10, 11'dir.)

Pimi periyodik yüksek/düşük sinyale ayarlayacaktır.

analogWrite(PWMpin,255)

Zamanın YÜKSEK 100% olacak

analogWrite(PWMpin,127)

Zamanın% 50’si ve bu sürenin% 50’si DÜŞÜK

1
katma

Peki analogWrite (X, 255) ve digitalWrite (X, HIGH) arasındaki fark nedir? Muhtemelen hiçbir şey, belki de işlemci, PWM'yi ve ayrıca stili kullanması gerekmediğini anlamak için bazı ekstra şeyler yapmak zorundadır.

0
katma