Índice:

Como ler muitos switches com um pino MCU: 4 etapas
Como ler muitos switches com um pino MCU: 4 etapas

Vídeo: Como ler muitos switches com um pino MCU: 4 etapas

Vídeo: Como ler muitos switches com um pino MCU: 4 etapas
Vídeo: GPIO do Tiva Launchpad (TM4C123GPM) 2024, Junho
Anonim
Como ler muitos interruptores com um pino MCU
Como ler muitos interruptores com um pino MCU

Você já esteve trabalhando em um (s) projeto (s) e o projeto continua crescendo e crescendo, enquanto você adiciona mais coisas a ele (chamamos isso de Criatura Feaping)? Em um projeto recente, eu estava construindo um medidor de frequência e adicionei um gerador de sinal de cinco funções / sintetizador de frequência. Eu logo acabei com mais interruptores do que os pinos disponíveis restantes, então o que um cara pode fazer?

No entanto, logo eu tinha mais sete interruptores na minha caixa de diversões (sim, isso é o que chamei de meu gerador de funções … eu sei, não tenho criatividade) e aqui está um pequeno instrutivo mostrando como você pode fazer o mesmo. Não requer nenhum registrador de deslocamento ou ICs específicos. Na verdade, ele não requer um microcontrolador, também, se você rolar semicondutores discretos. Aqui está uma maneira de ler / gerenciar vários interruptores usando um único pino em seu AVR (ou outro microcontrolador … Ouvi dizer que há outros microcontroladores além do AVR, mas não consigo imaginar …).:)

Etapa 1: o essencial (não realmente)

Para fazer isso, você precisará de alguns componentes. Ajuda ter uma infinidade de interruptores para gerenciar. Você também precisará de alguns resistores e de um microcontrolador com ADC (Conversão Analógico-Digital) ou de alguma outra forma que você gostaria de indicar que havia uma chave ativada e qual era.

Se você quiser, pode usar um oscilador controlado por tensão para indicar isso, talvez com algumas luzes piscando ou, alternativamente, com som. Neste livro, vou fingir que estamos usando um AVR, mas em seu mundo você pode fingir tudo o que te faz feliz. Sinto falta de Bob Ross.

Etapa 2: o divisor de tensão

O divisor de tensão
O divisor de tensão
O divisor de tensão
O divisor de tensão

Essencialmente, a maneira como faremos isso é usando uma técnica e um circuito chamado divisor de tensão. Os divisores de tensão, como você deve ter adivinhado, dividem a tensão V,, em,, por algum valor que você determinar. Você pode dividir a tensão com vários componentes, incluindo capacitores e indutores, mas aqui vou fazer isso com o bom e velho resistor. A ideia O que estamos fazendo é colocar dois componentes em série que causarão, cada um individualmente, uma queda de tensão no componente. Olhe para a primeira foto se não estou fazendo sentido. Há uma diferença de potencial de 9 V de um trilho para outro. Entre 9V e 0V existem dois resistores em série. Cada um deles experimentará uma queda de tensão em si mesmo, dependendo da resistência, como você provavelmente se lembra de V = IR. Se você fizer uma medição de tensão entre os dois resistores, obterá algum valor entre 9 V e 0 V, dependendo de quanta tensão caiu no primeiro resistor e quanto resta para cair no segundo resistor, antes de 0 V. Existe uma fórmula simples para calcular a queda de tensão em um resistor nesta situação e se parece com isto. Permita que a tensão sobre o resistor 1 (R1) seja V1 e a tensão sobre o resistor dois (R2) seja V2. Como não posso mais usar a formatação, olhe a figura 2 abaixo para a fórmula … Então, em nosso divisor resistivo, a tensão Vout pode ser determinada por nossa fórmula para V2 (já que estaremos referenciando GND a 0V). O que isso tem a ver com ter um monte de interruptores sendo detectados em um pino? Bem, vire a página e eu vou te mostrar!

Etapa 3: escada do divisor de tensão

Escada Divisora de Tensão
Escada Divisora de Tensão

Agora suponha que temos todos os nossos interruptores, talvez seis ou oito ou dezesseis, todos conectados por meio de resistores, cada um atuando como um divisor de tensão, de modo que quando o estado do pino do interruptor muda, a tensão é lida e com base no nível de tensão, nós pode saber qual opção acabou de ser ativada. Olhe abaixo. Na imagem abaixo, conectei dois blocos de interruptores. O bloco superior possui dois interruptores e o bloco inferior possui cinco interruptores. Você pode conectar seus interruptores de alternância, momentâneos, táteis, etc. da mesma maneira. O importante a notar é o resistor ao qual seu switch está conectado. No meu exemplo, quase dobrei a resistência do próximo resistor para criar uma lacuna de tensão que é fácil de medir e não confundir com a chave antes ou depois. Se você não percebeu antes, olhe novamente e perceba que estamos de volta ao nosso velho amigo, o divisor de tensão resistivo. O primeiro resistor, de 10k ohm, é conectado a 5V e o segundo resistor - o resistor que determinará VFora para o pino SWITCH_ADC, é conectado a cada switch e, portanto, cada switch está associado a uma tensão Vout específica que pode ser lida do pino ADC conectado em SWITCH_ADC. Em seguida, determine o Vout esperado de cada switch assim

Vout = Vin * (R2 / (R1 + R2))

para o switch um:

Vout = 5V * (500 / (10000 + 500)) = 5 * 0,048 = 0,24V ou 240 mV

para o interruptor dois:

Vout = 5V * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9V ou ~ 900mV

e assim por diante.. Sinta-se à vontade para substituir R2 em seus próprios valores se você tiver apenas alguns resistores à mão … O principal aqui é manter uma lacuna grande o suficiente na tensão entre os interruptores para que qualquer margem de erro no ADC ganhe ' t colocá-lo na tensão esperada de um switch vizinho. Descobri que a coisa mais fácil a fazer é construir a escada divisória e colocar um multímetro / voltímetro no pino ADC e pressionar cada pino e ver quais valores você obtém. Eles devem estar bem pontuais em relação ao que você calcula. Depois de ter todos os valores de tensão esperados de cada chave usando um resistor específico, você pode fazer seu MCU ler o pino ADC e compará-lo com seus valores conhecidos para determinar qual chave foi pressionada. Por exemplo, digamos que você registrou uma rotina de serviço de interrupção que será chamada sempre que houver uma alteração detectada no pino ADC. Dentro desse ISR, você pode ler o ADC e comparar esse valor com a sua tabela de comutação. Se você estiver usando um valor ADC de 8 bits, sua tensão será convertida em um número entre 0 e 255 que corresponde a uma tensão entre 0 V e 5 V. Isso pressupõe que você configurou seu ADC dessa maneira.

Etapa 4: Resumo

Portanto, agora você deve saber como ser frugal ao usar os pinos GPIO para interruptores. Sempre que você estiver com poucos pinos GPIO, ou quase não tiver nenhum para começar, ou se perceber que vai utilizar um banco de interruptores, o divisor resistivo é o caminho a percorrer para salvar seus pinos GPIO e ainda fornecer um mecanismo robusto para detectar o acesso do switch.

Recomendado: