Ir ao conteúdo
  • Cadastre-se

Malditas Interferências [ LCD/PIC]


rodrigocirilo

Posts recomendados

@Felipe_Eletrnic cara eu li aqui mesmo no forum, só que não lembro quem escreveu e onde foi....

 

vou colocar um exemplo de como está:

      set_adc_channel(0);      delay_us(20);       sensor_pressao=read_adc();      delay_ms(10);   //este tempo que li que era necessario !! para pode manipular o resultado

Mas vou agora mesmo programar e ver o que dá aqui no simulador....

 

@aphawk só sobrou o timer2 vou tentar dentro da função, se não conseguir dai eu configuro ele...

 

Obrigado ai pessoal mais uma vez....

Link para o comentário
Compartilhar em outros sites

É... quem fez esse code snippet ai realmente nem se atentou que esse delay de nada adianta uma vez que o resultado prejudicado ou nao ja vai estar salvo na variável sensor. :)

Enfim, como o ilustre @aphawk disse, existe ainda a precisão da amostragem, o tempo deve ser perfeito e sem jitter, no meu exemplo eu admito que você tenha uma fonte de clock estável e que essa esteja bem configurada e que o A/D esteja em modo contínuo de conversão. Caso nao tenha certeza disso e queira uma base de tempo confiável usar um timer para sincronizar a conversão e setar um flag de bloco convertido deve ser considerado.

Acho que estou muito mal acostumando com uso de DMA, so configuro a amostragem do A/D uma vez e deixo o hardware tomar conta disso e me entregar so o bloco de amostras espaçadas entre a máxima taxa de amostragem do A/D.

Se precisar de ajuda, chama ai.

Abs.

Link para o comentário
Compartilhar em outros sites

@  vou achar onde que eu vi depois posto aqui... 

 

bom criei uma função, para ser chamada quando necessário, me diga se está correto, pois na simulação parece estar, pelo que entendi, quando chamo a função "tira_media" ela entra neste laço FOR e fica presso nele até o valor de i ser maior que 32, quando for maior ele sai dando sequencia nas instruções da função?? é isso??

 

Os cálculos abaixo são para tirar os 0,8 volts excedente do modo como liguei o sensor...  me diga que a media está sendo tirada.. 

 

Att.

void tira_media() { int i=0;    for(i=0; i<32; i++)        {            set_adc_channel(0);             delay_us(20);            acumulador+=read_adc();                        }                        acumulador=acumulador/32;      sensor_pressao=acumulador;      sensor_pressao=sensor_pressao-174;      sensor_pressao=sensor_pressao*0.0058823529411764705882352941176471;      acumulador=0;          }
Link para o comentário
Compartilhar em outros sites

Esse delay de 10ms é desnecessário.

 

Vamos olhar o que diz o datasheet do PIC16F877:

 

post-541077-0-18794700-1396456320_thumb.

 

Considerando a impedância de entrada < 10Kohm, o tempo de uma aquisição é de aproximadamente 20uS. Após a aquisição a conversão se inicia setando o bit GO/DONE, ela só termina quando esse bit voltar para '0'.

 

Após a conversão, antes de se iniciar uma nova conversão precisamos de um delay de 2*TAD (Se você selecionou o oscilador RC interno, TAD= 2~6uS)

 

Então antes de cada conversão precisamos de um delay mínimo de 32uS (considerando TAD=6uS). Se você usar o clock do ADC à partir do cristal do micro e conseguir que TAD=2uS o tempo cai para 24uS.

Link para o comentário
Compartilhar em outros sites

Basicamente o tempo de aquisição é fixo pois como o @Projetos_afg citou esse tempo é característica do circuito de amostragem e retenção, logo esse delay de 32us antes de cada conversão se faz necessário antes de iniciar a conversão pois é ele que vai garantir que a amostra discretizada sera corretamente passada aos estagios seguintes do A/D.

Sobre seu código ele está bom, apenas algumas considerações:

1 - a variável acumulador não foi declarada? Ou está declarada externa a função? se possível declare ela somente dentro da função para economia de memoria RAM.

2 - a linha que tem essa instruçao: acumulador = acumulador / 32; pode ser otimizada, lembre - se que o PIC nao possui instrução de divisao por hardware, logo ele tera que executar uma longa sequencia de instruções para eefetuar esse divisao o que pode aumentar e muito o tempo de proocessamento do seu acumulador. Em vez disso, veja que 32 é uma potencia de 2, ou seja log(32)2 = 5  .'. 2 ^ 5 = 32. Em sistemas digitais podemos admitir que quando deslocamos o bit de um byte a esquerda é o mesmo que multiplicar um valor por 2, e quando o fazemos a direita é o mesmo que dividir por 2 ... oras o PIC possui deslocamento de bit por hardware e é executado num unico ciclo de máquina. em C basta usar o simbolos << para deslocamento a esquerda e >> para deslocamento a direita. como 2 ^ 5 = 32, então basta que façamos 5 deslocamentos a direita assim a divisao eficiente por 32 fica: acumulador = acumulador >> 5; O que vão dar 5 ciclos de máquinas, um ganho e tanto.


Abs! 

Link para o comentário
Compartilhar em outros sites

Este é o tempo que tenho que dar após setar o canal AD?? se sim, vou colocar 24us, atualmente está com 20us??? tem como esse tempo ser menor ainda???+

 

Editando: respondi antes da resposta do @ aparecer...

 

Eu declarei acumulador como  global, não sabia que declarando local economizava memoria ....

 

vou fazer as alterações sobre a divisão tambem, quanto a subtrair, adicionar e multiplicar tudo bem???

 

 

Editando novamente:

 

Fiz as alterações declarei acumulador como local e economizou 1% de RAM, e usei o deslocamento >> 5 para a divisão, também funcionou, e ficou mais rápido e exibição dos valores...

 

@ digamos que eu quisesse tirar a media de 128 amostras, usaria o deslocamento por >> 7 ??? pois 2^7=128 é isso????  tornando a divisão mais rapida??

Link para o comentário
Compartilhar em outros sites

@aphawk, @ e @Projetos_afg

 

seguinte pessoal, ontem fui lá, e por burrice minha, eu mudei os ports do lcd para facilitar e melhorar o layout da placa nova e como mudei no codigo também pra testar esqueci e gravei o pic que levei com a biblioteca errada hehe nao consegui testar... agora de manhã ja alterei e vou na hora do almoço lá...

 

 

Vou aproveitar o topico sobre interferencias em LCD e vou relatar o acontecido em OUTRA maquina, ( estamos montando 3 ao mesmo tempo)

 

Bom esta estava com o mesmo problema de interf. no LCD, fiz tudo que foi relatado para aplicar na outra nessa também, e o problema se resolveu... ocorre que ontem fizemos um teste, dentro da maquina há um trafo de 24v, a clp cheveia o 220v para ligar o trafo e alimentar um motor com redução de 24v. até ai tudo bem... ao ligar esse trafo a tela imprime lixo (mas a clp continua a funcionar corretamente) dai colocamos uma fonte chaveada de 12v só pra testar e o problema se resolveu... MAS se ligarmos o trafo(sem carga no secundario) só de encostar o trafo na mesma rede (do lado de fora da maquina) na ponta da extensão que estava ligada a maquina, a tela dá interf. Vê se pode isso???

 

O que será, de onde está vindo isso......se a clp continua a funcionar???

 

Att.

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo,

 

A primeira conclusão : a interferência não afeta a sua placa principal ( CLP ), mas afeta o display LCD ( só pode ser por causa do cabo... ) .

 

A segunda é mais sutil.... esse trafo não deve ter nenhum blindagem. Mas não deveria ter esse tipo de interferência apenas estando ligado na mesma rede, ainda mais sem carga nenhuma no secundário.

 

Esse motor que está sendo alimentado tem redução, e deve puxar uma boa corrente. Caso o trafo não esteja muito bem feito, ele pode estar saturando, e aí pode gerar mais EMI.

 

Acho que voce não vai escapar de usar um osciloscópio aí ....

 

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk  na verdade a unica coisa que tinha ligado no secundário do trafo era uma ponte retificadora (sem nenhum tipo de capacitor) a ponte direto no motor... e quando só ligamos o trafo na mesma rede ele ainda estava com a ponte, só isso....depois pegamos outro  trafo (maior) e ligamos na mesma rede, demorou um pouco mais mas também deu a interf. hehe o mais estranho é que ligamos ainda na mesma rede uma lixadeira makitta bem grande e nada  aconteceu... pensamos que iria gerar bastante ruido mas não....

 

o lcd está com malha aterrada e com blindagem de aço inox!! o lcd também está com as capacitores apropriados....100nf e 10uF!!

 

Putz não vou ter como levar o osciloscopio, e mesmo que levasse, não sei muito bem medir EMI com ele, só uso pra medir tempos e ondas quadradas aqui no Lab.

 

Será que pelo fato da maquina ser uma caixa grande de aço inox e a alimentação 220v para por um furo da caixa..... o lcd está encaixado em uma abertura feita na mesma caixa (de outro lado) será que isso influencia???

 

 

Editando: 

 

Como estou redesenhando a placa e quero fazer seguindo todas as regras, me surgiu uma duvida, vou usar o plano terra, então quero saber se todos os terminais que forem ao GNd eu posso jogar para o plano terra ou não, ou se posso jogar só a parte de potencia? e não os terminais GND do pic???

Link para o comentário
Compartilhar em outros sites

@aphawk, @Projetos_afg e @

 

Caros amigos, eu redesenhei o layout para pedir a opinião de vocês quanto a ele, vou esclarecer alguns pontos:

 

todos os terminais GND (do pic, dos transistores que controlam os relês, dos capacitores do cristal oscilador, dos ceramicos e eletrolitios de filtro enfim tudo que vai para o GND eu coloquei no plano terra, pode?? facilita muito o layout hehe. 

 

mudei os ports do LCD e do teclado para ficar mais fácil o layout e fiz trilhas bem mais grossas...

 

segue imagem..

 

dlm7mw.jpg

Link para o comentário
Compartilhar em outros sites

  • 2 semanas depois...

@rodrigocirilo,

Voltei depois de uma "estafante" semana de pescas hehhehehe !

Caramba, ninguém postou nada .....

A definição de um plano de terra é para obter o efeito de blindagem eletromagnética, e não para circular corrente nele !

voce tem de sempre seguir a regra : terra de sinal e terra de potência. O desenho acima não segue esta "norma" ...

Tem vários componentes que tem pinos ligados nesse plano de terra, mas o seu CAD está fazendo um tipo de ilha doido, que liga esse componente ao terra através de tres minusculas trilhas em volta do terminal. Mude isso, deixe toda essa área em volta do terminal cheia, tipo direto no plano. Complica um pouquinho para soldar, mas o efeito do terra é bem melhor.

Paulo

Link para o comentário
Compartilhar em outros sites

@aphawk, caramba, eu ja estava preocupado com o seu sumiço hehehe.....então Paulo realmente alguns componentes que tinha trilhas indo para o GND então eu simplesmente jogue-as para o plano que está interligado ao GND, como minha placa é de face única levar todas as trilhas lá no pino GND do regulador ficaria complicado tendo eu que usar do recurso de "jumpers" o que eu não queria fazer.....Fazer da maneira que fiz é errado?? Quanto a minusculas trilhas que ligam alguns componentes ao GND, isso é o proprio ares que fez, eu até poderia colocar a opção "solid" que preenche toda a ilha com GND, mas não o fiz mas posso mudar....

 

Quais seriam os GNd´s de sinal e de potencia?? o que eu ja mudei neste desenho foi que acrescentei alguns 100nf ceramicos proximo da alimentação e também uns eletroliticos de 10uF também...

Link para o comentário
Compartilhar em outros sites

@aphawk, ok, obrigado por tudo....Bem, apesar de não estar separando terras de potencias e sinais etc, eu acho que este novo layout perto daquele primeiro, onde tinha trilhas muuuito finas e extremamente longas, dando voltas e voltas na placa, eu acho que ja vai haver uma melhora notável, o que você acha? comparando os dois?? 

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...