Existem duas maneiras de puxar os pinos no Arduino – usando resistor interno e externo. Eu me pergunto quando devo usar o resistor externo em vez de INPUT_PULLUP.
Comentários
- Pela minha experiência, a única diferença é " pullup / pullup externo é mais fácil de substituir " e talvez também " apenas olhando para o circuito você pode ver o externo resistor para que ' seja mais fácil de entender o design após alguns meses "
Resposta
Você pode usar o resistor interno ou externo na aplicação normal.
Cada método tem vantagens próprias:
Resistência interna
- Prós: flexível para alterar alterando o código
- Prós: reduza o tamanho do PCB
- Prós: reduza o custo (muito pequeno)
- Contras: pode tornar o MCU quente
Resistência externa
- Pr os: Reduzir o calor para MCU
- Contras: Não é fácil de substituir quando é PCB embutido
- Contras: Aumentar o tamanho do PCB
Além disso , Os resistores pull-up e pull-down não são usados apenas para a porta INPUT, mas também para a porta OUTPUT. No caso da porta OUTPUT. O resistor externo tem outra vantagem: flexibilidade na conexão de dispositivos com diferentes tensões de E / S. Por exemplo, em hardware I2C veja I2C no nível de hardware .
NOTA: Até onde eu sei, no momento da escrita, Arduino a biblioteca NÃO suporta INPUT_PULLDOWN
Comentários
- 1. O calor gerado pelo pullup interno é insignificante. 2. Algumas placas (não as baseadas em AVR) têm
INPUT_PULLDOWN
.
Resposta
“Contras: pode tornar o MCU quente”
Não vai. P = V ^ 2 / R, então 5 * 5 / 20.000 = 1,25mW, isso não aquecerá o processador. Mesmo girando todos os 80 em um Mega2560, e puxando todos para baixo, só dissipará 0,1 W.
“NOTA: Até onde eu sei, no momento da escrita, a biblioteca Arduino NÃO suporta INPUT_PULLDOWN” Isso é porque Atmega328P, “1284,” 2560, etc. família de dispositivos não tem resistores internos suspensos. Apenas pullup. Consulte a Seção 14 de suas planilhas de dados, “Portas de E / S”.
Este pullup é geralmente insuficiente para o pullup I2C, a borda ascendente criada pelo pullup interno de 20K a 50K é muito lenta. São necessários 4,7 K externos para cerca de 2,2 K (depende de quantos dispositivos I2C estão conectados). E a especificação do barramento I2C diz que eles devem estar no final do barramento, não na origem do barramento (que geralmente é o processador).
Se você tiver um fio longo saindo de um botão ou interruptor, isso geralmente é um bom momento para usar um pullup externo para garantir bons níveis de comutação entre alto e baixo.
Resposta
O “Arduino Language “(ou seja, a função pinMode()
) conhece apenas INPUT_PULLUP.
Portanto, você precisa de resistores externos para resistores PULLDOWN.
Os sinais de OUTPUT não são flutuantes, então o termo PULLUP / PULLDOWN resistor não se aplica lá.
Além disso, o valor de um resistor pullup interno não é ajustável. Se esse valor (20 .. 50k) não for apropriado (I²C precisa de algo menos que 10k), um resistor externo é necessário.
Comentários
- Como escrevi em um comentário para a resposta anterior, alguns núcleos do Arduino fazem suporte
INPUT_PULLDOWN
.