Saltar al contenido

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

Solución:

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 en una señal alta / baja periódica, donde el porcentaje de la señal gastada en alto es proporcional al valor escrito. por ejemplo –

    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

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

Por ejemplo, en Due, con voltaje máximo de 3.3vy 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

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)

Dónde,

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)
}

escritura digital: El método digitalWrite () establece el valor de un pin digital como ALTO o BAJO. Aquí, 5V (o 3.3V en placas de 3.3V) para ALTO, 0V (tierra) para BAJO.

Sintaxis: digitalWrite (pin, val)

Dónde,

pin: el número de pin

val: ALTO o BAJO

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
}

digitalWrite establece el pin de salida en BAJO o ALTO (donde esos voltajes dependen de la Vcc del procesador. Para uno o Mega, eso sería 0V o 5V (o cerca de él).

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

escritura digital (BAJA)

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


Ahora para digitalWrite (HIGH):

El voltaje de salida es de 5 V.

escritura digital (ALTA)


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

Probemos analogWrite (1):

escritura analógica (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 la página de referencia de analogWrite.


Acercándonos:

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 mitad de camino de 0 a 255:

escritura analógica (127)

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


Probemos analogWrite (254):

escritura analógica (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 es apagado 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 correspondiente en el cableado_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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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