Prezados,

Numa placa MEGA 2560 estou utilizando 12 das 16 entradas analógicas, 10 entradas digitais e 10 saídas digitais. (utilizo fonte externa de 12Vcc/2A regulada no pino jack)

O que acontece é o seguinte:

Quando uso o somente a placa MEGA2560 tudo funciona bem (verifico pelo monitor serial).

Quando adiciono a placa W5100 para utilizar o protocolo modbus TCP, acontece o seguinte, as entradas analógicas A0 e A1 estão super estáveis e muito seletivas. As entradas A02 a A11 estão completamente instáveis... variando muito.

Os pinos definidos como entradas digitais estão funcionando OK.

Não consigo acionar as saídas digitais... (o código pode estar equivocado nessa parte).

Já cogitou-se de instabilidade dos 5Vcc após o regulador da placa 2560, mas isso não se verificou, a tensão é de 4,91Vcc estável naquele ponto. 

O código está no arquivo anexo.

Alguém pode me dar uma luz sobre o que está acontecendo nas entradas analógicas ?

SDS

Daltro

Exibições: 3983

Anexos

Responder esta

Respostas a este tópico

Oi DRCj, bom dia,

você não pode fazer leituras das entradas analógicas seguidas não,

tem que ter um "time" entre uma medida e outra

Se fizer leituras seguida terá variações.

"It takes about 100 microseconds (0.0001 s) to read an analog input,

so the maximum reading rate is about 10,000 times a second.

Coloque um delay de 150useg entre cada uma delas.

delaymicroseconds(150);

Rui

Não adiantou não !

Coloquei um delay(10) entre as leituras, mas não resolveu !

Olá Daltro

O Lucas usa uma segunda library junto a que você está usando. Tente entrar em contato com ele.

Veja estes vídeos abaixo

http://www.youtube.com/watch?v=KnxxqPRBHzA

http://www.youtube.com/watch?v=o-x-glPJ6vU

http://www.youtube.com/watch?v=XnmCQUZzKEw

Há um tempo atras discutíamos justamente essa questão de instabilidade de escravos com scadabr no chat do ldg vou deixar aqui a discussão que copiei para usar caso fosse precisar. As informações são poucas na discussão, mas pode vir a dar alguma ideia. 

Anexos

Pois é Augusto,

Ele usa a mudbus e a M0dbus, pois conforme ele mesmo explica, se não utilizar a M0dbus não se conseguiria iniciar o protocolo modbus TCP... mas isso aqui não acontece... tudo funciona normal...

Repare tbm que embora, no cógigo exista a leitura de 5 entradas analógicas, no supervisório ele mostra apenas uma delas...

Veja abaixo minha resposta ao Wiechert ...  

De toda a forma, obrigado pela ajuda...  (vou testar outra biblioteca para ver se o comportamento é outro)

SDS, 

Olá,

Simplesmente colocar um delay entre leituras não resolve o problema!

O ATmega tem apenas um ADC para fazer a leitura de todos os pinos analógicos, assim quando mandamos que ele faça a leitura de outra entrada analógica o circuito é do ADC é comutado de uma entrada pra outra para que o ADC possa tomar uma amostra da tensão presente no pino e fazer a nova conversão.

Acontece que muitas vezes a amostra é contaminada pela leitura anterior devido a configuração errada dos parâmetros do ADC nos registradores do ATmega.

A IDE do arduino tem muitas vantagens dentre elas as facilidades de aprendizagem e desenvolvimento, e tornar a configuração do microcontrolador praticamente transparente ao usuário (programador)). Mas as vezes essas facilidades se tornam uma desvantagem, como nos casos onde queremos ler mais de uma entrada analógica, a IDE do arduino não corrige o tempo de  aquisição do ADC e ai temos leituras erráticas.

Para corrigir esta deficiência temos dois caminhos:

1- Programar diretamente os registradores do ADC do ATmega;

2- Selecionar a entrada analógica desejada, fazer um delay, e após fazer a leitura da entrada;

No link abaixo o assunto foi amplamente discutido, mostrando porque isto acontece e como resolver o problema:

ScadaBr - Arduinos - Influência entre as portas analógicas

 

Abraço.

 

Caro Wiechert,

Muito boa a discussão e as informações... mas uma coisa me intriga:

Meu circuito de teste é composto de uma fonte 5V/2A estabilizada, 12 potenciometros multivoltas de 10K ligados como divisores de tensão e o pino central de cada um deles alimentando cada uma das entradas A0 a A15 do arduíno.

Quando eu faço a leitura pelo monitor serial, tudo é perfeito, tenho leituras com diferenças de 0,5 volt para cada entrada... e tudo fica muito estável, ou seja, a repetitividade é excelente.

Posteriormente, coloco a placa W5100 e insiro o protocolo modbus TCP... quando faço as leituras pelo scadabr somente as entradas A0 e A1 ficam estáveis e seletivas, todas as outras ficam instáveis, variando muito... mas o sinal de entrada é perfeito !!!

Eu acredito em tudo o que está escrito na discussão referenciada, mas como explicar essa diferença de leituras (serial e modbus ) ??? 

Alguma ideia ??

 

Luis,

delay(10) é um tempo muito maior que delaymicroseconds(150)...

delay(1) = 1 segundo / 1000

delaymicroseconds(1) = delay(1) / 1000

!!! 

Luis, também pensei q o problema dele era o delay. Mas não é, porque a A0 e A1 estão normais.
Daltro não use a A0 e A1. Pode ser esse o problema. Vi num post que essas 2 entradas são usadas pela placa e por isso podem estar interferindo nas demais. Tente fazer um teste sem essas 2 entradas e nos conte aqui.

Luis... para ser bem objetivo, entradas analógicas são as entradas A0 - A15 existentes na placa Mega 2560, e não é para mim... mas sim para todos. Elas estão ligadas, respectivamente, a 12 potenciometros multivoltas de 10K utilizados como divisor de tensão em uma fonte estabilizada de 5V/2A. "Super-seletivas" (o resultado de uma não interferia na outra) e "estáveis" (quanto a repetitividade) foram os adjetivos que dei à leitura destas mesmas entradas analógicas quando monitoradas pelo "monitor serial" existente na IDE do arduino.

O que estou informando sobre "instável" é a leitura destas mesmas entradas, que estavam estáveis e seletivas quando feitas pelo ScadaBR.

Esclareci as suas dúvidas ?

 

Caro Luis Farias,
Quando você escreveu:
"Dentro do Arduino as entradas analogicas são totalmente independentes. O sinal (tensão analógica) vai para qualquer um dos pinos ADC (analog to digital converter), quando este sinal lá chega é convertido por um circuito e segue como um número digital (varios bits) que pode ser usado dentro de programas."
De fato oque ocorre no caso do atmega em questão assim como na maioria dos microcontroladores com vários pinos analógicos existe apenas um circuito conversor (ADC) para fazer a leitura de todos os pinos. Erros na configuração dos registradores do ADC como por exemplo no ajuste do tempo de aquisição da amostra pode sim fazer com que a leitura sofra interferência da leitura da entrada anterior.
Veja as dicas do Eduardo e o link da discussão que eu coloquei logo acima onde o problema é explicado em detalhes.
http://labdegaragem.com/forum/topics/scadabr-arduinos-influ-ncia-en...
Abraço.

Sobre as questões de nomenclatura, queria complementar:

Eu entendi perfeitamente a descrição que o Daltro fez, usando linguagem clara e objetiva, nossa língua portuguesa utilizada com os jargões tradicionais do meio acadêmico e laboratorial, parabéns. 

Dá vontade até de criar um tutorial incluindo tanto a linguagem clássica e objetiva quanto os neologismos, para consultarmos em caso de dúvidas. Pra mim às vezes, nem com um dicionário de inglês na mão consigo decifrar. 

Mas voltando ao seu problema. Tudo indica que é ruído.

Por aparecer mais em uma porta que em outra caracteriza que ele é injetado antes da chave que comuta qual entrada será convertida (sim, n canais A/D significa uma chave comutadora de n portas e 1 A/D). Essa chave que em alguns controladores não é rapida o suficiente e provoca uma interferencia entre sinais caso vc faça leituras em canais distintos (chaveie rápido), derrubando a seletividade. A seletividade tb é afetada por picos. Quando vc tem um sinal que parece bom ao multímetro mas contem spikes (agulhadas de sinal) os diodos de proteção internos costuma fazer o sinal fora de faixa invadir outros canais. Isso costuma acontecer por ex quando vc encosta o dedo numa entrada analógica. Não só essa, mas algumas outras são afetadas. 

Acredito que seja ruído no próprio sinal, vale verificar se existe alguma ligação no modulo W5100 aos pinos correspondentes.

Pode ainda ser de GND, que quando acontece qualquer tipo de resultado pode ser esperado, lógico ou não, vale tentar procurar por ligações frágeis de GND. O ideal seria que todos os GNDs saissem da fonte. Reforçar com fios soldados tb pode ser tentato.

Pode ser esse seu 5V. Não me parece bom 4.91V. Deveria ser mais proximo de 5V. Vale tentar alimentar o modulo W5100 por outra fonte para ver o q muda e tb colocar uns capacitores por ex 100nF  (capacitor de desacoplamento) espalhados para ver o resultado. Tanto entre o GND e o 5V quanto entre o GND e o pino analogico.

As vezes fontes mais parrudas (2A) são dimensionadas para trabalhar com carga mínima. Como internamente existe um PWM com uma carga muuuito pequena ele trabalha num ponto crítico, proximo ao desligar totalmente e fica pulsante. Isso é terrivel. Boas fontes tem um resistor para garantir carga mínima. Vc poderia tentar tb, colocar um resistor de carga que consuma pelo menos uns 200mA em paralelo para ver se ajuda.

Claro, um osciloscópio poderia ajudar mto nesse momento, mas as vezes nem ele.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço