På nyere Arduinos kan man sette pinMode til en av tre tilstander: OUTPUT
, INPUT
, og INPUT_PULLUP
.
Denne siden sier:
Atmega-brikken på Arduino har interne trekkmotstander (motstander som kobles til strøm internt) som du kan få tilgang til. Hvis du foretrekker å bruke disse i stedet for eksterne nedtrekkbare motstander, kan du bruke argumentet INPUT_PULLUP i pinMode (). Dette inverterer effektivt oppførselen, der HØY betyr at sensoren er av, og LAV betyr at sensoren er på.
Jeg er ganske sikker på at invertering av oppførselen er ikke det eneste det gjør, skjønt.
Hva gjør INPUT_PULLUP
? Hva skiller det fra INPUT
, og hvordan bestemmer man hvilken man skal bruke?
Kommentarer
- INPUT_PULLUP ble lagt til med IDE 1.0.1. Det er irrelevant hvilket Arduino-kort du bruker, de støtter alle PULLUP.
Svar
Standard er INPUT
som setter opp pinnen som en INPUT
. Hvis pinnen er helt frakoblet, vil den tilfeldig lese HIGH
og LOW
. Hvis du knytter den til + 5V eller 0V, vil den åpenbart lese HIGH
eller LOW
.
Internt til Arduino, har Atmega-brikken interne mottaksmotstander med en verdi på rundt 20k ohm. (Se DigitalPins -dokumentasjonen for flere detaljer) Disse motstandene kan valgfritt kobles internt ved hjelp av INPUT_PULLUP
. Dette tilsvarer funksjonelt (og elektrisk) å koble en ~ 20k ohm motstand mellom pinnen og + 5V, den eneste forskjellen er at den ikke krever noen eksterne komponenter, og du kan slå den på og av i programvare under utførelsen av programmet. / p>
Så hvorfor pull-ups og ikke pull-downs? Det er sannsynligvis flere grunner til det, men når ledningsknapper eller brytere eller noe «normalt åpner», trenger du bare å binde dem til bakken, du trenger ikke å kjøre + 5V ut til dem. Siden de fleste brett kommer til å være designet med store bakkeheller uansett skjermingsårsaker, det er praktisk talt grunner til å binde til bakken.
Noen flere utvalgte IC-er som ARM-chips har både pull ups og pull-down, men 8-bit AVR-linjen kommer bare med pull Du må bare huske at HIGH
er «åpen» og LOW
er «lukket».
Kommentarer
- Oppvote. FYI, ifølge dokumentasjonen er de interne pull-ups 20K, ikke at det gjør stor forskjell fra 50K. arduino.cc/en/Tutorial/DigitalPins
Svar
Legg merke til at forrige til 1.0.1, kan du slå på pullups ved å bruke digitalWrite()
. Og det kan du fremdeles.
Koden:
Dette er et viktig skille fordi INPUT_PULLUP
åpenbart slår på opptrekksmotstanden. Imidlertid er mindre åpenbart at det å starte med 1.0.1, bare å ringe INPUT
, tvinger trekket til å slå av. (Tidligere var tilstanden til pull-up den samme).
For å se hvordan en pin fungerer med og uten pull-ups, kan du se følgende videoer.
Flytende pin i et oscilloskop: http://www.youtube.com/watch?v=dBIBFLYCjMM
Med Pull-Up aktivert: http://www.youtube.com/watch?v=SAIw7LLVl-U
Full opplæringsvideo om Pull-Ups (merk at jeg laget dette før INPUT_PULLUP ble lagt til Arduino-biblioteket): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Kommentarer
- Veldig smart. Takk for at du skrev dette. Stem.