Aprender

Por que uma entrada precisa de um pull-up, e não só de uma chave

Ou veja todas as aulas.

  • 465componentes na bancada
  • 43placas rodando agora
  • 1.00xtempo real, em todas as placas
Resistor de pull-uplive0.000 s 0.00x
Segure o botão
Um pull-up de 10 kilohms, um botão e uma porta NOT acendendo um LED enquanto o botão está pressionado.

Um botão, sozinho, só consegue fazer uma ligação. Ele não consegue desfazer uma ligação que não existia, e muito menos decidir o que um fio lê quando ninguém está encostando nele. Ligue um lado do botão numa entrada digital e o outro no terra, sem mais nada nesse nó, e no instante em que o botão é solto a entrada fica flutuando: nem em nível alto, nem em nível baixo, parada na carga que por acaso sobrou nela. Numa entrada CMOS, que quase não puxa corrente em nenhum sentido, essa carga que sobrou pode ficar ali por um tempo surpreendentemente longo, e pode ser lida como 1 ou 0 mais ou menos ao acaso.

O resistor de pull-up resolve isso dando ao nó um lugar para ir quando o botão não está apertado. No circuito acima, um resistor de 10 kilohms vai dos 5 V até o mesmo nó que o botão puxa para o terra. Com o botão solto, o resistor é a única coisa definindo o nó, então ele fica em 5 V: um nível lógico alto limpo e de verdade. Aperte o botão e ele liga o nó direto ao terra, o que vence com facilidade a puxada fraca do resistor, e o nó cai para 0 V limpos. Solte e o resistor puxa o nó de volta para cima. Nada fica sem definição em momento nenhum.

Dez kilohms é uma escolha pensada, não uma regra. O valor tem que ser pequeno o bastante para o nó voltar aos 5 V rápido e com firmeza, e grande o bastante para que apertar o botão não desperdice uma corrente significativa puxando o nó para o terra: 5 V sobre 10 kilohms dá meio miliampère, pouco perto de quase qualquer outra coisa na placa e mais do que suficiente para definir a tensão. A porta NOT à direita transforma o sinal alto quando solto e baixo quando apertado num LED aceso exatamente enquanto o botão está pressionado. Esse é o jeito comum de fazer a lógica funcionar do jeito que a pessoa espera sem sobrecarregar o nó de leitura, como aconteceria se você ligasse um LED direto nele.

Toda placa que o Mokxi simula tem esse mesmo resistor embutido, e ele pode ser ligado pelo firmware. O modo INPUT_PULLUP do Uno liga um pull-up interno de 35 kilohms dentro do próprio ATmega328P, e o ESP32-C3 e as outras placas oferecem a mesma ideia nos seus pinos. É por isso que os sketches de button que já vêm prontos leem o pino como baixo quando ele é apertado: o resistor interno já faz o trabalho que o externo faz aqui, só que mais fraco e com um componente a menos na protoboard. A versão externa acima é o que realmente acontece por baixo nos dois casos, só que à vista.

Monte isto de verdade

Abra o editor, mude um valor e veja o número mudar junto. Nada para instalar, e não precisa de conta.