På nyare Arduinos kan man ställa in pinMode till ett av tre tillstånd: OUTPUT
, INPUT
och INPUT_PULLUP
.
Den här sidan säger:
Atmega-chipet på Arduino har interna pull-up-motstånd (motstånd som ansluts till ström internt) som du kan komma åt. Om du föredrar att använda dessa istället för externa neddragbara motstånd kan du använda argumentet INPUT_PULLUP i pinMode (). Detta omvandlar effektivt beteendet, där HIGH betyder att sensorn är avstängd och LOW betyder att sensorn är på.
Jag är ganska säker på att invertera beteendet det är dock inte det enda det gör.
Vad gör INPUT_PULLUP
? Vad skiljer det från INPUT
, och hur bestämmer man vilken man ska använda?
Kommentarer
- INPUT_PULLUP lades till med IDE 1.0.1. Det är irrelevant vilket Arduino-kort du använder, de har alla stöd för PULLUP.
Svar
Standard är INPUT
som ställer in stiftet som en INPUT
. Om stiftet är helt frånkopplat läser det slumpmässigt HIGH
och LOW
. Om du knyter det till + 5V eller 0V kommer det uppenbarligen att läsa HIGH
eller LOW
.
Internt till Arduino har Atmega-chipet interna pullup-motstånd med ett värde på cirka 20k ohm. (Se DigitalPins för mer information) Dessa motstånd kan valfritt anslutas internt med INPUT_PULLUP
. Detta är funktionellt (och elektriskt) ekvivalent med att ansluta ett ~ 20k ohm-motstånd mellan stiftet och + 5V, den enda skillnaden är att det inte kräver några externa komponenter och du kan slå på och av det i programvara under genomförandet av ditt program. / p>
Så varför pull-ups och inte pull-downs? Det finns sannolikt flera anledningar till det, men när ledningsknappar eller strömbrytare eller något ”normalt öppet” behöver du bara binda dem till marken, du behöver inte köra + 5V ut till dem. Eftersom de flesta brädor kommer att vara utformad med stora markhällar av skyddsskäl ändå, att binda till mark är praktiskt taget skäl.
Några fler utvalda IC-apparater som ARM-chips har både pull-ups och pull-down, men 8-bitars AVR-linjen kommer bara med pull Du måste bara komma ihåg att HIGH
är ”öppen” och LOW
är ”stängd”.
Kommentarer
- Upvote. FYI, enligt dokumentationen är de interna pull-ups 20K, inte att det skiljer mycket från 50K. arduino.cc/en/Tutorial/DigitalPins
Svar
Observera att tidigare till 1.0.1 kan du aktivera pullups genom att använda digitalWrite()
. Och du kan fortfarande.
Koden:
Detta är en viktig skillnad eftersom INPUT_PULLUP
uppenbarligen slår på uppdragsmotståndet. Men mindre uppenbart är att från och med 1.0.1, helt enkelt att ringa INPUT
tvingar man att stänga av pull-up. (Tidigare var uppdragets tillstånd detsamma).
För att se hur en stift fungerar med och utan pull-ups, se följande videor.
Flytande stift i ett oscilloskop: http://www.youtube.com/watch?v=dBIBFLYCjMM
Med Pull-Up aktiverat: http://www.youtube.com/watch?v=SAIw7LLVl-U
Fullständig handledningsvideo om Pull-Ups (notera att jag gjorde detta innan INPUT_PULLUP lades till i Arduino-biblioteket): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Kommentarer
- Mycket smart. Tack för att du skrev detta. Rösta.