Sự khác biệt giữa analogWrite và digitalWrite là gì?


8

Như tiêu đề nêu. Sự khác biệt giữa hai là gì?

analogWrite(pin,0-255) đấu với digitalWrite(pin,LOW-HIGH)


Tôi không có ý thô lỗ nhưng điều gì đã gây nhầm lẫn về điều này trong tài liệu tại arduino.cc hoặc kèm theo IDE?
linhartr22

Câu trả lời:


16

digitalWrite sẽ đặt chân được chỉ định thành một trong hai trạng thái - CAO / THẤP, tương đương với 5v (3,3v trên một số bảng) và mặt đất tương ứng.

analogWrite có thể thay đổi theo loại đầu ra được sử dụng.

Nếu được áp dụng cho chân PWM - nó sẽ đặt chân thành tín hiệu cao / thấp định kỳ, trong đó tỷ lệ phần trăm của tín hiệu chi tiêu cao tỷ lệ thuận với giá trị được ghi. ví dụ -

    analogWrite(PWMpin,255)

Sẽ CAO 100% thời gian, trong khi

    analogWrite(PWMpin,127)

Sẽ CAO 50% thời gian và THẤP 50% thời gian

Khi áp dụng analogWrite cho chân DAC (có sẵn trên một số bo mạch, như DUE hoặc MEGA ), analogWrite thực sự sẽ khiến chân được chỉ định tạo ra mức điện áp tỷ lệ với giá trị tương tự đã chỉ định

Ví dụ: trên Do, với điện áp tối đa 3,3v và độ phân giải tương tự mặc định là 8 bit - [0: 255]

    analogWrite(DACpin,255)

Sẽ khiến chân được chỉ định xuất ra 3.3v và-

    analogWrite(DACpin,127)

Sẽ làm cho pin được chỉ định để xuất 1.35v


2
Không, không có DAC trên Mega.
Edgar Bonet

bạn đã đúng, trả lời chỉnh sửa để phản ánh điều này.
TanyaV

Tuyệt quá. Tôi lấy tự do để chỉnh sửa ngắn gọn hơn.
Edgar Bonet

Tôi tin rằng có một "maxanalog" xác định hoặc không đổi, để cung cấp khả năng tương thích tốt hơn với các nền tảng khác. Esp8266 có một tín hiệu tương tự có thể dao động từ 0 đến 1024. * Tôi đã cào một số sợi tóc để cố gắng tìm ra lý do tại sao bộ điều khiển led RGB của tôi không sáng bằng cùng một mã, nghĩ rằng đó là do sự khác biệt về công suất hoặc điện áp, nhưng tôi đã sử dụng một MOSFET với hệ số (gain?) phù hợp. Nó chỉ đơn giản là vào ngày (1024/256).
Paul

6

analogWrite (): Phương thức analogWrite () đặt giá trị của chân đầu ra PWM. AnalogWrite () ở thang điểm 0 - 255, sao cho analogWrite (255) yêu cầu chu kỳ nhiệm vụ 100% (luôn bật) và analogWrite (127) là chu kỳ nhiệm vụ 50% (trong một nửa thời gian).

Chu kỳ nhiệm vụ PWM

Cú pháp : analogWrite (pin, val)

Ở đâu,

pin: số chân đầu ra PWM.

val: giá trị int của chu kỳ nhiệm vụ từ 0 (luôn tắt) đến 255 (luôn bật)

Mã ví dụ:

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: Phương thức digitalWrite () đặt giá trị của pin kỹ thuật số là CAO hoặc THẤP. Ở đây, 5V (hoặc 3,3V trên bảng 3,3V) cho CAO, 0V (mặt đất) cho THẤP.

Cú pháp: digitalWrite (pin, val)

Ở đâu,

pin: số pin

val: CAO hoặc THẤP

Mã ví dụ:

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
}

5

digitalWriteđặt chân đầu ra thành THẤP hoặc CAO (trong đó các điện áp đó phụ thuộc vào V cc của bộ xử lý. Đối với Uno hoặc Mega sẽ là 0V hoặc 5V (hoặc gần với nó).

Dưới đây là ảnh chụp màn hình của DigitalWrite (THẤP):

kỹ thuật sốWrite (THẤP)

Đó là, pin đầu ra là 0V.


Bây giờ cho digitalWrite (CAO):

Điện áp đầu ra là 5V.

kỹ thuật sốWrite (CAO)


analogWrite thực sự nên được đặt tên là PWMwrite vì nó cấu hình bộ định thời của bộ xử lý thành đầu ra PWM (điều chế độ rộng xung).

Hãy thử analogWrite (1):

analogWrite (1)

Bạn có thể thấy rằng mức điện áp là 0V trong hầu hết thời gian và sẽ chuyển sang 5V trong thời gian ngắn. Bạn cũng thấy rằng tần số là 490 Hz, đó là những gì trang tham chiếu cho analogWrite nói rằng nó sẽ là.


Phóng to:

analogWrite (1) - phóng to

Sản lượng cao cho 8 Lời, chính xác là 1/256 trong số 2048 lượt, đó là khoảng thời gian của bộ đếm thời gian. Vì vậy, chúng tôi có chu kỳ thuế là 1/256 (0,39%).


Hãy thử analogWrite (127) - nửa chừng từ 0 đến 255:

analogWrite (127)

Bây giờ bạn có thể thấy rằng đầu ra CAO chính xác bằng một nửa thời gian và THẤP thời gian còn lại.


Hãy thử analogWrite (254):

analogWrite (254)

Điều này ngược lại với analogWrite (1). Đầu ra luôn luôn CAO trừ một khoảng thời gian ngắn. Phóng to:

analogWrite (254) - phóng to

Bây giờ đầu ra đã tắt cho 8 Lời nói - so với hình ảnh trước đó, nó được bật cho 8 Lời nói.


analogWrite (0)cũng giống như digitalWrite (LOW).

analogWrite (255)cũng giống như digitalWrite (HIGH).

Điều này được chứng minh bằng mã có liên quan trong hệ thống dây điện_analog.c:

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

Tóm lược

analogWritevề cơ bản cấu hình bộ định thời phần cứng để đầu ra PWM. Khi bạn làm điều đó, phần cứng bộ đếm thời gian sẽ xuất ra chu kỳ nhiệm vụ được yêu cầu (từ 0 đến 255) trong đó 0 luôn tắt, 255 luôn bật và một số giá trị ở giữa cung cấp cho bạn PWM (đầu ra xung).


Để biết thêm thông tin về bộ hẹn giờ, hãy xem trang của tôi về bộ tính giờ .


3

digitalWrite đặt mã pin thành giá trị cao hoặc thấp vẫn giữ nguyên giá trị đó cho đến khi digitalWrite được gọi lại cho pin đó.

analogWrite đặt chân có giá trị dao động có độ dài xung dựa trên chu kỳ nhiệm vụ được chỉ định làm tham số thứ hai.

Vì thế:

digitalWrite (5, HIGH);    // Pin 5 goes high
analogWrite (6, 127);      // Pin 6 oscillates regularly between 0v and 5v (or 3.3v) at about 250Hz.

2

analogWrite (): Ghi giá trị tương tự (sóng PWM) vào chân. Có thể được sử dụng để chiếu sáng đèn LED ở các độ sáng khác nhau hoặc điều khiển động cơ ở nhiều tốc độ khác nhau. Sau một cuộc gọi đến analogWrite(), pin sẽ tạo ra một sóng vuông ổn định của chu kỳ nhiệm vụ được chỉ định cho đến khi cuộc gọi tiếp theo đến analogWrite()(hoặc một cuộc gọi đến digitalRead()hoặc digitalWrite()trên cùng một pin). Tần số của tín hiệu PWM trên hầu hết các chân là khoảng 490 Hz. Trên bảng Uno và các bảng tương tự, chân 5 và 6 có tần số xấp xỉ 980 Hz. Các chân 3 và 11 trên Leonardo cũng chạy ở tần số 980 Hz.

Để biết chi tiết, hãy truy cập: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Đọc giá trị từ chân analog được chỉ định. Bảng mạch Arduino chứa 6 kênh (8 kênh trên Mini và Nano, 16 trên Mega), bộ chuyển đổi tương tự sang kỹ thuật số 10 bit. Điều này có nghĩa là nó sẽ ánh xạ điện áp đầu vào trong khoảng từ 0 đến 5 volt thành các giá trị nguyên từ 0 đến 1023. Điều này mang lại độ phân giải giữa các giá trị đọc: 5 volt / 1024 đơn vị hoặc, 0,0049 volt (4,9 mV) trên mỗi đơn vị. Phạm vi đầu vào và độ phân giải có thể được thay đổi bằng cách sử dụng analogReference().

Để biết chi tiết, hãy truy cập: https://www.arduino.cc/en/Reference/analogRead


1

digitalWrite đặt chân được chỉ định thành một trong hai trạng thái - CAO / THẤP

Ở đâu, CAO = 5 V và THẤP = 0 V

analogWrite Đặt giá trị PWM của chân PWM

(Trong Arduino UNO, chân PWM là 3, 5, 6, 9, 10, 11)

Nó sẽ đặt chân thành tín hiệu cao / thấp định kỳ.

analogWrite(PWMpin,255)

Sẽ CAO 100% thời gian, trong khi

analogWrite(PWMpin,127)

Sẽ CAO 50% thời gian và THẤP 50% thời gian


0

Vậy sự khác biệt giữa analogWrite (X, 255) và digitalWrite (X, CAO) là gì? Có lẽ không có gì, ngoại trừ có lẽ bộ xử lý phải thực hiện thêm một số thứ để giải quyết rằng nó không cần sử dụng PWM, và cả kiểu dáng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.