Care este ' diferența dintre analogWrite și digitalWrite?

După cum afirmă titlul. Care este diferența dintre cele două?

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

Comentarii

  • Nu ‘ vreau să fiu nepoliticos, dar ceea ce era confuz în acest sens în documentația de pe arduino.cc sau inclus în IDE?

Răspuns

digitalWrite va seta pinul specificat la una dintre cele două stări – HIGH / LOW, care echivalează cu 5v (3,3v pe unele plăci) și respectiv la sol.

analogWrite poate varia în funcție de tipul de ieșire utilizat.

Dacă este aplicat unui pin PWM – acesta va seta pinul la un semnal periodic mare / scăzut, în care procentul semnalului cheltuit mare este proporțional cu valoarea scrisă. de exemplu –

 analogWrite(PWMpin,255) 

Va fi ÎNALT 100% a timpului, în timp ce

 analogWrite(PWMpin,127) 

Va fi ÎNALT 50% din timp și MINIM 50% din timp

La aplicarea analogWrite la un pin DAC (disponibil pe unele plăci, cum ar fi DUE sau MEGA ) anal ogWrite va determina de fapt pinul specificat să producă un nivel de tensiune proporțional cu valoarea analogică specificată

De exemplu, pe Due, cu o tensiune maximă de 3,3v și o rezoluție analogică implicită de 8 biți – [0: 255]

 analogWrite(DACpin,255) 

Va determina pinul specificat să producă 3.3v și-

 analogWrite(DACpin,127) 

Va determina pinul specificat să producă 1.35v

Comentarii

  • Nu, nu există DAC pe Mega.
  • aveți dreptate, răspundeți modificat pentru a reflecta acest lucru.
  • Excelent. Mi-am luat libertatea de a face editarea mai concisă.
  • Cred că există o ” maxanalog ” constant, pentru a oferi o mai bună compatibilitate cu alte platforme. Esp8266 are un analogwrite care poate varia de la 0 la 1024. * Am ‘ am zgâriat niște fire de păr încercând să aflu de ce controlerul meu RGB nu ar ‘ să nu fie la fel de strălucitor cu același cod, credeam că se datorează diferenței de putere sau tensiune, dar am folosit un MOSFET cu factor de (câștig?) potrivit. A fost pur și simplu activat pentru (1024/256) al timpului.

Răspuns

analogWrite (): Metoda analogWrite () setează valoarea unui pin de ieșire PWM. AnalogWrite () este pe o scară de la 0 la 255, astfel încât analogWrite (255) solicită un ciclu de funcționare de 100% (întotdeauna activat), iar analogWrite (127) este un ciclu de funcționare de 50% (la jumătate din timp).

PWM Duty Cycle

Sintaxă : analogWrite (pin, val)

Unde,

pin: numărul pinului de ieșire PWM.

val: valoarea int a ciclului de funcționare între 0 (întotdeauna oprit) și 255 (întotdeauna activat)

Exemplu de cod:

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 () setează valoarea unui pin digital ca HIGH sau LOW. Aici, 5V (sau 3,3V pe plăci de 3,3V) pentru HIGH, 0V (la sol) pentru LOW.

Sintaxă: digitalWrite (pin, val)

Unde,

pin: numărul pin

val: HIGH sau LOW

Exemplu de cod:

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 } 

Răspuns

digitalWrite setează pinul de ieșire fie LOW, fie HIGH (unde aceste tensiuni depind de V cc al procesorului. Pentru un Uno sau Mega care ar fi 0V sau 5V (sau aproape de acesta).

Aici „o captură de ecran a digitalWrite (LOW):

digitalWrite (LOW)

Adică pinul de ieșire este la 0V.


Acum pentru digitalWrite (HIGH):

Tensiunea de ieșire este de 5 V.

digitalWrite (HIGH)


analogWrite ar fi trebuit să fie numit PWMwrite de indică temporizatoarele procesorului să producă PWM (modulare la lățimea pulsului).

Să încercăm analogWrite (1):

analogWrite (1)

Puteți vedea că nivelul de tensiune este de 0V de cele mai multe ori și merge la 5V pentru perioade scurte. De asemenea, vedeți că frecvența este de 490 Hz, ceea ce spune pe pagina de referință pentru analogWrite .


Mărire:

analogWrite (1) - zoom

Ieșirea este mare pentru 8 µs, care este exact 1/256 din 2048 µs, care este perioada temporizatorului. Deci, avem un ciclu de funcționare de 1/256 (0,39%).


Să încercăm analogWrite (127) – la jumătatea drumului de la 0 la 255:

analogWrite (127)

Acum puteți vedea că ieșirea este MARE exact la jumătate din timp și MICĂ restul timpului.


Să încercăm analogWrite (254):

analogWrite (254)

Acesta este opusul analogWrite (1). Ieșirea este HIGH tot timpul, cu excepția unei perioade scurte. Zoom în:

analogWrite (254) - mărit

Acum, ieșirea este dezactivată pentru 8 µs – comparativ cu imaginea anterioară unde a fost activată pentru 8 µs.


analogWrite (0) este același cu digitalWrite (LOW).

analogWrite (255) este același lucru cu digitalWrite (HIGH).

Acest lucru este dovedit de codul relevant din wiring_analog.c:

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

Rezumat

analogWrite configurează practic cronometrele hardware pentru ieșirea PWM. Odată ce ați făcut ca hardware-ul temporizatorului să scoată ciclul de funcționare solicitat (de la 0 la 255), unde 0 este întotdeauna oprit, 255 este întotdeauna activat, iar o anumită valoare vă oferă PWM (ieșire pulsată). > Pentru mai multe informații despre temporizatoare, consultați pagina mea despre temporizatoare .

Răspuns

digitalWrite setează pinul la o valoare mare sau scăzută care rămâne exact la acea valoare până când digitalWrite este apelat din nou pentru acel pin.

analogWrite setează pinul să aibă o valoare oscilantă care are o lungimea impulsului pe baza ciclului de funcționare specificat ca al doilea parametru.

Deci:

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

Răspuns

analogWrite (): Scrie o valoare analogică (undă PWM) pe un pin . Poate fi folosit pentru a aprinde un LED la diferite luminozități sau pentru a conduce un motor la diferite viteze. După un apel către analogWrite(), pinul va genera un val pătrat constant al ciclului de funcționare specificat până la următorul apel către analogWrite() (sau un apelați la digitalRead() sau digitalWrite() pe același pin). Frecvența semnalului PWM pe majoritatea pinilor este de aproximativ 490 Hz. Pe plăcile Uno și similare, pinii 5 și 6 au o frecvență de aproximativ 980 Hz. Știfturile 3 și 11 de pe Leonardo rulează, de asemenea, la 980 Hz.

Pentru detalii vizitați: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Citește valoarea din pinul analogic specificat. Placa Arduino conține un convertor analogic digital pe 10 biți (8 canale pe Mini și Nano, 16 pe Mega). Aceasta înseamnă că va mapa tensiunile de intrare între 0 și 5 volți în valori între 0 și 1023. Aceasta dă o rezoluție între citiri de: 5 volți / 1024 unități sau, 0,0049 volți (4,9 mV) pe unitate. Gama de intrare și rezoluția pot fi modificate folosind analogReference().

Pentru detalii vizitați: https://www.arduino.cc/en/Reference/analogRead

Răspuns

digitalWrite setați pinul specificat la una dintre cele două stări – HIGH / LOW

Unde, HIGH = 5 V și LOW = 0 V

analogWrite Setați valoarea PWM a pinului PWM

(În Arduino UNO, pinii PWM sunt 3, 5, 6, 9, 10, 11)

Acesta va seta pinul la un semnal periodic mare / scăzut.

analogWrite(PWMpin,255) 

Va fi ÎNALT 100% din timp, în timp ce

analogWrite(PWMpin,127) 

Va fi ÎNALT 50% din timp și MINIM 50% din timp

Răspuns

Deci care este diferența dintre analogWrite (X, 255) și digitalWrite (X, HIGH)? Probabil nimic, cu excepția faptului că procesorul trebuie să facă unele lucruri suplimentare pentru a descoperi că nu are nevoie să folosească PWM și, de asemenea, stilul.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *