Wat is ' is het verschil tussen analogWrite en digitalWrite?

Zoals de titel aangeeft. Wat is het verschil tussen de twee?

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

Reacties

  • Ik bedoel niet ‘ niet onbeleefd te zijn, maar wat hierover verwarrend was in de documentatie op arduino.cc of opgenomen in de IDE?

Answer

digitalWrite stelt de gespecificeerde pincode in op een van de twee statussen – HOOG / LAAG, die gelijk aan respectievelijk 5v (3.3v op sommige kaarten) en aarde.

analogWrite kan variëren afhankelijk van het type output dat wordt gebruikt.

Indien toegepast op een PWM-pin – zal het de pin instellen naar een periodiek hoog / laag signaal, waarbij het percentage van het signaal dat hoog wordt besteed evenredig is met de geschreven waarde. bijvoorbeeld –

 analogWrite(PWMpin,255) 

Zal HOOG 100% zijn van de tijd, terwijl

 analogWrite(PWMpin,127) 

50% van de tijd HOOG zal zijn en 50% van de tijd LAAG

Bij het toepassen van analogWrite naar een DAC-pin (beschikbaar op sommige boards, zoals de DUE of MEGA ) anaal ogWrite zorgt er feitelijk voor dat de gespecificeerde pin een spanningsniveau afgeeft dat evenredig is met de gespecificeerde analoge waarde

Bijvoorbeeld op de Due, met een maximale spanning van 3,3 V en een standaard analoge resolutie van 8 bits – [0: 255]

 analogWrite(DACpin,255) 

Zal ervoor zorgen dat de gespecificeerde pin 3.3v produceert, en-

 analogWrite(DACpin,127) 

Zal ervoor zorgen dat de gespecificeerde pin 1.35v uitvoert.

Reacties

  • Nee, er is geen DAC op de Mega.
  • je hebt gelijk, antwoord aangepast om dit weer te geven.
  • Geweldig. Ik heb de vrijheid genomen om de bewerking beknopter te maken.
  • Ik geloof dat er een ” maxanalog ” is gedefinieerd of constant, om een betere compatibiliteit met andere platforms te bieden. De esp8266 heeft een analoog schrijven dat kan variëren van 0 tot 1024. * Ik ‘ heb wat haren eruit gekrast in een poging te achterhalen waarom mijn RGB led-controller niet ‘ t zo helder zijn met dezelfde code, dacht dat het te wijten was aan het verschil in vermogen of spanning, maar ik gebruikte een MOSFET met een geschikte (gain?) factor. Het was gewoon aan voor (1024/256) van de tijd.

Answer

analogWrite (): De analogWrite () methode stelt de waarde van een PWM output pin in. De analogWrite () is op een schaal van 0 – 255, zodat analogWrite (255) een 100% duty cycle vraagt (altijd aan), en analogWrite (127) is een 50% duty cycle (op de helft van de tijd).

PWM Duty Cycle

Syntaxis : analogWrite (pin, val)

Waar,

pin: het PWM-outputpinnummer.

val: int waarde van duty cycle tussen 0 (altijd uit) tot 255 (altijd aan)

Voorbeeldcode:

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: De methode digitalWrite () stelt de waarde van een digitale pin in op HIGH of LOW. Hier 5V (of 3,3V op 3,3V-kaarten) voor HOOG, 0V (aarde) voor LAAG.

Syntaxis: digitalWrite (pin, val)

Waar,

pin: het pincode

val: HIGH of LOW

Voorbeeldcode:

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 stelt de outputpin in op LOW of HIGH (waarbij die spanningen afhangen van de V cc van de processor. Voor een Uno of Mega zou dat 0V of 5V zijn (of dichtbij).

Hier is een screenshot van digitalWrite (LOW):

digitalWrite (LOW)

Dat wil zeggen, de output-pin is 0V.


Nu voor digitalWrite (HIGH):

De uitgangsspanning is 5V.

digitalWrite (HIGH)


analogWrite had eigenlijk PWMwrite moeten heten sinds het conf stelt de processortimers voor om PWM (pulsbreedtemodulatie) uit te voeren.

Laten we analogWrite (1) proberen:

analogWrite (1)

U kunt zien dat het spanningsniveau meestal 0V is en gedurende korte perioden naar 5V gaat. Je ziet ook dat de frequentie 490 Hz is, wat de referentiepagina voor analogWrite zegt dat het zal zijn.


Inzoomen:

analogWrite (1) - ingezoomd

De output is hoog voor 8 µs, wat precies 1/256 van 2048 µs is, wat de periode is van de timer. We hebben dus een inschakelduur van 1/256 (0,39%).


Laten we analogWrite (127) proberen – halverwege van 0 tot 255:

analogWrite (127)

Nu kunt u zien dat de uitvoer precies de helft van de tijd HOOG is en de rest van de tijd LAAG.


Laten we analogWrite (254) proberen:

analogWrite (254)

Dit is het tegenovergestelde van analogWrite (1). De output is de hele tijd HOOG, behalve voor een korte periode. Inzoomen:

analogWrite (254) - ingezoomd

Nu is de uitvoer 8 µs uit – vergeleken met de eerdere afbeelding waar het 8 µs aan stond.


analogWrite (0) is hetzelfde als digitalWrite (LOW).

analogWrite (255) is hetzelfde als digitalWrite (HIGH).

Dit wordt bewezen door de relevante code in bedrading_analog.c:

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

Samenvatting

analogWrite configureert in feite de hardwaretimers om PWM uit te voeren. Zodra u dat doet, geeft de timerhardware de gevraagde werkcyclus af (van 0 tot 255) waarbij 0 altijd uit is, 255 altijd aan is en een waarde daartussen u PWM (gepulseerde uitvoer) geeft.


Voor meer informatie over de timers zie mijn pagina over timers .

Antwoord

digitalWrite stelt de pin in op een hoge of lage waarde die op precies die waarde blijft totdat digitalWrite weer voor die pin wordt aangeroepen.

analogWrite stelt de pin in op een oscillerende waarde die een pulslengte gebaseerd op de duty cycle die is opgegeven als de tweede parameter.

Dus:

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

Antwoord

analogWrite (): Schrijft een analoge waarde (PWM-golf) naar een pin . Kan worden gebruikt om een LED met verschillende lichtsterktes aan te steken of een motor met verschillende snelheden aan te drijven. Na een oproep naar analogWrite(), genereert de pin een gelijkmatige blokgolf met de opgegeven duty cycle tot de volgende oproep naar analogWrite() (of een oproep naar digitalRead() of digitalWrite() op dezelfde pincode). De frequentie van het PWM-signaal op de meeste pinnen is ongeveer 490 Hz. Op de Uno en soortgelijke boards hebben pin 5 en 6 een frequentie van ongeveer 980 Hz. Pin 3 en 11 op de Leonardo draaien ook op 980 Hz.

Ga voor details naar: https://www.arduino.cc/en/Reference/analogWrite

analogRead (): Leest de waarde van de gespecificeerde analoge pin. Het Arduino-bord bevat een 6-kanaals (8 kanalen op de Mini en Nano, 16 op de Mega), 10-bit analoog naar digitaal converter. Dit betekent dat het ingangsspanningen tussen 0 en 5 volt zal omzetten in gehele waarden tussen 0 en 1023. Dit levert een resolutie op tussen de metingen van: 5 volt / 1024 eenheden of .0049 volt (4,9 mV) per eenheid. Het invoerbereik en de resolutie kunnen worden gewijzigd met analogReference().

Ga voor details naar: https://www.arduino.cc/en/Reference/analogRead

Antwoord

digitalWrite stel de gespecificeerde pincode in op een van de twee statussen – HIGH / LOW

Waar, HIGH = 5 V en LOW = 0 V

analogWrite Stel de PWM-waarde van de PWM-pin in

(In Arduino UNO zijn PWM-pinnen 3, 5, 6, 9, 10, 11)

Het zal de pin instellen naar een periodiek hoog / laag signaal.

analogWrite(PWMpin,255) 

Zal 100% van de tijd HOOG zijn, terwijl

analogWrite(PWMpin,127) 

Zal 50% van de tijd HOOG zijn en 50% van de tijd LAAG

Antwoord

Dus wat is het verschil tussen analogWrite (X, 255) en digitalWrite (X, HIGH)? Waarschijnlijk niets, behalve dat de processor misschien wat extra dingen moet doen om erachter te komen dat hij geen PWM nodig heeft, en ook geen stijl.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *