Página 1 de 1

Programa de Conversão A/D

MensagemEnviado: 22 Fev 2008 08:49
por Leomatias
Bom dia a todos!!!
Implementei um programa que converte a leitura do canal AD do pic18f1320, utilizando o Mikro Basic. O Código segue abaixo:

program Conversor_AD

dim v_ad_lcd as string[5]
dim v_ad as word

main:
trisb=0
trisa=%11111111
adcon1=%011111110
lcd_init(portb)
lcd_config(portb,3,2,1,0,portb,6,5,4)
lcd_cmd(lcd_cursor_off)
loop:lcd_out(1,1," Valor do AD")


v_ad = Adc_Read(0)
v_ad = ((v_ad * 49)/10000)
WordToStr(v_ad,v_ad_lcd)
strcat(v_ad_lcd," Volts")
Lcd_Out(2,1, v_ad_lcd)
delay_us(1000)
goto loop
end.


-> Mas, a leitura no LCd é de 1 em 1 volts, de 0 a 5 volts. Gostaria de saber se seria possível implementar um software que mostrasse passo a passo os volts. Consegui fazer vizualizar passo a passo os valores em bits, mas tentei outras fórmulas e não tive êxito quanto a mostrar o valor gradativo em volts, a cada cariacão de 4,9 mV que corresponde a cada bit.
-> Percebi tbm que após um tempo ligado, o display fica instável piscando e mostrando outros caracteres estranhos... será que pode ser minhas conexões ou o trimpot que estou usando. Montei tudo numa board, seria este tbm um alvo de mal contatos.


Pessoal, desde já agradeco a atencão de vcs. Olhem para mim o meu código, vejam se existem erros e corrijam-me se possível. Se alguém tiver alguma suspeita do que pode ser esta instabilidade no LCD, por favor me avisem, pode ser software tbm.

MensagemEnviado: 22 Fev 2008 09:14
por fabim
bom no pascal fica assim.

A : word;
B : real;
c : string[5];

begin

while true do
begin
A := adc_read(X);
B := A*(5000.00 / 1023);
A := B;
wordToStr(a,c);
lcd_out(1,1,c);
end;
end;

MensagemEnviado: 22 Fev 2008 11:46
por Sergio38br
Na leitura vc pode ter variação de +/- 1 bit então o ultimos numeros podem variar, mesmo não mexendo no trimpot

Re: Programa de Conversão A/D

MensagemEnviado: 22 Fev 2008 14:00
por Leomatias
Olá pessoal, boa tarde para vcs. Desde já obrigado pelas mensagens e tira-dúvidas.

Implementei vários exemplos do AD ontem. A variacão em bits ocorre perfeitamente. Quando converto para volts não fica legal, mostra números estranhos. Consegui um resultado bom convertendo e mostrando o valor da tensão no LCd com variacão de 1 em 1 volt, de 0 a 5 volts.

Mas, após um tempo ligado, o LCD comeca a oscilar números e caracteres estranhos no visor, piscando sem parar.
O que pode ser? Meu pic 18f1320 que está com problemas? Ligacão de pornt-o-board que geralmente são problemáticas para microcontroladores? Fios, mal contatos? Fonte, aquecimento?
Por favor,se alguém já se deparou com tais problemas me mostreum "uma luz no fim do túnel", desde já obrigado e irei continuar tentanto.

MensagemEnviado: 22 Fev 2008 14:07
por fabim
testinho
coloque uma var pra old_value.

Só entre na rotina de conversão e escrita, se o novo valor for diferente do old_value..

Comigo resolveu

Fabim

MensagemEnviado: 22 Fev 2008 17:41
por Leomatias
Desculpe Fabim, não entendi muito o seu raciocínio.

MensagemEnviado: 22 Fev 2008 17:45
por fabim
old_value := 0;

begin

while true do
begin
new_value := adc_read;

If (new_value <> old value) then
begin
old_value := new_value
...
...
...
...
end;

end;

assim voce não fica mandando dados feito louco para o display, só manda se realmente o valor lido for diferente do que esta escrito nele.

Fabim

MensagemEnviado: 22 Fev 2008 18:51
por lopesjm
Olá Leomatias,

Isso está parecendo ruído no seu +5V !.

Coloque um capacitor de uns 10 microfaraday entre o +5 e o GND, perto do pic.

sds
Jorge