Qual è ' la differenza tra analogWrite e digitalWrite?

Come afferma il titolo. Qual è la differenza tra i due?

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

Commenti

  • Non ‘ intendo essere scortese, ma cosa cera di confuso su questo nella documentazione su arduino.cc o incluso con il IDE?

Answer

digitalWrite imposterà il pin specificato su uno dei due stati: HIGH / LOW, che equivale a 5 V (3,3 V su alcune schede) e massa rispettivamente.

analogWrite può variare in base al tipo di uscita utilizzata.

Se applicato a un pin PWM, imposterà il pin a un segnale periodico alto / basso, dove la percentuale del segnale speso alto è proporzionale al valore scritto. ad esempio –

 analogWrite(PWMpin,255) 

Sarà ALTA 100% del tempo, mentre

 analogWrite(PWMpin,127) 

sarà ALTO il 50% delle volte e BASSO il 50% delle volte

Quando si applica analogWrite a un pin DAC (disponibile su alcune schede, come DUE o MEGA ) anal ogWrite farà effettivamente in modo che il pin specificato emetta un livello di tensione proporzionale al valore analogico specificato

Ad esempio, su Due, con una tensione massima di 3,3 V e una risoluzione analogica predefinita di 8 bit – [0: 255]

 analogWrite(DACpin,255) 

Provocherà luscita del pin specificato 3.3v e-

 analogWrite(DACpin,127) 

Provocherà loutput del pin specificato 1.35v

Commenti

  • No, non cè nessun DAC sul Mega.
  • hai ragione, risposta modificata per riflettere questo.
  • Ottimo. Mi sono preso la libertà di rendere la modifica più concisa.
  • Credo che ci sia un ” maxanalog ” definire o costante, per fornire una migliore compatibilità con altre piattaforme. Lesp8266 ha una scrittura analogica che può variare da 0 a 1024. * ‘ mi sono grattato qualche capello cercando di capire perché il mio controller a led RGB non ‘ t essere brillante con lo stesso codice, pensavo fosse dovuto alla differenza di potenza o tensione, ma ho usato un MOSFET con un fattore (guadagno?) adatto. Era semplicemente acceso per il (1024/256) del tempo.

Risposta

analogWrite (): Il metodo analogWrite () imposta il valore di un pin di uscita PWM. AnalogWrite () è su una scala da 0 a 255, in modo tale che analogWrite (255) richiede un duty cycle del 100% (sempre attivo) e analogWrite (127) è un duty cycle del 50% (metà del tempo).

Ciclo di lavoro PWM

Sintassi : analogWrite (pin, val)

Dove,

pin: il numero del pin di uscita PWM.

val: int valore del duty cycle compreso tra 0 (sempre disattivato) e 255 (sempre attivo)

Codice di esempio:

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: Il metodo digitalWrite () imposta il valore di un pin digitale come HIGH o LOW. Qui, 5 V (o 3,3 V su schede 3,3 V) per HIGH, 0 V (terra) per LOW.

Sintassi: digitalWrite (pin, val)

Where,

pin: il numero pin

val: HIGH o LOW

Codice di esempio:

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 } 

Risposta

digitalWrite imposta il pin di uscita su BASSO o ALTO (dove queste tensioni dipendono dalla V cc del processore. Per Uno o Mega sarebbe 0V o 5V (o vicino ad esso).

Ecco “uno screenshot di digitalWrite (LOW):

digitalWrite (LOW)

Ovvero, il pin di uscita è a 0V.


Ora per digitalWrite (HIGH):

La tensione di uscita è 5V.

digitalWrite (HIGH)


analogWrite avrebbe dovuto chiamarsi PWMwrite poiché conf igura i timer del processore per emettere PWM (modulazione di larghezza di impulso).

Proviamo analogWrite (1):

analogWrite (1)

Puoi vedere che il livello di tensione è di 0 V la maggior parte del tempo e va a 5 V per brevi periodi. Vedi anche che la frequenza è 490 Hz, che è ciò che la pagina di riferimento per analogWrite dice che sarà.


Ingrandimento:

analogWrite (1) - ingrandito

Loutput è alto per 8 µs, che è esattamente 1/256 di 2048 µs che è il periodo del timer. Quindi, abbiamo un ciclo di lavoro di 1/256 (0,39%).


Proviamo analogWrite (127) – a metà strada da 0 a 255:

analogWrite (127)

Ora puoi vedere che loutput è ALTO esattamente la metà del tempo e BASSO il resto del tempo.


Proviamo analogWrite (254):

analogWrite (254)

Questo è lopposto di analogWrite (1). Luscita è sempre ALTA tranne che per un breve periodo. Ingrandimento:

analogWrite (254) - ingrandito

Ora loutput è disattivato per 8 µs, rispetto allimmagine precedente in cui era attivo per 8 µs.


analogWrite (0) è uguale a digitalWrite (LOW).

analogWrite (255) è uguale a digitalWrite (HIGH).

Ciò è dimostrato dal codice pertinente in wiring_analog.c:

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

Riepilogo

analogWrite fondamentalmente configura i timer hardware per loutput PWM. Una volta fatto ciò, lhardware del timer emette il ciclo di lavoro richiesto (da 0 a 255) dove 0 è sempre spento, 255 è sempre acceso e un valore intermedio fornisce PWM (uscita pulsata).


Per ulteriori informazioni sui timer, vedere la mia pagina sui timer .

Risposta

digitalWrite imposta il pin su un valore alto o basso che rimane esattamente a quel valore finché digitalWrite non viene chiamato di nuovo per quel pin.

analogWrite imposta il pin in modo che abbia un valore oscillante che ha un lunghezza dellimpulso basata sul ciclo di lavoro specificato come secondo parametro.

Quindi:

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

Risposta

analogWrite (): scrive un valore analogico (onda PWM) su un pin . Può essere utilizzato per accendere un LED a luminosità variabile o azionare un motore a varie velocità. Dopo una chiamata a analogWrite(), il pin genererà unonda quadra costante del ciclo di lavoro specificato fino alla chiamata successiva a analogWrite() (o un chiamata a digitalRead() o digitalWrite() sullo stesso pin). La frequenza del segnale PWM sulla maggior parte dei pin è di circa 490 Hz. Sulle schede Uno e simili, i pin 5 e 6 hanno una frequenza di circa 980 Hz. Anche i pin 3 e 11 sul Leonardo funzionano a 980 Hz.

Per i dettagli, visita: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Legge il valore dal pin analogico specificato. La scheda Arduino contiene un convertitore analogico-digitale a 6 canali (8 canali su Mini e Nano, 16 su Mega), 10 bit. Ciò significa che mapperà le tensioni di ingresso tra 0 e 5 volt in valori interi compresi tra 0 e 1023. Ciò produce una risoluzione tra le letture di: 5 volt / 1024 unità o 0,0049 volt (4,9 mV) per unità. Lintervallo di input e la risoluzione possono essere modificati utilizzando analogReference().

Per i dettagli, visita: https://www.arduino.cc/en/Reference/analogRead

Risposta

digitalWrite imposta il pin specificato su uno dei due stati – HIGH / LOW

Dove, HIGH = 5 V e LOW = 0 V

analogWrite Imposta il valore PWM del pin PWM

(In Arduino UNO, i pin PWM sono 3, 5, 6, 9, 10, 11)

Imposta il pin a un segnale periodico alto / basso.

analogWrite(PWMpin,255) 

Sarà ALTO il 100% delle volte, mentre

analogWrite(PWMpin,127) 

Sarà ALTO il 50% delle volte e BASSO il 50% delle volte

Risposta

Quindi qual è la differenza tra analogWrite (X, 255) e digitalWrite (X, HIGH)? Probabilmente niente, tranne forse il processore deve fare alcune cose extra per capire che non ha bisogno di usare PWM, e anche lo stile.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *