Hvad ' er forskellen mellem INPUT og INPUT_PULLUP?

På nyere Arduinos kan man indstille pinMode til en af tre tilstande: OUTPUT, INPUT og INPUT_PULLUP.

Denne side siger:

Atmega-chippen på Arduino har interne pull-up-modstande (modstande, der tilsluttes strøm internt), som du kan få adgang til. Hvis du foretrækker at bruge disse i stedet for eksterne pull-down-modstande, kan du bruge argumentet INPUT_PULLUP i pinMode (). Dette inverterer effektivt adfærd, hvor HIGH betyder, at sensoren er slukket, og LAV betyder, at sensoren er tændt.

Jeg er ret sikker på, at invertering af adfærd det er dog ikke det eneste, det gør.

Hvad gør INPUT_PULLUP? Hvad adskiller det fra INPUT, og hvordan beslutter man, hvilken der skal bruges?

Kommentarer

  • INPUT_PULLUP blev tilføjet med IDE 1.0.1. Det er irrelevant, hvilket Arduino-kort du bruger, de understøtter alle PULLUPer.

Svar

Standard er INPUT som indstiller stiften som en INPUT. Hvis stiften er helt afbrudt, læser den tilfældigt HIGH og LOW. Hvis du binder det til + 5V eller 0V, vil det naturligvis læse HIGH eller LOW.

Internt til Arduino har Atmega-chippen interne pullup-modstande med en værdi på omkring 20k ohm. (Se dokumentationen DigitalPins ) Disse modstande kan valgfrit tilsluttes internt ved hjælp af INPUT_PULLUP. Dette svarer funktionelt (og elektrisk) til at forbinde en ~ 20k ohm-modstand mellem stiften og + 5V, den eneste forskel er, at den ikke kræver nogen eksterne komponenter, og du kan tænde og slukke for den i software under udførelsen af dit program. / p>

Så hvorfor pull-ups og ikke pull-downs? Der er sandsynligvis flere grunde til det, men når ledningsknapper eller kontakter eller noget “normalt åbner”, behøver du kun at binde dem til jorden, du behøver ikke at køre + 5V ud til dem. Da de fleste kort vil designet med store jordhældninger af afskærmningsårsager alligevel, at binde til jorden er praktisk talt grunde.

Nogle flere fremhævede ICer som ARM-chips har både pull ups og pull downs, men 8-bit AVR-linjen kommer kun med pull Du skal bare huske, at HIGH er “åben” og LOW er “lukket”.

Kommentarer

Svar

Bemærk, at forrige til 1.0.1, kan du aktivere pullups ved hjælp af digitalWrite(). Og det kan du stadig.

Koden:

Dette er en vigtig forskel, fordi INPUT_PULLUP naturligvis tænder pull-up-modstanden. Imidlertid er mindre indlysende, at startende med 1.0.1, simpelthen at kalde INPUT tvinger pull-up til at blive slået fra. (Tidligere var pull-up-tilstanden den samme).

Se følgende videoer for at se, hvordan en pin fungerer med og uden pull-ups.

Flydende pin i et oscilloskop: http://www.youtube.com/watch?v=dBIBFLYCjMM

Med Pull-Up aktiveret: http://www.youtube.com/watch?v=SAIw7LLVl-U

Fuld tutorial-video om Pull-Ups (bemærk, at jeg lavede dette før INPUT_PULLUP blev føjet til Arduino-biblioteket): http://www.youtube.com/watch?&v=jJnD6LdGmUo

Kommentarer

  • Meget klog. Tak fordi du skrev dette. Opstem.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *