Ir ao conteúdo
  • Cadastre-se

Problema com Sensor e ADC do PIC


Posts recomendados

Olá pessoal, venho mais uma vez pedir a ajuda dos colegas mais experientes para solucionar um problema.. vamos lá...

 

Tenho um sensor de pressão com saida de 0V a 5V , Meu programa foi feito para ler e exibir a pressão em um  lcd de acordo com a variação de tensão no canal AD. 0V = 0.00 bar 5V = 2.00 bar.

 

Até aqui tudo bem, quando testei na bancada sem o sensor de pressão, usei um potenciometro com um terminal ligado no 5V, o do meio na entrada AD e o outro no GND.  Variando o pot percebia-se a pressão variando na tela do LCD. beleza!!!

 

Mas hj ao ligar a saida do sensor no pic e "injetar" pressão de 2.00 bar no sensor a leitura foi de 0.07 bar somente.. Dai entrei com o multimetro para medir a tensão que estava na saida do sensor/entrada AD do pic e para minha surpresa medi somente 0.12V .... dai rompi a ligação entre a saida do sensor e a entrada do pic, e medi a tensão que estava na saida do sensor e lá tinha os 5V ..... mas ao encostar na entrada AD do pic a tensão cai para os 0.12V

 

Se eu pegar um fio do Vcc da placa (5V) e ligar na entrada AD o pic mede normalmente(valor da pressão maximo)...então não pode ser nada na programação..

 

estou setando o pino de entrada AD como (entrada) e zerando o port referente a ele logo em seguida..

 

O que pode estar a acontecendo pessoal me ajudem..

Link para o comentário
Compartilhar em outros sites

Obrigado pelas respostas.. seguinte:

 

@MatheusLPS  eu configurei o portA (16F877A) pois estou usando o A0 como AD e os outros como saida (acionamento de reles) por isso configurei.... mas vou retirar isso e testar... compilador CCS

 

Quanto a possibilidade de usar outro pino, tá bem complicado pois ja mandei fazer algumas placas... :(

 

@MOR desculpe mas eu não sei se desliguei outras funções do pino AD, mas o estanho é que como eu disse anteriormente, se eu mandar 5V no pino ele lê a "pressão máxima"....

 

Trata-se de um sensor chinês, não tenho o datasheet dele, mas na caixa veio um manual com as informações de conexão ( que agora também não está comigo rsrs) é bem clara a ligação dos fios, vermelho 12~36v , azul output 0~5V preto GND , então alimentei o sensor com o proprio 12V da placa (depois do 7812) GND ao GND dá placa e o output direto na entrada AD do pic Pino A0.

 

 

@vtrx Amigo,  o pot era de 1k e variando ele o valor na tela variava conforme a tensão ia mudando.... ainda não tentei interfacear com um transistor, até porque como eu disse ja foram feitas varias placas..

 

Mas o estranho é que usando a mesma programação e o mesmo circuito ( pequenas mudanças era o prototipo) e usando um sensor com saida de 4~20mAh com um resistor de 200 ohms pra fazer a leitura em volts dava certo....

 

Att.

 

Rodrigo

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo como ultimo recurso,caso não chegue a nenhuma conclusão,você poderia postar alguns trechos da sua listagem ASM que o CCS gerou para vermos como o CCS gerou a sequencia de códigos,quem sabe não da para melhor alguma coisa.

Geralmente sempre da para melhor o código final ainda mais gerado pelo CCS.

Link para o comentário
Compartilhar em outros sites

@vtrx fiz um teste agora e parece que deu certo...

 

retirei a instrução Set_Tris_A(0b000001)   que configurava o pino A0 como entrada(canal AD) e estou obtendo leituras...

 

veja se estou certo:

 

antes da alteração (estou sem o compressor) então estou soprando no sensor, não obtive nenhuma leitura.

 

após retirar esta instrução ao soprar no sensor leio no multimetro 0,3 volts e na tela de lcd leio 0,12 "bar"

 

usando a regra de 3:

 

onde 5v = 2.00 bar (tensão maxima = pressão maxima)

para 0,3v==X

 

5x=0,6  >>>>> x=0,6/5   >>>>x=0,12  que é o que estou lendo no lcd

 

Procede isso @vtrx   no momento nao consigo por mais pressão no sensor hehe

 

att.

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo se não me engano,para usar Set_Tris_A(0b000001) no CCS,é preciso declarar FASTIO.

Se o seu programa não precisa de desempenho ao utilizar os PORTs no CCS,não é preciso setar manualmente a direção dos PORTs.

Lógico que a programação deste modo fica pobre e mais difícil de sair do ambiente do CCS,fazendo você refazer todo o código quando for utilizar outro micro com outros compiladores e mais funções avançadas.

Link para o comentário
Compartilhar em outros sites

@vtrx, analisando o codigo percebi duas coisas... em relação ao portA (AN0)

 

como estou usando somente o pino A0 como analogico e ou outros como saidas digitas (acionamento de relês) achei que precisava setar a direção dos ports...

 

logo abaixo do comando set_tris_a eu dava um output_A(0b000000), para zerar o port e não iniciar nenhuma porta acionada, ocasionando o acionamento indesejado de algum relê....

 

mas percebi que retirando o comando output_a(0b000000) o problema ja se resolve mesmo mantendo o set_tris...

 

e nenhuma porta iniciou acionada!!

 

acho que resolveu... vou testar na maquina na hora do almoço...

 

att.

Link para o comentário
Compartilhar em outros sites

Quando você desejar colocar '1' lógico em alguns bits de um byte, use a lógica booleana OU, com '1' para os bits que deseja que mudem para '1' e '0' para os que não quer alterar.

De modo semelhante.

Quando você desejar colocar '0' lógico em alguns bits de um byte, use a lógica booleana E, com '0' para os bits que deseja que mudem para '0' e '1' para os que não quer alterar.

MOR_AL

Link para o comentário
Compartilhar em outros sites

@rodrigocirilo como citei,se não estiver definido #USE FAST_IO o compilador vai 'misturar' o código final gerando o TRIS por conta própria e só analisando o ASM gerado iríamos achar o ponto exato que isso ocorre para poder analisar o que esta ocorrendo,mas você chegou a uma conclusão,que ótimo.

Link para o comentário
Compartilhar em outros sites

@vtrx então, não cheguei a conclusão nao, por enquanto só consegui sanar esse problema...(eu acho) hehe...

 

mas diga-me como gerar o arquivo asm para os colegas analisarem... eu não tenho a mínima ideia de ASM.. sou absolutamente leigo...

 

Mas porque o fato de eu retirar o output_A(0b000000) no main ele começou a ler o sensor, analisando o asm dá pra saber...

 

posso colocar o comando novamente e compilar para quando o colega tiver um tempinho dar uma olhada..

 

de qualquer forma MUITO obrigado pelas respostas...

Link para o comentário
Compartilhar em outros sites

Não sei se consideraram que a impedância de saída do sensor pode estar acima da impedância de entrada do canal de conversão A/D.

Veja, que o pino de input analógico do PIC se bem me lembro possui uma impedância de entrada de 2.5KOhms, veja então que se a saída do teu sensor tiver uma impedância maior que ela  a mesma vai se comportar como um divisor de tensão, onde quase todo sinal não é transferido a entrada analógica do PIC.

Para verificar se o problema é esse e previnir caso não seja, sugiro que coloque um seguidor de tensão entre a saída do sensor e a entrada do PIC, tal circuito exige apenas um amplificador operacional e mais nada, modelos de uso de geral como LM358 e CA3140 servem perfeitamente para tal, aqui vai uma foto do circuito:

175px-Unity_gain_buffer_amp.svg.png

 

 

Vin é onde deve ser conectada a saída do teu sensor e Vout é conectado a entrada do PIC.

Faça o teste e veja se resolve sim.

Abs.

 

Link para o comentário
Compartilhar em outros sites

 

 

Bom pessoal, seguinte, agora estou muito sem tempo... mas como eu disse acima... retirei o comando output_A(0b000000) para zerar o port, e resolveu o problema!!

@rodrigocirilo,

Isso faz sentido, veja que com comando acima (se bem me lembro como funciona no CCS) voce coloca o terminal do PIC como saída e ele escreve 0 no drive e o fet interno (conectados em push-pull) low side do PIC é colocado em zero, é equivalente com "curto circuitar" a saída do teu sensor de pressão com o 0[V] daí a tensão dele cair a quase zero, e retornar ao valor correto quando voce desconecta do PIC.

Se resolveu, pois bem.

Abs,.

 

Link para o comentário
Compartilhar em outros sites

  • 2 anos depois...
Em 27/06/2014 às 10:46, Felipe Electronic disse:

Não sei se consideraram que a impedância de saída do sensor pode estar acima da impedância de entrada do canal de conversão A/D.

Veja, que o pino de input analógico do PIC se bem me lembro possui uma impedância de entrada de 2.5KOhms, veja então que se a saída do teu sensor tiver uma impedância maior que ela  a mesma vai se comportar como um divisor de tensão, onde quase todo sinal não é transferido a entrada analógica do PIC.

Para verificar se o problema é esse e previnir caso não seja, sugiro que coloque um seguidor de tensão entre a saída do sensor e a entrada do PIC, tal circuito exige apenas um amplificador operacional e mais nada, modelos de uso de geral como LM358 e CA3140 servem perfeitamente para tal, aqui vai uma foto do circuito:

175px-Unity_gain_buffer_amp.svg.png

 

 

Vin é onde deve ser conectada a saída do teu sensor e Vout é conectado a entrada do PIC.

Faça o teste e veja se resolve sim.

Abs.

 

Atente para solução do amigo Felipe.

O sensor disponibiliza um sinal de tensão, mas a potencia/corrente é baixa. Acredito que a impedância na entrada AD do pic seja 2K5. por isso ocorre a queda do sinal. Um LM358/258/158 pode resolver.

175px-Unity_gain_buffer_amp.svg.png

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber 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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!