Qual ' é a diferença entre analogWrite e digitalWrite?

Conforme indica o título. Qual é a diferença entre os dois?

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

Comentários

  • Eu não ‘ não quero ser rude, mas o que estava confuso sobre isso na documentação em arduino.cc ou incluído com o IDE?

Resposta

digitalWrite irá definir o pino especificado para um dos dois estados – HIGH / LOW, que equivale a 5v (3,3v em algumas placas) e aterramento, respectivamente.

analogWrite pode variar de acordo com o tipo de saída usada.

Se aplicado a um pino PWM – ele definirá o pino a um sinal periódico alto / baixo, em que a porcentagem do sinal gasto alto é proporcional ao valor escrito. por exemplo –

 analogWrite(PWMpin,255) 

Será ALTO 100% do tempo, enquanto

 analogWrite(PWMpin,127) 

Será ALTO 50% do tempo e BAIXO 50% do tempo

Ao aplicar analogWrite a um pino DAC (disponível em algumas placas, como o DUE ou MEGA ) anal ogWrite fará com que o pino especificado produza um nível de tensão proporcional ao valor analógico especificado

Por exemplo, no dia devido, com tensão máxima de 3,3 V e uma resolução analógica padrão de 8 bits – [0: 255]

 analogWrite(DACpin,255) 

Irá fazer com que o pino especificado produza 3,3v e-

 analogWrite(DACpin,127) 

Fará com que o pino especificado produza 1,35v

Comentários

  • Não, não há DAC no Mega.
  • você está correto, resposta editada para refletir isso.
  • Ótimo. Tomei a liberdade de tornar a edição mais concisa.
  • Acredito que haja um ” maxanalog ” definir ou constante, para fornecer melhor compatibilidade com outras plataformas. O esp8266 tem uma gravação analógica que pode variar de 0 a 1024. * Eu ‘ arranhei alguns cabelos tentando descobrir por que meu controlador led RGB não ‘ t ser tão brilhante com o mesmo código, pensei que fosse devido à diferença de potência ou tensão, mas usei um MOSFET com fator (ganho?) adequado. Estava simplesmente ativado (1024/256) da época.

Resposta

analogWrite (): O método analogWrite () define o valor de um pino de saída PWM. O analogWrite () está em uma escala de 0 a 255, de modo que analogWrite (255) solicita um ciclo de trabalho de 100% (sempre ativado) e analogWrite (127) é um ciclo de trabalho de 50% (na metade do tempo).

Ciclo de trabalho PWM

Sintaxe : analogWrite (pin, val)

Onde,

pin: o número do pino de saída PWM.

val: valor int do ciclo de trabalho entre 0 (sempre desligado) e 255 (sempre ligado)

Exemplo de código:

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: O método digitalWrite () define o valor de um pino digital como HIGH ou LOW. Aqui, 5 V (ou 3,3 V em placas de 3,3 V) para ALTO, 0 V (terra) para BAIXO.

Sintaxe: digitalWrite (pin, val)

Onde,

pin: o número do pin

val: HIGH ou LOW

Exemplo de código:

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 } 

Resposta

digitalWrite define o pino de saída para BAIXO ou ALTO (onde essas tensões dependem do V cc do processador. Para um Uno ou Mega que seria 0V ou 5V (ou próximo disso).

Aqui está uma imagem de digitalWrite (LOW):

digitalWrite (LOW)

Ou seja, o pino de saída está em 0 V.


Agora para digitalWrite (HIGH):

A tensão de saída é 5 V.

digitalWrite (HIGH)


analogWrite realmente deveria ter sido nomeado PWMwrite desde que conf igura os temporizadores do processador para produzir PWM (modulação por largura de pulso).

Vamos tentar analogWrite (1):

analogWrite (1)

Você pode ver que o nível de tensão é 0 V na maioria das vezes e vai para 5 V por curtos períodos. Você também verá que a frequência é 490 Hz, que é o que a página de referência para analogWrite afirma que será.


Ampliando:

analogWrite (1) - ampliado

A saída é alta para 8 µs, que é exatamente 1/256 de 2048 µs, que é o período do temporizador. Portanto, temos um ciclo de trabalho de 1/256 (0,39%).


Vamos tentar analogWrite (127) – meio caminho de 0 a 255:

analogWrite (127)

Agora você pode ver que a saída é ALTA exatamente na metade do tempo e BAIXA no resto do tempo.


Vamos tentar analogWrite (254):

analogWrite (254)

Este é o oposto de analogWrite (1). A saída é ALTA o tempo todo, exceto por um breve período. Ampliando:

analogWrite (254) - ampliado

Agora a saída está desativada por 8 µs – em comparação com a imagem anterior, onde estava ativada por 8 µs.


analogWrite (0) é o mesmo que digitalWrite (LOW).

analogWrite (255) é o mesmo que digitalWrite (HIGH).

Isso é comprovado pelo código relevante em wiring_analog.c:

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

Resumo

analogWrite basicamente configura os temporizadores de hardware para gerar PWM. Depois de fazer isso, o hardware do temporizador emite o ciclo de trabalho solicitado (de 0 a 255), onde 0 está sempre desligado, 255 está sempre ligado e algum valor intermediário fornece PWM (saída pulsada).


Para obter mais informações sobre os temporizadores, consulte minha página sobre temporizadores .

Resposta

digitalWrite define o pino para um valor alto ou baixo que permanece exatamente nesse valor até que digitalWrite seja chamado para aquele pino novamente.

analogWrite define o pino para ter um valor oscilante que tem um comprimento de pulso com base no ciclo de trabalho especificado como o segundo parâmetro.

Então:

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

Resposta

analogWrite (): Grava um valor analógico (onda PWM) em um pino . Pode ser usado para acender um LED com brilho variável ou acionar um motor em várias velocidades. Depois de uma chamada para analogWrite(), o pino irá gerar uma onda quadrada estável do ciclo de trabalho especificado até a próxima chamada para analogWrite() (ou um ligue para digitalRead() ou digitalWrite() no mesmo pino). A frequência do sinal PWM na maioria dos pinos é de aproximadamente 490 Hz. Nas placas Uno e semelhantes, os pinos 5 e 6 têm uma frequência de aproximadamente 980 Hz. Os pinos 3 e 11 no Leonardo também funcionam a 980 Hz.

Para obter detalhes, visite: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Lê o valor do pino analógico especificado. A placa Arduino contém um conversor de analógico para digital de 6 canais (8 canais no Mini e Nano, 16 no Mega) de 10 bits. Isso significa que ele mapeará tensões de entrada entre 0 e 5 volts em valores inteiros entre 0 e 1023. Isso resulta em uma resolução entre as leituras de: 5 volts / 1024 unidades ou 0,0049 volts (4,9 mV) por unidade. O intervalo de entrada e a resolução podem ser alterados usando analogReference().

Para obter detalhes, visite: https://www.arduino.cc/en/Reference/analogRead

Resposta

digitalWrite defina o pino especificado para um de dois estados – HIGH / LOW

Onde, HIGH = 5 V e LOW = 0 V

analogWrite Defina o valor PWM do pino PWM

(No Arduino UNO, os pinos PWM são 3, 5, 6, 9, 10, 11)

Ele definirá o pino a um sinal periódico alto / baixo.

analogWrite(PWMpin,255) 

Será ALTO 100% do tempo, enquanto

analogWrite(PWMpin,127) 

Será ALTO 50% do tempo e BAIXO 50% do tempo

Resposta

Então qual é a diferença entre analogWrite (X, 255) e digitalWrite (X, HIGH)? Provavelmente nada, exceto talvez o processador tenha que fazer algumas coisas extras para descobrir que não precisa usar PWM e também estilo.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *