Dúvida: controlar led e botão usando mesmos pinos?

Bom dia pessoal,

Estou analisando a placa de controle+interface da minha lavadora, pois pretendo criar a minha própria placa para automatizar o reaproveitamento de água. A ideia é a seguinte: terei 2 galões de 200 litros, uma para armazenar a água "suja" (pré-lavagem e lavagem) e outro para armazenar a água "limpa" (enxague). Quando a máquina for jogar a água fora, se for da pré-lavagem/lavagem, jogarei a água no galão de água suja. Se for água de enxague, jogarei no galão de água limpa. Quando a máquina for fazer a pré-lavagem/lavagem, se houver água no galão limpo, a máquina usará essa água ao invés da torneira.

A placa de controle é aparentemente bem simples: há um CI (HT48F50E, que pretendo mudar para um Atmega) que controla o acionamento das funcionalidades da máquina:

  • um MAC97AB para acionar a válvula solenoide para encher a máquina de água;
  • um T410-600T para acionar a eletrobomba que tira a água da máquina;
  • um BTA12-600SW para acionar o motor sentido horário;
  • um BTA12-600 SW para acionar o motor sentido anti-horário;

Ainda estou estudando/hackeando a placa, mas uma coisa me chamou a atenção na placa de interface, que responsável pela interface IHM. Nessa placa estão os leds que indicam o programa de lavagem escolhido, bem como o status da máquina, além dos botões para configuração/uso.

A DÚVIDA:

A placa de interface é ligada na placa de controle por um cabo flat de 10 vias. Acontece que são utilizados apenas 9 pinos para controlar 10 leds e 6 botões. A seguir, uma foto da placa:

Consegui mapear o acionamento de cada um dos 10 leds, mas a dúvida que eu tenho é que os botões são acionados utilizando os mesmos pinos que alguns leds, conforme mapeamento a seguir:

Por exemplo, o botão 1 (B1) está ligado nos mesmos pinos que o LED1. Como isso é possível, acender um led e ainda conseguir ler se um botão foi pressionado, utilizando apenas 2 pinos?

Desde já, agradeço pela ajuda.

Exibições: 1423

Responder esta

Respostas a este tópico

Olá,

Isso é um recurso muito comum.

O truque é setar o pino como saída e acionar o pino como LOW ou HIGH dependendo se o led deve ficar acesso ou apagado. Desta forma o LED irá indicar o estado da função programada.

E de tempos em tempos, mudar o pino do modo de saída para o modo de entrada e então ler o estado do pino, se está LOW ou HIGH, verificando se o botão está ou não pressionado. Assim que fizer a leitura do botão é só mudar o pino novamente para o modo de saída e então acionar ou não o LED. 

Como esse ciclo se repete muito rápido não será percebido o LED piscar, devido a persistência do do olho humano.

Apenas deve-se tomar alguns cuidados (resistores) para que o botão não coloque o pino em curto se o mesmo estiver com a saída acionada e o botão pressionado, apenas mantenha os componentes conforme já estão ligados ao pino da placa original.

Este recurso é muito utilizado em outras famílias de MCU como nos PIC e Holtek, mas no arduino raramente vemos isso sendo usado.

Abraço.

Muito obrigado pela resposta Wiechert. Eu cheguei a imaginar que poderia ser algo assim, "tipo" como uma multiplexação, mas é sempre bom tirar a dúvida com quem sabe.

Esse truque é utilizado por alguma razão específica ou apenas para economizar portas do MCU?

Oi Matheus, bom dia.

há alguns anos, eu tive problemas com a placa da mq de lavar da minha casa.

A Brastemp mudou o  "designer" das placas de reposição, e como a minha placa de potência deu defeito, eu teria que trocar ela e também a placa de controle.

Como eu achei isto um absurdo, resolvi levantar o esquema das placas e consertei a placa de controle.

Na época pensei em fazer o que voce está fazendo, mas ficou guardada na pasta de

"idéias para o futuro, mas não realizadas"

Vou acompanhar seu post e dar uns palpites. 

O Wiechert está correto.

Este é quase um  processo de multiplicação. 

Rui

Valeu Rui, à medida que o projeto for caminhando, vou postando os resultados aqui!

Olá Rui,

Este recurso é chamado de maximização de uso dos pinos. 

O assunto é muito bem explicado em um capítulo do livro "Conectando o PIC 16F877A - Recursos Avançados" de Souza e Lavínia Ed. Érica. Mesmo sendo um livro voltado para os microcontroladores da Microchip em linguagem assembly uma pessoa esperta pode usar os conceitos mostrados (são muitos) e adapta-los para uso com outros microcontroladores. Também existe outro volume dos mesmos autores sobre os mesmos recursos mas baseado em PIC18 e em linguagem C.

Recomendo a leitura dos livros por todos que queiram aprender como funcionam os diversos recursos dos microcontroladores, e deixar de serem meros usuários de "libraries" prontas.

Abraço.

OI Wiechert,

obrigado pela informação.

Eu sou novo e tenho muito  o que aprender.

Só um detalhe, eu digitei errado. 

Onde eu digitei "multiplicação" era para ser "multiplexação".

Só ao ler seu texto eu me dei conta do meu erro.

Novamente obrigado

Rui

Sim eu percebi, mas o recurso de usar um mesmo pino como entrada e como saída não é bem o caso clássico da multiplexação, por isso o autor do livro que eu citei prefere o termo maximização de I/Os.

Abraço,

Wiechert, voce tem razão,

por isto eu usei o termo "quase".

Rui

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço