Existují dva způsoby, jak vytáhnout piny v Arduinu – pomocí interního a externího rezistoru. Zajímalo by mě, kdy bych měl místo INPUT_PULLUP použít externí rezistor.
Komentáře
- Podle mých zkušeností je jediný rozdíl " externí pullup / pulldown je snazší nahradit " a možná i " pouhým pohledem na obvod můžete vidět externí odpor, takže je ' srozumitelnější po několika měsících "
Odpověď
V běžné aplikaci můžete použít interní nebo externí rezistor.
Každá metoda má své vlastní výhody:
Interní rezistor
- Klady: flexibilní vůči změnám změnou kódu
- Klady: Snižte velikost desek plošných spojů
- Klady: Snižte náklady (velmi malé)
- Nevýhody: Může to MCU zahřát
Externí rezistor
- Pr os: Snižte teplo pro MCU
- Nevýhody: Není snadné jej vyměnit, když je integrovaný PCB
- Nevýhody: Zvětšit velikost PCB
Kromě toho , Pull-up a pull-down rezistory se používají nejen pro port INPUT, ale také pro port OUTPUT. V případě OUTPUT portu. Externí rezistor má další výhodu: flexibilitu při připojování zařízení s různým napětím I / O. Například v hardwaru I2C viz I2C na hardwarové úrovni .
POZNÁMKA: Pokud vím, v době psaní Arduino knihovna nepodporuje INPUT_PULLDOWN
Komentáře
- 1. Teplo generované interním vytažením je zanedbatelné. 2. Některé desky (nikoli ty založené na AVR) mají
INPUT_PULLDOWN
.
odpověď
„Nevýhody: Může to MCU zahřát“
Ne. P = V ^ 2 / R, tedy 5 * 5/20 000 = 1,25 mW, díky čemuž nebude procesor horký. Dokonce i otočení všech 80 v Mega2560 a jejich vytažení na minimum způsobí rozptyl pouze 0,1 W.
„POZNÁMKA: Pokud vím, v době psaní knihovna Arduino nepodporuje INPUT_PULLDOWN“ To je protože rodina zařízení Atmega328P, „1284“, 2560 atd. nemá interní pulldown rezistory. Pouze pullup. Viz část 14 jejich datových listů „I / O porty“.
Toto vytažení je obecně nedostatečné pro vytažení I2C, vzestupná hrana vytvořená interním vytažením 20K až 50K je velmi pomalá. Je zapotřebí externí 4,7 kB až přibližně 2,2 kB (v závislosti na počtu připojených zařízení I2C). Specifikace sběrnice I2C říká, že by měly být na konci sběrnice, nikoli původ sběrnice (což je obvykle procesor).
Pokud máte dlouhý vodič vycházející z tlačítka nebo spínače, pak obecně je vhodný čas použít externí pullup k zajištění dobré úrovně přepínání mezi vysokou a nízkou.
Odpověď
„Arduino“ Jazyk „(tj. Funkce pinMode()
) zná pouze INPUT_PULLUP.
Takže pro rezistory PULLDOWN potřebujete externí rezistory.
VÝSTUPNÍ signály nejsou plovoucí, takže termín PULLUP / PULLDOWN rezistor zde skutečně neplatí.
Kromě toho hodnota interního pullup rezistoru není nastavitelná. Pokud tato hodnota (20 .. 50k) není vhodná (I²C potřebuje něco menšího než 10k), je vyžadován externí rezistor.
Komentáře
- Jak jsem psal v komentáři k předchozí odpovědi, některá jádra Arduina ano podpora
INPUT_PULLDOWN
.