Vilken ' är skillnaden mellan INPUT och INPUT_PULLUP?

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

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *