Página 1 de 1

Ruído atrapalhando Serial por Software

MensagemEnviado: 07 Abr 2014 23:49
por ÁgioFelipe
Amigos, estou usando o PIC18F4550 com 2 seriais, 1 por hardware e outra por software. Estou utilizando as funções do C18 nas duas seriais.
O problema está na espera pelo dado que é basicamente um teste se o pino RX está em nivel lógico baixo, que seria o start bit vejam:

Código: Selecionar todos
       if(!PORTBbits.RB5)
      {
         dado_rx2 = Recebe485_2();
      }

char Recebe485_2(void)
{
   //..................Inicio de uma transmissão.........................
    dado_rx=getcUART();




Um ruído causa uma chamada da função Recebe485_2 e uma entrada em getcUART, daí ele fica preso nessa função aguardando um dado que nunca chega.
Já tentei colocar um delay no inicio da função mas nao funcionou, acabou atrapalhando a recepção.

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 08 Abr 2014 05:39
por andre_luis
Se o problema está no ambito do hardware, acredito que qualquer tentativa de minimizar o efeito por firmware será uma solução de contorno. Estou entendendo corretamente, ou é algo diferente disso ?

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 08 Abr 2014 08:51
por ÁgioFelipe
É isso mesmo, mas tb já tentei colocar capacitores no pino RX e não funcionou.

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 08 Abr 2014 10:56
por cfreund
Tente postar essa parte do circuito.

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 08 Abr 2014 12:00
por ze2
voce pode tentar p.ex. medir meiabocamente se o pino fica certo tempo em no nível 0 por x tempo. Se menos, é ruído e ignora.
Código: Selecionar todos
char dl=0;
  if(!PORTBbits.RB5)
      {
      while ((!PORTBbits.RB5) && (dl++<20)); //um timeout pra não ficar preso
   if (dl>5) dado_rx2 = Recebe485_2(); //Se menos, é ruído e ignora.
      }

Coloque um timeout semelhante na função Recebe485_2()

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 08 Abr 2014 14:54
por edsont
Será que um resistor de terminação não resolveria o problema? O resistor de terminação normalmente é para evitar reflexão. Com impedância alta o circuito pode ficar muito sensível a interferências. O resistor aqui seria para absorver estas interferências.

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 08 Abr 2014 21:33
por andre_luis
Felipe,


Conforme sugerido pelo ze, o que você precisa fazer é de certo modo, um debouncing para a leitura do pino de entrada. Observe que mesmo os módulos de UART de alguns microcontroladores, somente consideram válido a leitura de um bit se houver 3 leituras consecutivas confirmando o mesmo valor.

De qualquer modo, você também precisa inserir um controle de timeout na sua rotina, para garantir que se receber um ruido, após certo tempo a rotina irá encerrar o recebimento.


+++

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 09 Abr 2014 15:11
por ÁgioFelipe
Pessoal, obrigado pelas contribuições, vou tentar cada uma e vou postando os resultados.

Re: Ruído atrapalhando Serial por Software

MensagemEnviado: 14 Abr 2014 11:38
por ÁgioFelipe
Por hora resolvi fazer um protocolo com respostas para confirmação do recebimento do dado, vamos ver se funciona.