Det er to måter å trekke pinnene i Arduino – ved hjelp av intern og ekstern motstand. Jeg lurer på når jeg skal bruke ekstern motstand i stedet for INPUT_PULLUP.
Kommentarer
- Fra min erfaring er den eneste forskjellen " ekstern pullup / pulldown er lettere å erstatte " og kanskje også " ved å bare se på kretsen kan du se den eksterne motstand slik at det ' er lettere å forstå designet etter noen måneder "
Svar
Du kan bruke den interne eller eksterne motstanden i normal applikasjon.
Hver metode har hver sine fordeler:
Intern motstand
- Fordeler: fleksibel å endre ved å endre koden
- Fordeler: Reduser PCB-størrelse
- Fordeler: Reduser kostnad (veldig liten)
- Ulemper: Det kan gjøre MCU varmt
Ekstern motstand
- Pr os: Reduser varmen for MCU
- Ulemper: Ikke lett å erstatte når den er innebygd PCB
- Ulemper: Øk PCB-størrelse
Dessuten , Opptrekks- og nedtrekksmotstander brukes ikke bare for INPUT-port, men også for OUTPUT-port. I tilfelle OUTPUT-port. Den eksterne motstanden har en annen fordel: fleksibilitet i å koble enheter med forskjellige I / O-spenninger. For eksempel, i I2C-maskinvare se I2C på maskinvarenivå .
MERK: Så vidt jeg vet, på skrivetid, Arduino biblioteket støtter IKKE INPUT_PULLDOWN
Kommentarer
- 1. Varmen som genereres av den interne uttrekkingen er ubetydelig. 2. Noen tavler (ikke AVR-baserte) har
INPUT_PULLDOWN
.
Svar
«Ulemper: Det kan gjøre MCU varmt»
Det vil ikke. P = V ^ 2 / R, så 5 * 5 / 20.000 = 1,25mW, som ikke vil gjøre prosessoren varm. Selv å slå alle 80 i en Mega2560, og trekke dem alle ned, vil bare forsvinne 0.1W.
«MERK: Så vidt jeg vet, støtter Arduino-biblioteket IKKE INPUT_PULLDOWN» Det vil si fordi Atmega328P, «1284,» 2560, osv. Enhetsfamilien ikke har interne nedtrekksmotstander. Bare pullup. Se seksjon 14 i databladene deres, «I / O-porter».
Denne pullupen er vanligvis ikke tilstrekkelig for I2C pullup, den stigende kanten som er opprettet av 20K til 50K intern pullup er veldig treg. Ekstern 4.7K ned til rundt 2.2K (avhenger av hvor mange I2C-enheter som er koblet til) er nødvendig. Og I2C-busspesifikasjonen sier at de skal være på slutten av bussen, ikke opprinnelsen til bussen (som vanligvis er prosessoren).
Hvis du har en lang ledning som kommer fra en knapp eller bryter, er vanligvis et godt tidspunkt å bruke en ekstern pullup for å sikre gode byttingsnivåer mellom høyt og lavt.
Svar
«Arduino Språk «(dvs. pinMode()
-funksjonen) kjenner bare INPUT_PULLUP.
Så du trenger eksterne motstander for PULLDOWN-motstander.
OUTPUT-signaler er ikke flytende, så begrepet PULLUP / PULLDOWN-motstand gjelder egentlig ikke der.
Dessuten kan ikke verdien av en intern pullup-motstand justeres. Hvis denne verdien (20 .. 50k) ikke er passende (I²C trenger noe mindre enn 10k), kreves en ekstern motstand.
Kommentarer
- Som jeg skrev i en kommentar til forrige svar, gjør noen Arduino-kjerner støtte
INPUT_PULLDOWN
.