Esse problema tem décadas, mas não vejo uma resposta direta neste site. Eu quero o seguinte:
Este circuito apenas permite verificar o estado do botão de dentro do microcontrolador. Nada chique. Minhas perguntas:
- Existe algo melhor que esse design simples?
- O valor do resistor de 100 quilo ohms é adequado para os dispositivos CMOS atuais, como o dsPIC30FXXXX e não para uma aplicação de alta potência?
Respostas:
Primeiro, muitos microcontroladores e controladores de sinal digital terão resistores pull up internos. Aqui está um exemplo, um Atmel ATMega164.
Normalmente, haverá um registro que permite ativar e desativar os pull ups internos. Devido a variações no processo de fabricação, esses pullups internos têm uma gama muito ampla e não são uma boa opção se você precisar de um controle muito próximo do consumo de corrente em aplicações de ultra baixa potência. Se é importante manter a contagem baixa de componentes, é uma maneira fácil de fazê-lo. Usar pull ups internos para debounce de hardware não seria uma boa ideia, pois não é possível prever o valor exato.
Se os 100k Ω valor é adequado depende. Se for apenas uma opção que será ativada periodicamente por um usuário, 100k Ω seria uma boa opção para minimizar o consumo de energia. Para coisas que mudarão mais rapidamente, como codificadores rotativos, o processo pelo qual eu passaria é
Portanto, se a corrente máxima do coletor por pino GPIO fosse 10 mA e operasse em 5V:R =VEu=5 V10 m A= 500 Ω . Manter esse valor R o mais pequeno possível permitirá bordas mais nítidas e frequências de comutação mais altas.
fonte
Você pode ficar mais simples que isso.
Basta usar um resistor pull-up / pull-down interno no seu microcontrolador.
100k é adequado, mas os pullups internos podem ser um pouco menores em alguns MCUs; por exemplo, no AVR atmega8, são 30-80kOhm para pull-up de redefinição e 20-50kOhm para todos os outros pinos de E / S.
fonte
Melhor não pode ser respondido sem critérios específicos contra os quais você não forneceu. Na maioria dos casos, a topologia exibida é boa. Duas variações podem ser "melhores", dependendo da situação:
Muitos microcontroladores possuem pullups internos em alguns de seus pinos. Estes destinam-se exatamente a esse tipo de situação. O resistor é interno ao micro e você define um pouco para habilitá-lo. A única parte externa necessária é apenas o próprio botão.
Outra variante útil a ser lembrada é para projetos de baixa potência, nos quais o botão pode ser um interruptor que pode ser fechado por longos períodos de tempo. Nesse caso, você deseja minimizar a corrente média de longo prazo através do resistor de pullup. Você o torna o maior possível, mas existem limites e inconvenientes para torná-lo grande demais. Em vez disso, você ativa o pullup por apenas alguns µs de cada vez para fazer uma leitura de botão. Se você verificar o botão a cada 1 ms e o pullup estiver ativado por 10 µs, a corrente de pullup média será reduzida em 100x. Com um resistor externo, você usa outro pino para acionar a parte superior da tração. Com um pullup interno, você o ativa / desativa no firmware, conforme necessário.
Eu já respondi isso extensivamente aqui .
fonte
Melhor do que esse design simples? Sim. Jogue um boné nele e você terá um simples interruptor rebocado por hardware.
O capacitor seria uma tampa de cerâmica comum de 0,1uf. O Resistor seria um 10k. Este site tem todos os detalhes sobre o porquê. Em resumo, um circuito de retorno evita que o microcontrolador registre falsamente várias pressionamentos quando você pressiona o botão. A configuração do resistor / capacitor suaviza o ressalto mecânico do botão, para que seja uma transição constante.
fonte
EDIT - o comentário que fiz abaixo foi feito para acompanhar o que Olin havia dito mais tarde sobre o circuito com um capacitor para supostamente adicionar debounce. Me desculpe, parece que parece estar no lugar errado - talvez alguém possa consertar isso, porque eu sou obviamente muito cego ou estúpido para ver como eu deveria ter feito isso !!
Eu concordo com Olin - ele não fornece um bom retorno. Eu também acrescentaria que o curto-circuito do capacitor pode causar um grande aumento de corrente que pode redefinir o microprocessador se o layout da PCB não for realmente bom. Alguns interruptores precisam de uma corrente úmida para operar corretamente e de maneira confiável e 100k pode ser muito alto para alguns interruptores (especialmente interruptores de membrana).
fonte