Ir ao conteúdo
  • Cadastre-se
ronyfreytas

RS232 sem fio

Recommended Posts

Amigos, estou tentando fazer alguns acionamentos por controle remoto, estou usando dois pics, um 12f683 e um 16f628A, estou usando comunicação rs 232.

Fiz um código simples de liga desliga de led, quando eu coloco a saida de um pic na entrada do outro devidamente configurados, por fio funciona, porém quando eu uso aqueles transmissores de rf 433, ele funciona muito mal, só quando quer, já tentei mudar frequencia de clock, baud de transferencia, e nada.

Segue o código, mas o problema e na transmissão sem fio, agradeço a ajuda dos amigos. (Compilador ccs compiler).

 

 

/////////////////////////////////////////////////////

TRANSMISSOR

//////////////////////////////////////////////////////////
                                        
#include < 16f628a.h >                                                                                                
#use rs232(baud=9600,parity=N,xmit=PIN_B4,rcv=PIN_B1,bits=8)
                                                                                  
void main()
                               
{

output_high(pin_a0);

 while(true)                                // loop infinito
 {
  
 
if (input(pin_a2)) {  
   delay_ms(10);
   putc ('j');  // envia o caractere "j"
   output_low(pin_a0); 
   
   }
   
   if (input(pin_a3))

    {  
   delay_ms(10);
   putc ('g');  // envia o caractere "g"
   output_high(pin_a0);
   }
}
}

 

 

//////////////////////////////////////////

RECEPTOR

/////////////////////////////////////////

 

#include < 12f683.h >  

#fuses intrc_io, nowdt, nomclr, put                                            
#use delay(clock=4000000)
#use rs232(baud=9600,parity=N,xmit=PIN_A2,rcv=PIN_A4,bits=8)                                                                                 
char dado = 0;                                  

void main()                                            
{
 while(true)                                      
 {
  dado = getc();                               

  if (dado == 'j')  output_low(pin_a5);   // se "dado" for "r"  desliga a3
  if (dado == 'g') output_high(pin_a5);  // se "dado" for "g"  desliga a1



 }                                                  
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ronyfreytas,

Baixe o baud rate para 300 ou até menos. Deve melhorar muito

Paulo

É isso aí!

A taxa desses canais de comunicação é baixa.

Estude as informações do sítio

http://www.romanblack.com/RF/cheapRFmodules.htm

Lá tem testes e explicações que você apreciaria.

MOR_AL

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ronyfreytas,

Baixe o baud rate para 300 ou até menos. Deve melhorar muito

Paulo

Meus amigos, o baud rate já coloquei até 110, o que vou tentar é colocar o capacitor de tântalo do vcc ao gnd como ensina no link que o amigo me enviou, vou testar e falo depois, aproveitando, sobre o código, tem uma maneira de ser feito essa transmissão, no caso somente de uma letra, poderia eu fazer diferente, conseguindo assim uma maior garantia de não ocorrer um acionamento indesejado, pois farei mais de uma placa de recepção com um mesmo controle, obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ronyfreytas,

voce poderia dar uma incrementada nesse código, pois o receptor ajusta o AGC assim que recebe sinal, portanto seria interessante enviar um preâmbulo, tipo uma sequencia de bytes tipo "55 AA" , e logo depois manda um byte de início de transmissão, e logo depois os bytes reais da informação.

Na recepção, você fica aguardando receber o preambulo, e aguarda o byte sinalizador de início de transmissão, para pegar a seguir os dados válidos.

Desta maneira o AGC já deve ter se ajustado, e a qualidade do sinal recebido será maior.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Paulo, coloquei os capacitores do vcc ao gnd, baixei o baud rate para 110, mas mesmo assim não funciona direito, se algum dos amigos do fórum tiver mais alguma dica agradeço,  Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado Paulo, coloquei os capacitores do vcc ao gnd, baixei o baud rate para 110, mas mesmo assim não funciona direito, se algum dos amigos do fórum tiver mais alguma dica agradeço,  Obrigado.

Você chegou a ler, ou tentar entender as informações do sítio que lhe passei? Sei que está em inglês, mas dá para acompanhar apenas observando as figuras.

Uma delas mostra a necessidade de se enviar uma série de bits logo ANTES de se enviar os dados. Isso é necessário, porque o receptor, quando não há sinal de dados em sua antena, possui um ganho máximo. Com isso ele capta ruído indesejável e apresenta em sua saída. Isso é que causa o mal funcionamento de todo o sistema.

Comprei uns módulos daqueles mostrados no sítio que recomendei. A saída realmente apresenta ruídos.

Levantei parte do circuito e descobri que o receptor poderia ser menos sensível a ruídos.

Dê uma lida no tópico que criei.

http://forum.clubedohardware.com.br/topic/1104265-receptor-xingling-433mhz-do-ebay/

Lá mostro o problema e como eu fiz para melhorar a relação sinal/ruído.

Vale a pena!

MOR_AL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo MOR_AL, vi o link que me enviou, não tive problemas pra ler nem entender as informações, como escrevi acima, disse que coloquei os capacitores, mudei o baud rate para 1200, na verdade me expressei mal à respeito da minha necessidade de ajuda, só não tinha me atentado para seu arquivo estava hospedado no 4shared, (falha minha), agora abri o arquivo, entendi que você diminuiu o ganho do operacional, (se estiver enganado me corrija por favor), preciso incrementar um pouco meu código para fazer o que o amigo sugeriu logo acima, que seria enviar alguns arquivos (preâmbulo), se o amigo tiver uma ideia prática de como fazer isso no ccs compiler será de grande ajuda.

 

Obrigado.


Ah!!! , inclusive, MOR_AL,  muito bem feito seu arquivo sobre o receptor.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Meu amigo MOR_AL, vi o link que me enviou, não tive problemas pra ler nem entender as informações, como escrevi acima, disse que coloquei os capacitores, mudei o baud rate para 1200, na verdade me expressei mal à respeito da minha necessidade de ajuda, só não tinha me atentado para seu arquivo estava hospedado no 4shared, (falha minha), agora abri o arquivo, entendi que você diminuiu o ganho do operacional, (se estiver enganado me corrija por favor) (Apenas que o operacional está funcionando como um comparador), preciso incrementar um pouco meu código para fazer o que o amigo sugeriu logo acima, que seria enviar alguns arquivos (preâmbulo), se o amigo tiver uma ideia prática de como fazer isso no ccs compiler será de grande ajuda.

 

Obrigado.

Ah!!! , inclusive, MOR_AL,  muito bem feito seu arquivo sobre o receptor.

Ainda estou estudando esse compilador (já há alguns anos). Ora paro, ora continuo!

Mas acho que os dois PICs que você mencionou possuem hardware para comunicação serial.

Então envie como preâmbulo alguns bytes.

O sítio que lhe informei contém o que o RB fez. Inclusive, ao final ele mostra o programa do transmissor e do receptor.

Certa ocasião projetei a parte de HF do receptor para 433MHz.

Transmiti um trem de pulsos de onda quadrada, para ver com quantos ciclos o receptor ajustava o ponto de operação.

Segue a foto.

Circuito_14_02_2011eee_zpsb4d5bab9.jpg

 

No caso do meu projeto, nota-se que com três ciclos a tensão do receptor se estabiliza.

Como certamente você não está usando o meu circuito, sugiro que inicie enviando um byte 0xAA (10101010) como preâmbulo antes de enviar o dado. Provavelmente este byte não será recebido corretamente, mas o seguinte pode ser.

Caso ainda não funcione, envie dois bytes 0xAA para aumentar o tempo de estabilização do receptor.

MOR_AL

Compartilhar este post


Link para o post
Compartilhar em outros sites

@ronyfreytas,

Leia o artigo do Romanblack, tem uma dica sobre enviar alguns bytes (preambulo) e só depois enviar os dados que você quer.

Tem até exemplo de código ao final.

Eperimente enviar 3 bytes como preambulo, pode ser que os dois primeiros se percam, mas o terceiro voce vai receber direito. É a mesma técnica que o @MOR está te passando.

Paulo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×