Mi a ' különbség az analogWrite és a digitalWrite között?

Ahogy a cím is mondja. Mi a különbség a kettő között?

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

Megjegyzések

  • Nem

nem azt akarom, hogy durva legyek, de ami ebben zavarba ejtett az arduino.cc dokumentációjában vagy a IDE?

Válasz

A digitalWrite a megadott PIN-kódot két állapot egyikére állítja – HIGH / LOW, amely egyenlő az 5v-vel (egyes táblákon 3.3v) és a földdel.

Az analogWrite a használt kimenet típusától függően változhat.

Ha PWM tűre alkalmazzák, akkor a csapot beállítja időszakos magas / alacsony jelre, ahol a magasra fordított jel százalékos aránya az írt értékkel. Például –

 analogWrite(PWMpin,255) 

100% MAGAS lesz míg az idő

 analogWrite(PWMpin,127) 

Az idő 50% -a MAGAS és az idő LOW 50% -a lesz

Az AnalWrite alkalmazásakor egy DAC tűhöz (elérhető egyes táblákon, például a DUE vagy MEGA ) anális Az ogWrite valójában azt eredményezi, hogy a megadott tű a megadott analóg értékkel arányos feszültségszintet bocsát ki.

Például a Due-nél, 3,3 V maximális feszültséggel és 8 bit alapértelmezett analóg felbontással – [0: 255]

 analogWrite(DACpin,255) 

A megadott PIN-kód 3.3v kimenetet eredményez, és-

 analogWrite(DACpin,127) 

A megadott PIN-kód 1,35v kimenetet eredményez

Megjegyzések

  • Nem, a Megán nincs DAC.
  • igazad van, a választ ennek megfelelően szerkesztették.
  • Nagyszerű. Megkaptam a szabadságot, hogy a szerkesztést tömörebbé tegyem.
  • Úgy gondolom, hogy van egy ” maxanalog ” definíció vagy állandó, hogy jobban kompatibilis legyen más platformokkal. Az esp8266 analóg írása 0 és 1024 között mozoghat. A / div> t legyen ugyanolyan fényes ugyanazzal a kóddal, úgy gondoltam, hogy ez a teljesítmény vagy a feszültség különbségének köszönhető, de én megfelelő (erősítés?) faktorral rendelkező MOSFET-et használtam. Egyszerűen (1024/256) volt bekapcsolva.

Válasz

analogWrite (): Az analogWrite () módszer egy PWM kimeneti tű értékét állítja be. Az analogWrite () 0–255 skálán van, úgy, hogy az analogWrite (255) 100% -os munkaciklust kér (mindig be van kapcsolva), az analogWrite (127) pedig 50% -os munkaciklust (az idő felénél).

PWM munkaciklus

Szintaxis : analogWrite (pin, val)

Hol,

pin: a PWM kimeneti pin száma.

val: a munkaciklus int értéke 0-tól (mindig ki) és 255-ig (mindig be van kapcsolva)

Példa kó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: A digitalWrite () módszer a digitális tű értékét HIGH vagy LOW értékre állítja. Itt 5 V (vagy 3,3 V 3,3 V-os táblákon) HIGH, 0 V (föld) LOW esetén.

Szintaxis: digitalWrite (pin, val)

Hol,

pin: a pin száma

val: HIGH vagy LOW

Példa kó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 } 

Válasz

digitalWrite a kimeneti csapot LOW vagy HIGH értékre állítja (ahol ezek a feszültségek a V cc-től függenek) A processzor . Uno vagy Mega esetén 0 vagy 5 V (vagy ahhoz közeli).

Itt található a digitalWrite (LOW) képernyőképe:

digitalWrite (LOW)

Vagyis a kimeneti tű 0 V-on van.


Most a digitalWrite (HIGH) esetében:

A kimeneti feszültség 5 V.

digitalWrite (HIGH)


analogWrite valóban PWMwrite nevet kellett volna kapni, mivel konf A processzor időzítőit a PWM (impulzusszélesség moduláció) kimenetére készteti.

Próbáljuk meg az analogWrite (1) -t:

analogWrite (1)

Láthatja, hogy a feszültségszint legtöbbször 0V, és rövid ideig 5V-ra vált. Azt is látja, hogy a frekvencia 490 Hz, ami az analóg írási referenciaoldal szerint lesz.


Nagyítás:

analogWrite (1) - nagyítva

A kimenet nagy értéke 8 µs, ami pontosan az 2048 µs 1/256 része, ami az időzítő időszaka. Tehát 1/256 (0,39%) terhelési ciklusunk van.


Próbáljuk meg az analogWrite (127) -et – félúton 0-tól 255-ig:

analogWrite (127)

Most láthatja, hogy a kimenet az idő fele pontosan HIGH, a fennmaradó idő pedig LOW.


Próbáljuk ki az analWrite (254) elemet:

analogWrite (254)

Ez ellentétes az analogWrite (1) -vel. A kimenet folyamatosan magas, kivéve egy rövid időszakot. Nagyítás:

analogWrite (254) - nagyítva

Most a kimenet ki 8 µs-ig – a korábbi képhez képest, ahol 8 µs-ig volt bekapcsolva.


analogWrite (0) ugyanaz, mint a digitalWrite (LOW).

analogWrite (255) ugyanaz, mint a digitalWrite (HIGH).

Ezt a wiring_analog.c megfelelő kódja bizonyítja:

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

Összegzés

analogWrite alapvetően a hardveres időzítőket konfigurálja a PWM kimenetére. Miután ezt megtette, az időzítő hardver kimeneti a kért ciklust (0-tól 255-ig), ahol a 0 mindig ki van kapcsolva, a 255 mindig be van kapcsolva, és a köztük lévő valamilyen érték PWM-t (impulzusos kimenetet) ad.


Az időzítőkről bővebben lásd: oldalam az időzítőkről .

Válasz

A digitalWrite beállítja a csapot egy magas vagy alacsony értékre, amely pontosan ezen az értéken marad, amíg a digitalWrite-t ismét meg nem hívják.

Az analogWrite a csapot rezgő értékre állítja, amelynek impulzus hossza a második paraméterként megadott munkaciklus alapján.

Tehát:

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

Válasz

analogWrite (): Analóg értéket (PWM hullám) ír egy csapra . Használható LED-ek változó fényerővel történő megvilágítására vagy motor különböző sebességgel történő vezetésére. A analogWrite() hívása után a tű a megadott munkaciklus állandó négyzethullámát generálja a következő div hívásig: analogWrite() (vagy hívás a digitalRead() vagy digitalWrite() címre ugyanazon a csapon). A PWM jel frekvenciája a legtöbb érintkezõn körülbelül 490 Hz. Az Uno és hasonló táblákon az 5. és 6. érintkezõ frekvenciája megközelítõleg 980 Hz. A Leonardo 3. és 11. csapja szintén 980 Hz-en fut.

További részletek: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Beolvassa az értéket a megadott analóg csapról. Az Arduino kártya 6 csatornás (8 csatornát a Mini és Nano, 16 a Mega), 10 bites analóg-digitális átalakítót tartalmaz. Ez azt jelenti, hogy a 0 és 5 volt közötti bemeneti feszültségeket 0 és 1023 közötti egész értékekre fogja feltérképezni. Ez felbontást eredményez: 5 volt / 1024 egység vagy, 0,0049 volt (4,9 mV) egységenként. A bemeneti tartomány és a felbontás a analogReference() paranccsal módosítható.

További részletek: https://www.arduino.cc/en/Reference/analogRead

Válasz

digitalWrite állítsa a megadott tűt a két állapot egyikére – HIGH / LOW

Hol, HIGH = 5 V és LOW = 0 V

analogWrite Állítsa be a PWM pin PWM értékét

(Az Arduino UNO-ban a PWM csapok 3, 5, 6, 9, 10, 11)

Beállítja a csapot időszakos magas / alacsony jelre.

analogWrite(PWMpin,255) 

Az idő 100% -ában MAGAS lesz, míg

analogWrite(PWMpin,127) 

Az idő 50% -a NAGY, és az idő LOW 50% -a lesz

Válasz

Tehát mi a különbség az analogWrite (X, 255) és a digitalWrite (X, HIGH) között? Valószínűleg semmi, kivéve talán a processzornak kell tennie néhány extra dolgot annak kiderítéséhez, hogy nem kell használnia a PWM-et, és a stílust is.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük