¿Cuál ' es la diferencia entre analogWrite y digitalWrite?

Como dice el título. ¿Cuál es la diferencia entre los dos?

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

Comentarios

  • No ‘ no me refiero a ser grosero, pero ¿qué fue confuso sobre esto en la documentación en arduino.cc o incluido con IDE?

Answer

digitalWrite establecerá el pin especificado en uno de dos estados – HIGH / LOW, que equivale a 5v (3.3v en algunas placas) y tierra respectivamente.

analogWrite puede variar según el tipo de salida utilizada.

Si se aplica a un pin PWM, establecerá el pin a una señal periódica alta / baja, donde el porcentaje de la señal gastada alta es proporcional al valor escrito. por ejemplo –

 analogWrite(PWMpin,255) 

Será ALTA 100% del tiempo, mientras que

 analogWrite(PWMpin,127) 

Será ALTO el 50% del tiempo y BAJO el 50% del tiempo

Al aplicar analogWrite a un pin DAC (disponible en algunas placas, como DUE o MEGA ) anal ogWrite en realidad hará que el pin especificado emita un nivel de voltaje proporcional al valor analógico especificado

Por ejemplo, en Due, con un voltaje máximo de 3.3v y una resolución analógica predeterminada de 8 bits – [0: 255]

 analogWrite(DACpin,255) 

Hará que el pin especificado emita 3.3v, y-

 analogWrite(DACpin,127) 

Hará que el pin especificado emita 1.35v

Comentarios

  • No, no hay DAC en el Mega.
  • está en lo correcto, respuesta editada para reflejar esto.
  • Genial. Me tomé la libertad de hacer la edición más concisa.
  • Creo que hay una » maxanalog » definir o constante, para proporcionar una mejor compatibilidad con otras plataformas. El esp8266 tiene una escritura analógica que puede variar de 0 a 1024. * Yo ‘ me he rascado algunos pelos tratando de averiguar por qué mi controlador LED RGB no ‘ t sea tan brillante con el mismo código, pensé que se debía a la diferencia de potencia o voltaje, pero usé un MOSFET con un factor adecuado (¿ganancia?). Simplemente estuvo encendido (1024/256) del tiempo.

Responder

analogWrite (): El método analogWrite () establece el valor de un pin de salida PWM. AnalogWrite () está en una escala de 0-255, de modo que analogWrite (255) solicita un ciclo de trabajo del 100% (siempre encendido), y analogWrite (127) es un ciclo de trabajo del 50% (en la mitad del tiempo).

Ciclo de trabajo PWM

Sintaxis : analogWrite (pin, val)

Donde,

pin: el número de pin de salida PWM.

val: valor int del ciclo de trabajo entre 0 (siempre desactivado) y 255 (siempre activado)

Código de ejemplo:

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: El método digitalWrite () establece el valor de un pin digital como ALTO o BAJO. Aquí, 5 V (o 3,3 V en placas de 3,3 V) para ALTO, 0 V (tierra) para BAJO.

Sintaxis: digitalWrite (pin, val)

Donde,

pin: el número de pin

val: HIGH o LOW

Código de ejemplo:

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 } 

Answer

digitalWrite establece el pin de salida en BAJO o ALTO (donde esos voltajes dependen de la V cc del procesador. Para un Uno o Mega que sería 0V o 5V (o cerca de él).

Aquí «una captura de pantalla de digitalWrite (LOW):

digitalWrite (LOW)

Es decir, el pin de salida está a 0V.


Ahora para digitalWrite (HIGH):

El voltaje de salida es 5V.

digitalWrite (HIGH)


analogWrite realmente debería haber sido llamado PWMwrite ya que conf configura los temporizadores del procesador para generar PWM (modulación de ancho de pulso).

Probemos con analogWrite (1):

analogWrite (1)

Puede ver que el nivel de voltaje es de 0 V la mayor parte del tiempo y va a 5 V durante períodos cortos. También ve que la frecuencia es 490 Hz, que es lo que dice que será la página de referencia para analogWrite .


Ampliando:

analogWrite (1) - ampliado

La salida es alta para 8 µs, que es exactamente 1/256 de 2048 µs, que es el período del temporizador. Entonces, tenemos un ciclo de trabajo de 1/256 (0.39%).


Probemos con analogWrite (127) – a medio camino de 0 a 255:

analogWrite (127)

Ahora puede ver que la salida es ALTA exactamente la mitad del tiempo y BAJA el resto del tiempo.


Probemos analogWrite (254):

analogWrite (254)

Esto es lo opuesto a analogWrite (1). La salida es ALTA todo el tiempo excepto por un breve período. Acercándonos:

analogWrite (254) - ampliado

Ahora la salida está desactivada durante 8 µs, en comparación con la imagen anterior en la que estaba encendida durante 8 µs.


analogWrite (0) es lo mismo que digitalWrite (LOW).

analogWrite (255) es lo mismo que digitalWrite (HIGH).

Esto está probado por el código relevante en wire_analog.c:

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

Resumen

analogWrite básicamente configura los temporizadores de hardware para generar PWM. Una vez que lo hace, el hardware del temporizador genera el ciclo de trabajo solicitado (de 0 a 255) donde 0 siempre está apagado, 255 siempre está encendido y algún valor intermedio le da PWM (salida pulsada).


Para obtener más información sobre los temporizadores, consulte mi página sobre temporizadores .

Respuesta

digitalWrite establece el pin en un valor alto o bajo que permanece exactamente en ese valor hasta que se llama a digitalWrite para ese pin nuevamente.

analogWrite establece el pin para que tenga un valor oscilante que tiene un longitud del pulso según el ciclo de trabajo especificado como segundo parámetro.

Entonces:

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

Respuesta

analogWrite (): Escribe un valor analógico (onda PWM) en un pin . Se puede utilizar para encender un LED con distintos brillos o para impulsar un motor a distintas velocidades. Después de una llamada a analogWrite(), el pin generará una onda cuadrada constante del ciclo de trabajo especificado hasta la próxima llamada a analogWrite() (o un llamar a digitalRead() o digitalWrite() en el mismo pin). La frecuencia de la señal PWM en la mayoría de los pines es de aproximadamente 490 Hz. En las placas Uno y similares, los pines 5 y 6 tienen una frecuencia de aproximadamente 980 Hz. Los pines 3 y 11 del Leonardo también funcionan a 980 Hz.

Para obtener más detalles, visite: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Lee el valor del pin analógico especificado. La placa Arduino contiene un convertidor de 6 canales (8 canales en el Mini y Nano, 16 en el Mega) de 10 bits de analógico a digital. Esto significa que asignará voltajes de entrada entre 0 y 5 voltios en valores enteros entre 0 y 1023. Esto produce una resolución entre lecturas de: 5 voltios / 1024 unidades o 0,0049 voltios (4,9 mV) por unidad. El rango de entrada y la resolución se pueden cambiar usando analogReference().

Para obtener más información, visite: https://www.arduino.cc/en/Reference/analogRead

Respuesta

digitalWrite establece el pin especificado en uno de dos estados – HIGH / LOW

Donde, HIGH = 5 V y LOW = 0 V

analogWrite Establece el valor PWM del pin PWM

(En Arduino UNO, los pines PWM son 3, 5, 6, 9, 10, 11)

Establecerá el pin a una señal periódica alta / baja.

analogWrite(PWMpin,255) 

Será ALTA el 100% del tiempo, mientras

analogWrite(PWMpin,127) 

Será ALTO el 50% del tiempo y BAJO el 50% del tiempo

Respuesta

Entonces ¿Cuál es la diferencia entre analogWrite (X, 255) y digitalWrite (X, HIGH)? Probablemente nada, excepto quizás que el procesador tenga que hacer algunas cosas adicionales para resolver que no necesita usar PWM, y también estilo.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *