Op nieuwere Arduinos kan men pinMode instellen op een van de drie statussen: OUTPUT
, INPUT
, en INPUT_PULLUP
.
Deze pagina zegt:
De Atmega-chip op de Arduino heeft interne pull-up weerstanden (weerstanden die intern op voeding worden aangesloten) waartoe je toegang hebt. Als u deze liever gebruikt in plaats van externe pull-down-weerstanden, kunt u het INPUT_PULLUP-argument in pinMode () gebruiken. Dit keert het gedrag effectief om, waarbij HIGH betekent dat de sensor is uitgeschakeld en LOW betekent dat de sensor is ingeschakeld.
Ik ben er vrij zeker van dat het gedrag omkeren is echter niet het enige dat het doet.
Wat doet INPUT_PULLUP
? Wat maakt het anders dan INPUT
, en hoe besluit men welke te gebruiken?
Opmerkingen
- INPUT_PULLUP is toegevoegd met IDE 1.0.1. Het maakt niet uit welk Arduino-bord je gebruikt, ze ondersteunen allemaal PULLUPs.
Answer
De standaardinstelling is INPUT
die de pincode instelt als een INPUT
. Als de pincode volledig is losgekoppeld, wordt willekeurig HIGH
en LOW
gelezen. Als je het koppelt aan + 5V of 0V, zal het duidelijk HIGH
of LOW
lezen.
Intern in de Arduino, heeft de Atmega-chip interne pullup-weerstanden met een waarde van rond de 20k ohm. (Zie de DigitalPins documentatie voor meer details) Deze weerstanden kunnen optioneel intern worden aangesloten met INPUT_PULLUP
. Dit is functioneel (en elektrisch) gelijk aan het aansluiten van een ~ 20k ohm weerstand tussen de pin en + 5V, het enige verschil is dat er geen externe componenten voor nodig zijn en dat je het softwarematig aan en uit kunt zetten tijdens de uitvoering van je programma. / p>
Dus waarom pull-ups en geen pull-downs? Er zijn waarschijnlijk verschillende redenen voor, maar wanneer u knoppen of schakelaars bedraadt of iets dat “normaal open” is, hoeft u ze alleen aan aarde te binden, u hoeft er geen + 5V naar uit te voeren. Aangezien de meeste kaarten Ontworpen met grote grondstortingen om afschermredenen, is vastbinden aan de grond praktisch een reden.
Sommige meer functionele ICs zoals ARM-chips hebben zowel pull-ups als pull-downs, maar de 8-bit AVR-lijn wordt alleen geleverd met pull -ups. U hoeft alleen te onthouden dat HIGH
“open” is en LOW
“gesloten”.
Opmerkingen
- Upvote. Ter info, volgens de documentatie zijn de interne pull-ups 20K, niet dat het veel verschil maakt met 50K. arduino.cc/en/Tutorial/DigitalPins
Answer
Merk op dat vorige tot 1.0.1, je zou pullups kunnen inschakelen met digitalWrite()
. En dat kan nog steeds.
De code:
Dit is een belangrijk onderscheid omdat INPUT_PULLUP
duidelijk de pull-up-weerstand inschakelt. Minder voor de hand liggend is echter dat, beginnend met 1.0.1, door simpelweg INPUT
aan te roepen, de pull-up wordt uitgeschakeld. (Voorheen bleef de toestand van de pull-up hetzelfde).
Bekijk de volgende videos om te zien hoe een pin werkt met en zonder pull-ups.
Zwevende pin op een oscilloscoop: http://www.youtube.com/watch?v=dBIBFLYCjMM
Met pull-up ingeschakeld: http://www.youtube.com/watch?v=SAIw7LLVl-U
Volledige instructievideo over pull-ups (merk op dat ik dit heb gemaakt voordat INPUT_PULLUP werd toegevoegd aan de Arduino-bibliotheek): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Reacties
- Heel slim. Bedankt voor het schrijven. Upvote.