Der er to måder at trække stifterne i Arduino på – ved hjælp af intern og ekstern modstand. Jeg spekulerer på, hvornår jeg skal bruge ekstern modstand i stedet for INPUT_PULLUP.
Kommentarer
- Fra min erfaring er den eneste forskel " ekstern pullup / pulldown er lettere at erstatte " og måske også " ved bare at se på kredsløbet kan du se det eksterne modstand, så det ' er lettere at forstå designet efter få måneder "
Svar
Du kan bruge enten den interne eller eksterne modstand i normal anvendelse.
Hver metode har hver sin fordel:
Intern modstand
- Fordele: fleksibel til ændring ved at ændre koden
- Fordele: Reducer PCB-størrelse
- Fordele: Reducer omkostninger (meget små)
- Ulemper: Det kan gøre MCU varmt
Ekstern modstand
- Pr os: Reducer varmen til MCU
- Ulemper: Ikke let at udskifte, når den er indbygget PCB
- Ulemper: Forøg PCB-størrelse
Udover , Pull-up og pull-down modstande bruges ikke kun til INPUT-porten, men også til OUTPUT-porten. I tilfælde af OUTPUT-port. Den eksterne modstand har en anden fordel: fleksibilitet ved tilslutning af enheder med forskellige I / O-spændinger. For eksempel, i I2C-hardware se I2C på hardwareniveau .
BEMÆRK: Så vidt jeg ved, på skrivetidspunktet, Arduino biblioteket understøtter IKKE INPUT_PULLDOWN
Kommentarer
- 1. Varmen genereret af den interne pullup er ubetydelig. 2. Nogle kort (ikke AVR-baserede) har
INPUT_PULLDOWN
.
Svar
“Ulemper: Det kan gøre MCU varmt”
Det gør det ikke. P = V ^ 2 / R, så 5 * 5 / 20.000 = 1,25 mW, der ikke gør processoren varm. Selv at dreje alle 80 i en Mega2560 og trække dem alle ned, forsvinder kun 0,1W.
“BEMÆRK: Så vidt jeg ved, understøtter Arduino-biblioteket IKKE INPUT_PULLDOWN” Det vil sige fordi Atmega328P, “1284,” 2560 osv. familie af enheder ikke har interne rullemodstande. Kun pullup. Se afsnit 14 i deres datablad, “I / O-porte”.
Denne pullup er generelt utilstrækkelig til I2C pullup, den stigende kant skabt af 20K til 50K intern pullup er meget langsom. Ekstern 4.7K ned til omkring 2.2K (afhænger af hvor mange I2C-enheder der er tilsluttet) er nødvendig. Og I2C-busspecifikationen siger, at de skal være i slutningen af bussen, ikke oprindelsen til bussen (som generelt er processoren).
Hvis du har en lang ledning, der kommer fra en knap eller switch, er generelt et godt tidspunkt at bruge en ekstern pullup for at sikre gode skiftniveauer mellem høj og lav.
Svar
“Arduino Sprog “(dvs. pinMode()
-funktionen) kender kun INPUT_PULLUP.
Så du har brug for eksterne modstande til PULLDOWN-modstande.
OUTPUT-signaler flyder ikke, så udtrykket PULLUP / PULLDOWN-modstand gælder ikke rigtig der.
Desuden kan værdien af en intern pullup-modstand ikke justeres. Hvis denne værdi (20 .. 50k) ikke er passende (I²C har brug for noget mindre end 10k), kræves en ekstern modstand.
Kommentarer
- Som jeg skrev i en kommentar til det forrige svar, nogle Arduino-kerner gør understøtter
INPUT_PULLDOWN
.