Boa noite

  Tenho uma rotina que lẽ os pulsos vindo de um moedeiro me utilizando do pino 2 do Arduino para ler as interrupções.

  Tudo funciona absolutamente com perfeição, porém, se ligo o acendedor elétrico do fogão por exemplo ou ligo o ar condicionado, há uma interferência que faz aparecer  um " crédito fantasma - Um falso pulso é lido ".

  Já tentei desacoplar com capacitores de 100k , com circuito RC , com blindagem de metal e nada surte efeito.

   Ou seja, sem o acionamento dessas interferências o projeto fica lá bem estabilizado paradinho e lê todos os créditos que são inseridos sem problema.

  Alguém sabe como resolver uma encrenca dessas ?

 

 

Exibições: 748

Responder esta

Respostas a este tópico

como leigo, eu diria: "testou com um capacitor maior? 1000uf no vcc/gnd?"

Mas, certamente, alguém mais experiente dirá algo mais inteligente.

Olá Tiago,

   Eu já tentei desacoplamento com eletrolíticos também,. Tentei desacoplar tanto DC quanto AC com filtros e não consegui resultado ...

Você tem o esquema das ligações e os componentes/módulos usados?

A imagem pode ser feita até no paint, é apenas para compreender seu circuito. 

Olá.

  Teria que saber por onde essa interferência entra, pode ser pelo circuito do moedeiro ou pela fonte, mas vamos acreditar que é pelo fio que interliga sua placa a placa do moedeiro.
   Se for por ele uma grande possibilidade é que o circuito do moedeiro gere apenas um pulso a GND para gerar a contabilização. Deixando no resto do tempo o sinal em aberto (treestate). Fios com alta impedância (em aberto) são otimas antenas. 

   Para fazer o fio ficar menos receptivos a ruidos uma técnica é colocar o capacitor, melhor de até 100nF (valor que se escreve no componente como 100K (100KpF=100nF)). Outra técnica é baixar a impedância, que seria o pullup.
   Considerei que o pulso é a GND, fica o resto do tempo em VCC o sinal. (5V ou 3V). 

   Tente por um resistor, coisa como 4K7 entre o pino e o VCC do seu circuito.

   Se não tiver qq um entre 10K e 2K2 pode servir. Acima de 10K pode ser pouco eficaz e abaixo de 2K2 pode forçar o circuito.

   Tente por só ele, sem o resistor.

 OLá Eduardo,

  O problema ocorre com ou sem a saída de pulsos conectado à placa.  Se deixar apenas a placa ligada, o problema ocorre igualzinho. Já tentei com resistor 10K  fazendo pullup , sem resistor nenhum e habilitando o pullup do prórpio Atmega e sem nem uma coisa e nem outra. Em todos os casos, o mesmo problema.

olá novamente Syscom.

      "saída de pulsos conectado à placa"  ===>  saída de onde??  conectado em qual Placa?

       Veja,  detalhes técnicos são importantes.  Sem eles e sem uma descrição precisa/minuciosa de como estão suas conexões,  não se pode concluir muito, e tudo fica na especulação.  Daqui a pouco aparece alguém aqui dizendo:  "coloca um Capacitor de 10 nF entre o pino e o GND que resolve o problema".

      Mas "a coisa", o "problema", e solução, são muito mais que isso. E detalhes técnicos fazem parte desse mais.

      Assim:

      1)  qual Arduino vc está usando?  UnoNano?  Mega?

      2)  qual é a origem da tal "saída de Pulso" ?  Esta saída é "Open Collector" (ou "Open Drain"), ou é "Totten Pole" ?

      3)  como é distribuída a Alimentação?  Alguma parte é alimentada pelos 12V que vc citou antes ?  (os tais 12V que vc usa para regular 5V).

      4)  qual o consumo de energia do Moedeiro ?

      Coloque aqui um diagrama das conexões, e que seja realista, ou então uma foto mostrando as conexões. Quanto mais detalhes, mais efetivo será o diagnóstico e solução.

      Até para fazer coisas simples, é preciso um certo rigor técnico. Veja o caso deste tópico aqui no LDG :   "problema com Interrupção"

      É bem possível que a solução para o seu problema seja muito parecida com aquela que usei naquele tópico.

      Abrçs,

      Elcids

   Uso Atmega328 StandAlone. Um cristal, 2 cap 22pf , 1 resistor 10k ao reset e mais nada.

   A distribuição da fonte :

   Entra 12v no 7805 e os 5v vão para o pino 7 e 20 do Atmega.

   Desconsidere por favor qualquer ligação do moedeiro ao circuito pois como disse, mesmo sem nada ligado a interferencia acontece.

  Invoco a interrupção no pino 4 do atmega ( 2 digital do arduino)  com:

attachInterrupt(digitalPinToInterrupt(4), leitura, RISING);

  Onde leitura  é :

void leitura() {
creditoInputado++;
controleLeitura = millis();
}

   E não faço mais nada a não ser isso.

Ok.

      Como vc usa um "stand alone", em termos de Hardware vc pode ter deixado de fazer algo significativo (veja:  não é porque o HW base do UNO é um sucesso sem precedentes, que ele é o design mais adequado para tudo, e certamente não é).

      Mas vejamos a abordagem do código.  Para que vc usa a variável "controleLeitura"  que está recebendo o valor do "millis" dentro da sua ISR ("Interrupt Service Routine") ?

      Para que eu possa sugerir algum tratamento,  preciso dessa informação bem clara.

       Ah sim,  vc saberia também dizer qual a largura do "pulso normal" que vem do moedeiro?

      abrçs,

      Elcids

  Para depois entrar nesta rotina :

 if ( ((millis() - controleLeitura) > 500) && (creditoInputado > 0) ) {
    if (creditoInserido == 1) {

      // aqui vou identificando os pulsos
}

creditoInputado =0;

* lembrando que com ou sem moedeiro, basta eu ter essa interrupção lendo que o problema surge.

ok.

      Há alguns problemas na sua lógica.  A forma como vc está validando a detecção do Pulso está inadequada, e ela é propensa a pulsos espúrios que podem resultar em uma falsa detecção.

      Logo mais, irei postar um código para seu teste,  o qual faz uma detecção confiável do Pulso.

      Claro, este código que irei postar,  será um código parcial,  uma vez que vc não postou mais detalhes do seu próprio código.

      Abrçs,

      Elcids

 Obrigado por sua ajuda, fico no aguardo.

olá novamente Syscom.

      Conforme prometi, implementei um tratamento para a sua questão, e inclusive já testei.

      Mas antes de publicar aqui,  há dois pontos relacionados ao seu Hardware que preciso que vc elucide.

      Para isto, veja primeiro a figura a seguir:

(clique na figura para "zoom")

      Como vc pode ver,  a figura é "auto-explicativa", e descreve uma possiblidade para o sinal vindo do Moedeiro.

      Agora veja esta segunda possibilidade, mostrada na figura a seguir:

(clique na figura para "zoom")

      Novamente,  a figura é "auto-explicativa", e descreve uma outra possiblidade para o sinal vindo do Moedeiro.

      Então seguem os dois pontos que preciso que vc elucide:

      1)  qual das duas figuras reflete o funcionamento do seu Hardware?

      2)  aproximadamente quanto tempo (independente se é "TH" ou "TL"),  dura o Pulso gerado?

      Note que o período de tempo é aproximado, ou seja, não precisa ser exato.  Por exemplo,  poderia ser descrito assim:  entre 100ms e 150ms.

      Fico no aguardo das informações.

      Abrçs,

      Elcids

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço