Jaka ' jest różnica między analogWrite a digitalWrite?

Zgodnie z tytułem. Jaka jest różnica między nimi?

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

Komentarze

  • Nie ' nie chcę być niegrzeczny, ale co było niejasne w dokumentacji na arduino.cc lub dołączonej do IDE?

Answer

digitalWrite ustawi określony pin na jeden z dwóch stanów – HIGH / LOW, który równa się odpowiednio 5 V (3,3 V na niektórych płytach) i uziemieniu.

analogWrite może się różnić w zależności od typu używanego wyjścia.

Jeśli zostanie zastosowany do pinu PWM – ustawi pin do okresowego wysokiego / niskiego sygnału, gdzie procent sygnału wydanego w górę jest proporcjonalny do zapisanej wartości. na przykład –

 analogWrite(PWMpin,255) 

Będzie WYSOKI 100% czasu, podczas gdy

 analogWrite(PWMpin,127) 

Będzie WYSOKI w 50% przypadków i NISKI w 50% przypadków

Podczas stosowania analogWrite do pinu DAC (dostępny na niektórych płytach, takich jak DUE lub MEGA ) anal ogWrite w rzeczywistości spowoduje, że określony pin wyprowadzi poziom napięcia proporcjonalny do określonej wartości analogowej

Na przykład na Due, przy maksymalnym napięciu 3,3 V i domyślnej rozdzielczości analogowej 8 bitów – [0: 255]

 analogWrite(DACpin,255) 

Spowoduje, że określony pin wyprowadzi napięcie 3,3 V oraz –

 analogWrite(DACpin,127) 

Spowoduje, że określony pin wyprowadzi napięcie 1.35v

Komentarze

  • Nie, w Mega nie ma przetwornika cyfrowo-analogowego.
  • masz rację, zredagowano odpowiedź, aby to odzwierciedlić.
  • Świetnie. Pozwoliłem sobie na bardziej zwięzłą edycję.
  • Uważam, że istnieje ” maxanalog ” zdefiniuj lub stała, aby zapewnić lepszą kompatybilność z innymi platformami. Esp8266 ma zapis analogowy, który może mieć zakres od 0 do 1024. * ' wydrapałem kilka włosów, próbując dowiedzieć się, dlaczego mój kontroler LED RGB nie ' t być tak jasne z tym samym kodem, myślałem, że to z powodu różnicy mocy lub napięcia, ale użyłem tranzystora MOSFET z odpowiednim współczynnikiem (wzmocnienie?). Po prostu było włączone przez (1024/256) czasu.

Odpowiedź

analogWrite (): Metoda analogWrite () ustawia wartość styku wyjściowego PWM. AnalogWrite () jest w skali od 0 do 255, tak że analogWrite (255) żąda 100% cyklu pracy (zawsze włączone), a analogWrite (127) to 50% cyklu pracy (przez połowę czasu).

Cykl pracy PWM

Składnia : analogWrite (pin, val)

Gdzie,

pin: numer pinu wyjścia PWM.

val: int wartość cyklu pracy od 0 (zawsze wyłączone) do 255 (zawsze włączone)

Przykładowy 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: Metoda digitalWrite () ustawia wartość cyfrowego pinu jako WYSOKA lub NISKA. Tutaj 5 V (lub 3,3 V na płytach 3,3 V) dla WYSOKIEGO, 0 V (uziemienie) dla NISKIE.

Składnia: digitalWrite (pin, val)

Gdzie,

pin: numer pinu

val: HIGH or LOW

Przykładowy 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 } 

Odpowiedź

digitalWrite ustawia pin wyjściowy na LOW lub HIGH (gdzie te napięcia zależą od V cc procesora. Dla Uno lub Mega będzie to 0V lub 5V (lub blisko tego).

Oto zrzut ekranu z digitalWrite (LOW):

digitalWrite (LOW)

Oznacza to, że pin wyjściowy ma napięcie 0V.


Teraz dla digitalWrite (HIGH):

Napięcie wyjściowe wynosi 5V.

digitalWrite (HIGH)


analogWrite naprawdę powinno być nazwane PWMwrite, ponieważ to conf włącza zegary procesora do wyjścia PWM (modulacja szerokości impulsu).

Spróbujmy analogWrite (1):

analogWrite (1)

Możesz zobaczyć, że poziom napięcia przez większość czasu wynosi 0 V, a przez krótkie okresy osiąga 5 V. Widzisz również, że częstotliwość wynosi 490 Hz, co według strony odniesienia dla analogWrite podaje, że będzie.


Powiększanie:

analogWrite (1) - powiększony

Wyjście jest wysokie przez 8 µs, co stanowi dokładnie 1/256 z 2048 µs, czyli okres licznika czasu. Mamy więc cykl pracy 1/256 (0,39%).


Spróbujmy analogWrite (127) – w połowie od 0 do 255:

analogWrite (127)

Teraz widać, że wynik jest WYSOKI dokładnie przez połowę czasu, a NISKI przez resztę.


Spróbujmy analogWrite (254):

analogWrite (254)

Jest to przeciwieństwo analogWrite (1). Wyjście jest HIGH przez cały czas z wyjątkiem krótkiego okresu. Powiększanie:

analogWrite (254) - powiększony

Teraz wyjście jest wyłączone przez 8 µs – w porównaniu z wcześniejszym obrazem, na którym było włączone przez 8 µs.


analogWrite (0) to to samo co digitalWrite (LOW).

analogWrite (255) to to samo co digitalWrite (HIGH).

Potwierdza to odpowiedni kod wiring_analog.c:

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

Podsumowanie

analogWrite w zasadzie konfiguruje sprzętowe zegary do wyjścia PWM. Gdy to zrobisz, sprzęt timera wyprowadza żądany cykl pracy (od 0 do 255), gdzie 0 jest zawsze wyłączone, 255 jest zawsze włączone, a pewna wartość między nimi daje PWM (wyjście impulsowe).


Aby uzyskać więcej informacji na temat timerów, zobacz moją stronę o licznikach .

Odpowiedź

digitalWrite ustawia pin na wysoką lub niską wartość, która pozostaje dokładnie taka, aż digitalWrite zostanie ponownie wywołany dla tego pinu.

analogWrite ustawia pin tak, aby miał oscylującą wartość, która ma długość impulsu na podstawie cyklu pracy określonego jako drugi parametr.

A więc:

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

Odpowiedź

analogWrite (): Zapisuje wartość analogową (falę PWM) na pinie . Może być używany do oświetlania diod LED o różnej jasności lub napędzania silnika z różnymi prędkościami. Po wywołaniu analogWrite(), pin wygeneruje stałą falę prostokątną o określonym cyklu pracy, aż do następnego wywołania analogWrite() (lub zadzwoń do digitalRead() lub digitalWrite() na tym samym pinie). Częstotliwość sygnału PWM na większości pinów wynosi około 490 Hz. Na płytach Uno i podobnych piny 5 i 6 mają częstotliwość około 980 Hz. Piny 3 i 11 w Leonardo również działają z częstotliwością 980 Hz.

Aby uzyskać szczegółowe informacje, odwiedź stronę: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Odczytuje wartość z określonego pinu analogowego. Płytka Arduino zawiera 6-kanałowy (8 kanałów na Mini i Nano, 16 na Mega), 10-bitowy przetwornik analogowo-cyfrowy. Oznacza to, że odwzorowuje napięcia wejściowe od 0 do 5 woltów na wartości całkowite od 0 do 1023. Daje to rozdzielczość między odczytami: 5 V / 1024 jednostki lub 0,0049 V (4,9 mV) na jednostkę. Zakres wejściowy i rozdzielczość można zmienić za pomocą analogReference().

Aby uzyskać szczegółowe informacje, odwiedź: https://www.arduino.cc/en/Reference/analogRead

Odpowiedź

digitalWrite ustaw określony pin na jeden z dwóch stanów – WYSOKI / NISKI

Gdzie, WYSOKI = 5 V i NISKI = 0 V

analogWrite Ustaw wartość PWM pinu PWM

(W Arduino UNO piny PWM to 3, 5, 6, 9, 10, 11)

Ustawi pin do okresowego wysokiego / niskiego sygnału.

analogWrite(PWMpin,255) 

Będzie WYSOKI przez 100% czasu, podczas gdy

analogWrite(PWMpin,127) 

Będzie WYSOKI w 50% przypadków i NISKI w 50% przypadków

Odpowiedź

Więc Jaka jest różnica między analogWrite (X, 255) a digitalWrite (X, HIGH)? Prawdopodobnie nic, z wyjątkiem być może procesor musi wykonać kilka dodatkowych czynności, aby stwierdzić, że nie potrzebuje PWM, a także stylu.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *