Det finns två sätt att dra i stiften i Arduino – med internt och externt motstånd. Jag undrar när jag ska använda externt motstånd istället för INPUT_PULLUP.
Kommentarer
- Från min erfarenhet är den enda skillnaden " extern pullup / pulldown är lättare att ersätta " och kanske också " genom att bara titta på kretsen kan du se den externa motstånd så att det ' är lättare att förstå designen efter några månader "
Svar
Du kan använda antingen det interna eller externa motståndet i normal applikation.
Varje metod har sina egna fördelar:
Internt motstånd
- Fördelar: flexibel att ändra genom att ändra koden
- Fördelar: Minska PCB-storlek
- Fördelar: Minska kostnad (mycket liten)
- Nackdelar: Det kan göra MCU hett
Externt motstånd
- Pr os: Minska värme för MCU
- Nackdelar: Inte lätt att byta ut när det är inbyggt PCB
- Nackdelar: Öka PCB-storlek
Förutom , Upp- och neddragningsmotstånd används inte bara för INPUT-port utan också för OUTPUT-port. När det gäller OUTPUT-porten. Det externa motståndet har en annan fördel: flexibilitet vid anslutning av enheter med olika I / O-spänningar. Till exempel, i I2C-hårdvara se I2C på hårdvarunivå .
OBS: Såvitt jag vet, vid skrivtid, Arduino biblioteket stöder INTE INPUT_PULLDOWN
Kommentarer
- 1. Värmen som genereras av den interna utdragningen är försumbar. 2. Vissa kort (inte AVR-baserade) har
INPUT_PULLDOWN
.
Svar
”Nackdelar: Det kan göra MCU hett”
Det kommer det inte. P = V ^ 2 / R, så 5 * 5/20 000 = 1,25 mW, vilket inte gör processorn varm. Till och med att vrida alla 80 i en Mega2560 och dra dem alla lågt kommer bara att försvinna 0,1 W.
”OBS: Så vitt jag vet, vid skrivningstiden stöder Arduino-biblioteket INTE INPUT_PULLDOWN” eftersom Atmega328P, ”1284,” 2560, etc. Enhetsfamiljen inte har interna rullgardinsmotstånd. Endast pullup. Se avsnitt 14 i deras datablad, ”I / O-portar”.
Denna pullup är i allmänhet otillräcklig för I2C-pullup, den stigande kanten som skapas av 20K till 50K intern pullup är mycket långsam. Extern 4.7K ner till cirka 2.2K (beror på hur många I2C-enheter som är anslutna) behövs. Och I2C-busspecifikationen säger att de borde vara i slutet av bussen, inte ursprunget till bussen (som vanligtvis är processorn).
Om du har en lång ledning som kommer från en knapp eller omkopplare, det är i allmänhet en bra tid att använda en extern pullup för att säkerställa goda växlingsnivåer mellan hög och låg.
Svar
”Arduino Språk ”(dvs. pinMode()
-funktionen) känner bara till INPUT_PULLUP.
Så du behöver externa motstånd för PULLDOWN-motstånd.
OUTPUT-signaler är inte flytande, så termen PULLUP / PULLDOWN-motstånd gäller inte riktigt där.
Dessutom kan värdet på ett internt motstånd inte justeras. Om detta värde (20 .. 50k) inte är lämpligt (I²C behöver något mindre än 10k) krävs ett externt motstånd.
Kommentarer
- Som jag skrev i en kommentar till föregående svar, gör några Arduino-kärnor stödja
INPUT_PULLDOWN
.