Istnieją dwa sposoby wyciągania pinów w Arduino – za pomocą rezystora wewnętrznego i zewnętrznego. Zastanawiam się, kiedy powinienem użyć zewnętrznego rezystora zamiast INPUT_PULLUP.
Komentarze
- Z mojego doświadczenia wynika, że jedyna różnica to " zewnętrzne pullup / pulldown jest łatwiejsze do zastąpienia " i być może także " patrząc na obwód, w którym widać zewnętrzny rezystor, dzięki czemu ' jest łatwiejszy do zrozumienia po kilku miesiącach "
Odpowiedź
W normalnej aplikacji możesz użyć rezystora wewnętrznego lub zewnętrznego.
Każda metoda ma swoje zalety:
Rezystor wewnętrzny
- Zalety: możliwość zmiany poprzez zmianę kodu
- Zalety: Zmniejsz rozmiar PCB
- Zalety: Zmniejsz koszty (bardzo małe)
- Wady: Może sprawić, że MCU stanie się gorący
Rezystor zewnętrzny
- Pr os: Zmniejsz ilość ciepła dla MCU
- Wady: Niełatwo wymienić, gdy jest to wbudowana płytka drukowana
- Wady: Zwiększ rozmiar PCB
Poza tym , Rezystory pull-up i pull-down są używane nie tylko dla portu INPUT, ale także dla portu OUTPUT. W przypadku portu OUTPUT. Zewnętrzny rezystor ma jeszcze jedną zaletę: elastyczność w podłączaniu urządzeń z różnymi napięciami we / wy. Na przykład w sprzęcie I2C zobacz I2C na poziomie sprzętu .
UWAGA: O ile mi wiadomo, w czasie pisania Arduino biblioteka NIE obsługuje INPUT_PULLDOWN
Komentarze
- 1. Ciepło generowane przez wewnętrzne podciąganie jest pomijalne. 2. Niektóre fora (nie te oparte na AVR) mają
INPUT_PULLDOWN
.
Odpowiedź
„Wady: MCU może się rozgrzać”
Nie będzie. P = V ^ 2 / R, więc 5 * 5/20000 = 1,25 mW, to nie spowoduje nagrzania procesora. Nawet obrócenie wszystkich 80 w Mega2560 i wyciągnięcie ich wszystkich nisko rozproszy tylko 0,1 W.
„UWAGA: O ile wiem, w czasie pisania, biblioteka Arduino NIE obsługuje INPUT_PULLDOWN” To znaczy ponieważ rodziny urządzeń Atmega328P, „1284”, 2560 itp. nie mają wewnętrznych rezystorów obniżających napięcie. Tylko podciągnięcie. Zobacz rozdział 14 ich arkuszy danych, „Porty I / O”.
To podciąganie jest generalnie niewystarczające dla podciągania I2C, zbocze narastające utworzone przez wewnętrzne podciąganie od 20 do 50 tysięcy jest bardzo wolne. Wymagane są zewnętrzne 4,7K do około 2,2K (w zależności od liczby podłączonych urządzeń I2C). A specyfikacja magistrali I2C mówi, że powinny znajdować się na końcu magistrali, a nie na początku magistrali (którym jest zwykle procesor).
Jeśli masz długi przewód wychodzący z przycisku lub przełącznika, to to ogólnie dobry moment na użycie zewnętrznego pullup, aby zapewnić dobre poziomy przełączania między wysokim a niskim.
Odpowiedź
„Arduino Język „(tj. Funkcja pinMode()
) zna tylko INPUT_PULLUP.
Potrzebujesz więc zewnętrznych rezystorów dla rezystorów PULLDOWN.
Sygnały OUTPUT nie są zmienne, więc termin rezystor PULLUP / PULLDOWN tak naprawdę nie ma tam zastosowania.
Poza tym wartość wewnętrznego rezystora podciągającego nie jest regulowana. Jeśli ta wartość (20 .. 50k) nie jest odpowiednia (I²C potrzebuje mniej niż 10k), wymagany jest zewnętrzny rezystor.
Komentarze
- Jak napisałem w komentarzu do poprzedniej odpowiedzi, niektóre rdzenie Arduino wsparcie
INPUT_PULLDOWN
.