Pe Arduinos mai noi, se poate seta pinMode la una dintre cele trei stări: OUTPUT
, INPUT
și INPUT_PULLUP
.
Această pagină spune:
Cipul Atmega de pe Arduino are rezistențe interne de tragere (rezistențe care se conectează la alimentare intern) pe care le puteți accesa. Dacă preferați să utilizați aceste în loc de rezistențe pull-down externe, puteți utiliza argumentul INPUT_PULLUP în pinMode (). Acest lucru inversează efectiv comportamentul, unde HIGH înseamnă că senzorul este oprit, iar LOW înseamnă că senzorul este pornit.
Sunt destul de sigur că inversarea comportamentului Totuși, nu este singurul lucru pe care îl face.
Ce face INPUT_PULLUP
? Ce o face diferită de INPUT
și cum se decide pe cine să folosească?
Comentarii
- INPUT_PULLUP a fost adăugat cu IDE 1.0.1. Nu este relevant ce placă Arduino utilizați, toate acceptă PULLUP-uri.
Răspuns
Implicit este INPUT
care configurează pinul ca INPUT
. Dacă pinul este complet deconectat, se va citi aleatoriu HIGH
și LOW
. Dacă îl legați la + 5V sau 0V, evident va citi HIGH
sau LOW
.
Intern pentru Arduino, cipul Atmega are rezistențe interne de pullup cu o valoare de aproximativ 20k ohm. (Consultați documentația DigitalPins pentru mai multe detalii) Aceste rezistențe pot fi conectate opțional intern utilizând INPUT_PULLUP
. Acest lucru este echivalent funcțional (și electric) cu conectarea unui rezistor de ~ 20k ohm între pin și + 5V, singura diferență este că nu necesită componente externe și îl puteți activa și dezactiva în software în timpul executării programului dvs.
Deci, de ce pull-up-uri și nu pull-down-uri? Probabil există mai multe motive pentru aceasta, dar atunci când conectați butoanele sau întrerupătoarele sau orice „normal deschis”, trebuie doar să le legați la sol, nu trebuie să le rulați + 5V. Deoarece majoritatea plăcilor vor fi proiectat cu turnări mari la sol din motive de protecție, legarea la sol este practic motive.
Unele IC-uri mai prezentate, cum ar fi cipurile ARM, au atât pull-up cât și pull down, dar linia AVR de 8 biți vine doar cu pull -ups. Trebuie doar să vă amintiți că HIGH
este „deschis” și LOW
este „închis”.
Comentarii
- Upvote. FYI, conform documentației, extragerile interne sunt de 20K, nu că ar face o mare diferență de 50K. arduino.cc/en/Tutorial/DigitalPins
Răspuns
Rețineți că anterior până la 1.0.1, ați putea activa pullup-urile folosind digitalWrite()
. Și puteți totuși.
Codul:
Aceasta este o distincție importantă, deoarece INPUT_PULLUP
activează evident rezistența de tragere. Cu toate acestea, mai puțin evident, este că începând cu 1.0.1, pur și simplu apelarea INPUT
forțează oprirea pull-up-ului. (Anterior, starea de tragere a rămas aceeași).
Pentru a vedea cum funcționează un pin cu și fără extrageri, urmăriți următoarele videoclipuri.
Pin plutitor pe un osciloscop: http://www.youtube.com/watch?v=dBIBFLYCjMM
Cu funcția Pull-Up activată: http://www.youtube.com/watch?v=SAIw7LLVl-U
Video tutorial complet despre extrageri (rețineți că am făcut acest lucru înainte ca INPUT_PULLUP să fie adăugat la biblioteca Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
Comentarii
- Foarte inteligent. Vă mulțumim că ați scris acest lucru. Votează în sus.