problema ao enviar valor analogico

Software e Hardware para uC PIC

Moderadores: andre_luis, 51, guest2003, Renie

problema ao enviar valor analogico

Mensagempor VMS » 14 Jul 2013 07:22

bom dia pessoal, seguinte
estou usando um microcontralador Pic16f877A para receber uma valor analogico de 0 a 10v e enviar pela porta serial
Código: Selecionar todos
printf("%f",valor_float);


Tenho uma aplicação delphi usando o componente ComPort para receber esse valor
o problema é que esse valor está vindo quebrado, por exemplo
se o valor for 2.22, ele envia 2 e depois envia .22

Não sei se o problema é no programa do Pic ou na aplicação Delphi, alguem pode me dar uma ajuda?

desde ja agradeço.
VMS
Bit
 
Mensagens: 11
Registrado em: 08 Out 2008 11:05

Re: problema ao enviar valor analogico

Mensagempor vtrx » 14 Jul 2013 09:19

Que eu saiba a serial envia bytes e voce deve montá-los.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: problema ao enviar valor analogico

Mensagempor andre_luis » 14 Jul 2013 10:07

VMS,


Um tiro no escuro :

Provavelmente o compilador pode estar fazendo a conversão para float durante a execução do printf.
Experimenta converter o valor para string primeiro, e depois então enviar o texto pela serial.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: problema ao enviar valor analogico

Mensagempor VMS » 14 Jul 2013 12:13

Que eu saiba a serial envia bytes e voce deve montá-los.


vtrx, voce poderia me explicar melhor como montar isso?
VMS
Bit
 
Mensagens: 11
Registrado em: 08 Out 2008 11:05

Re: problema ao enviar valor analogico

Mensagempor vtrx » 14 Jul 2013 12:55

Voce fez um teste usando um memo para ver quantos valores recebe?
Oque voce utilza para receber os bytes da serial,um memo ou uma variavel String?
Voce está capturando os bytes pelo 'ReceiveCallBack' do componente?
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: problema ao enviar valor analogico

Mensagempor VMS » 14 Jul 2013 13:09

Voce fez um teste usando um memo para ver quantos valores recebe?

sim ja fiz, supomos que o valor recebido seja 1.23
o memo receberá assim:
1.231.231.231.231.231.23
se eu usar quebra de linha, o memo receberá assim:
1
.23
1
.23
1
.23


Oque voce utilza para receber os bytes da serial,um memo ou uma variavel String?

uma variavel string

Voce está capturando os bytes pelo 'ReceiveCallBack' do componente?


no delphi eu recebo assim com o componente ComPort
Código: Selecionar todos
procedure TFPrincipal.ComPort1RxChar(Sender: TObject; Count: Integer);
var
  str : String;
begin
  ComPort1.ReadStr(str, Count);
end;


esse é o codigo que uso para obter o valor analogico e enviar pela serial no pic
Código: Selecionar todos
  //Lê o canal 0 - pino RA0.
  valor_float = read_adc();                 
  valor_float = (valor_float*10);
  valor_float = (valor_float/1023);
  printf("%f",valor_float);
VMS
Bit
 
Mensagens: 11
Registrado em: 08 Out 2008 11:05

Re: problema ao enviar valor analogico

Mensagempor vtrx » 14 Jul 2013 20:08

Qual o resultado da String:
Código: Selecionar todos
ComPort1.ReadStr(str, 2);

?
Talvez voce possa resolver no código no PIC:
Código: Selecionar todos
printf("%f",valor_float\n")


Ou usar a quebra da linha e juntar os dois,no Delphi.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: problema ao enviar valor analogico

Mensagempor VMS » 15 Jul 2013 12:29

Qual o resultado da String:

o resultado da string é um valor analogico de 0 a 10

Talvez voce possa resolver no código no PIC:


eu nao quero armazenar num memo, preciso armazenar em uma variavel, esses valores são enviado pelo pic a cada 500ms para minha aplicação delphi que gera um grafico em tempo real.

atualmente eu to fazendo isso, recebendo os valores que vem da serial, junto em uma variavel e consigo ter um valor float, mas eu queria saber se tem como eu enviar um valor tipo float sem que chegue quebrado na minha aplicação delphi.

como eu ja disse, se eu envio pelo pic o valor 2.34, na aplicação delphi chega primeiro 2 e depois chega .34
VMS
Bit
 
Mensagens: 11
Registrado em: 08 Out 2008 11:05

Re: problema ao enviar valor analogico

Mensagempor xultz » 15 Jul 2013 13:16

Eu até agora não entendi qual é o problema, se imprimir em ASC (caso do printf) o valor 2,34, você vai receber '2', depois '.', depois '3' e por fim '4'.
O que você gostaria que o circuito fizesse?
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Re: problema ao enviar valor analogico

Mensagempor andre_luis » 16 Jul 2013 08:16

xultz escreveu:...Eu até agora não entendi qual é o problema, se imprimir em ASC (caso do printf) o valor 2,34, você vai receber '2', depois '.', depois '3' e por fim '4'...


É parecido com o que também sugeri no tópico acima : Converter para Texto e somente depois enviar pela serial.

andre_teprom escreveu: Experimenta converter o valor para string primeiro, e depois então enviar o texto pela serial...



+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: problema ao enviar valor analogico

Mensagempor ze » 16 Jul 2013 12:06

se não tiver vergonha de sujar as mãos, não é + simples e eficiente enviar apenas os valores do ad?
Código: Selecionar todos
...
while(!TRMT);
TXREG=ADRESH;
while(!TRMT);
TXREG=ADRESL;
...
e deixar o pc fazer o trabalho sujo?
Avatar do usuário
ze
Dword
 
Mensagens: 1655
Registrado em: 05 Jun 2007 14:32

Re: problema ao enviar valor analogico

Mensagempor vtrx » 16 Jul 2013 15:27

e deixar o pc fazer o trabalho sujo?

Eu sempre deixo o PC fazer a pior parte...
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: problema ao enviar valor analogico

Mensagempor andre_luis » 16 Jul 2013 22:06

vtrx escreveu:...Eu sempre deixo o PC fazer a pior parte...


Mas se a função dessa saída do PIC para o PC for um Debug, a necessidade do casting para ASCII continua...


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Re: problema ao enviar valor analogico

Mensagempor vtrx » 16 Jul 2013 22:37

Qualquer que seja o envio para o PC,no Delphi/C++ etc, é fácil converter qualquer valor,eu mesmo costumava ler os bytes direto em hexa sem se importar se estava codificado em ASCII ou não.
Avatar do usuário
vtrx
Dword
 
Mensagens: 2239
Registrado em: 20 Abr 2008 21:01

Re: problema ao enviar valor analogico

Mensagempor andre_luis » 17 Jul 2013 09:04

Concordo contigo, mas apenas destaquei que essa alternativa talvez pudesse não atender ao problema original.


+++
"Por maior que seja o buraco em que você se encontra, relaxe, porque ainda não há terra em cima."
Avatar do usuário
andre_luis
Dword
 
Mensagens: 5447
Registrado em: 11 Out 2006 18:27
Localização: Brasil - RJ

Próximo

Voltar para PIC

Quem está online

Usuários navegando neste fórum: Google [Bot] e 1 visitante

x