Comunicacao com a serial

4 respostas
S

Eu to usando a biblioteca rxtx (que tem uma implementacao propria do java.comm).
Estou transmitindo informacao por um radio transmissor conectado à porta serial.
Já configurei a bios e a porta pelo gerenciador de dispositivos do windows e também pelo programa.
baudrate = 38400
parity = no
stop bit = 1
bits = 8

Preciso transmitir para um dispositivo, via radio, um vetor de caracteres.
Agora, segue o problema, o computador escreve no buffer o vetor, porem só envia para o dispositivo após desligar o RTS. E o dispositivo, quando começa a receber o vetor, está recebendo muito lixo (caracteres que nao foram enviados).

Eu fiz um algoritmo em C++ que funcionou normalmente… então creio que não seja do hardware, ou ruidos do ambiente.

4 Respostas

Hagar

Opa…

Eu já fiz exatamente isto que você descreveu aí, mas eu usei a API java.comm direto, no Windows XP e o módulo de rádio XBee da XStream.

Qual módulo de rádio você está usando?

Você disse que fez uma aplicação em C++… Quando esta aplicação estava rodando, você verificou o estado dos pinos de controle da serial (CTS, RTS, etc)? Quais eram? O estado destes pinos são os mesmos quando você roda a aplicação em Java?

Como você testa a recepção dos dados? Qual software usa?

Tenta colocar mais informações sobre essas coisas (código, esquemático, modelo do hardware usado, etc), se for possível.

Daí vamos trocando ideías…

Até.

S

Olh eu não entendo do hardware. Ele veio pronto pra mim, então não sei verificar o estado dos pinos da serial. Eu só recebi ums instruções pra configurar a porta serial no programa em C++ e fui tentar fazer em java.

O módulo de rádio que eu uso é o TR1000 da RFMonolithycs.

Para testar a recepção dos dados, eu envio do computador para o dispositivo, que usa um microcrontrolador MSP430 F169, através da ferramenta de debug do IAR Embedded Workbench (software usado para carregar o programa escrito no computador para o microcontrolador). A ferramenta de debug do IAR apresenta um terminal I/O, onde eu mando imprimir os elementos que foram recebidos pela serial.

oStream = new BufferedOutputStream(port.getOutputStream());

   port.setRTS(true);
   pathSize = cin.nextInt();
   System.out.println("Enviando trajetoria...");
   for(int i=0; i<99; i++)
   { 
     oStream.write((char)i/*(pathSize)*/);
     oStream.flush();
     System.out.println(i + " sent.");
   }
   pathSize = cin.nextInt();
   port.setRTS(false);

Acima é o código que faz o envio dos dados… Eu tirei toda aquelas declarac]ções devariáveis e configuração da porta.

P4OUT_bit.P4OUT_2 = 1;  // Nivel 1 em CTR0 (Recepcao Habilitada)

i=0;
do
{
  if(IFG1_bit.URXIFG0) // Verifica existencia de dados no buffer
  {
    trajetoria[i] = U0RXBUF; // transfere dado dobuffer para vetor
    i++;
  }
}while(i<60);

for(i=0; i<80; i++)
  printf("%d, ", trajetoria[i]);

Acima é o código que recebe os dados pela serial… é em C. As variáveis estranhas são os nomes dos registradores do microcontrolador.

Hagar

Se você não conhece o hardware as coisas ficam um pouco mais difíceis…
Eu dei a idéia de comparar o estado lógico da serial quando esta é comandada pelo programa em C++ e quando é comandada pelo Java porque, segundo o que você falou, o negócio funciona com o C++ e não com Java, certo? Isso pode ser algum pino de controle da serial que está entrando num estado lógico diferente e fazendo com que não funcione…

Assim, de cara, seria a primeira coisa que eu testaria.

Também tenha em mente que o erro pode estar em qualquer lugar… Firmware, software ou rádio… Ou ainda na integração de alguma dessas partes com outra… E por isso fica difícil prestar uma “ajuda remota” que preste. (Palavra de quem já se bateu muito com isso, hehe).

Aconselho o seguinte… Teste cada parte desse sistema em separado. Por exemplo: faça um teste de loopback (curto circuitar pino TX com RX) na serial do PC e teste seu programa java… Veja se ele envia e recebe normalmente os caracteres. Faça um programinha básico com o MSP pra testar a serial tb… Depois que estes dois passos derem certo, vc integra os dois (MSP e Java) e testa eles em conjunto… Pode parecer meio demorado, mas se você sair “caçando” o problema no escuro é pior.

Ah! Pra verificar os estados dos pinos da serial você pode executar o programa que controla a serial e medir com um osciloscópio ou um multímetro mesmo… Sabe usar algum deles?

Outra opção é encontar um software que verifique o estado desses pinos (eu nao sei o nome de nenhum pq sempre usei o multímetro…).

Vai postando o andamento da coisa ae…

[]s.

S

Na verdade o problema que tá dando é que no programa em C++ o dispositivo recebe o vetor dinamicamente (conforme envia ele recebe). No programa em java, o dispositivo so começa a receber depois de desligar o RTS.
E em java o vetor vem com muitos ruídos.

Mas agora o problema do dispositivo só receber o vetor após desligar a RTS ocorre no programa em C++ e em java está funcionando sem precisar desligar o RTS, mas ainda recbe ruidos quanso envio um vetor muito grande.

Isso é preocupante. C++ em dias pares… Java em dias impares.

Criado 4 de março de 2008
Ultima resposta 5 de mar. de 2008
Respostas 4
Participantes 2