Página 1 de 2
Controle remoto via 433MHz

Enviado:
24 Fev 2009 16:27
por lpagano
Pessoal,
Estou há muito tempo tentando fazer um simples controle remoto via módulos 433MHz para acionar uma carga logo após a recepção do sinal no RX.
É bem simples. Ele deve mandar um startbit de 5ms, depois 8 bits do código (5ms cada bit) e por fim um stopbit de 8ms.
Só que até hoje não consegui obter sucesso nesse projetinho simples. Já tentei inclusive fazer a comunicação com fios antes de colocar módulos TX e RX de 433MHz mas não obtive nenhum progresso.
Alguém poderia dar uma ajuda de como implementar isso, já que não pretendo usar o Manchester e nem os encoders/decoders da Holtek? Vou fazer isso só com programação em PIC.
Nota: Estou trabalhando com o compilador MikroC.
Obrigado!

Enviado:
24 Fev 2009 16:35
por msamsoniuk
use o hardware de comunicacao assincrona (UART) do seu PIC para fazer isso. se vc nao tiver UART disponivel, precisa emular, mas eh meio complexo. eu fiz no HC908 usando um timer de 9600Hz e uma pequena maquina de estado com a sequencia que vc descreveu:
http://framework.sourceforge.net/hc908s ... ft_shell.c
no seu caso, parece que vc usa stop bit fracional, que muitas UARTs suportam. mas se nao for o caso no PIC, acho que definindo um timer de 1KHz vc tem referencia de tempo boa o suficiente para gerar essas cadencias que vc quer.

Enviado:
24 Fev 2009 17:31
por buiz
Olá Ipagano,
A pouco tempo atrás fiz um termometro utilizando módulos RX e Tx de 315Mhz.
Um Pic lia um sensor LM35 e mandava para outro Pic mostrar num Display LCD, foi apenas um teste, mas depois de muito sofrer e com a ajuda de um osciloscopio vi que o RX captava muitas frequencias pelo ar que acavam interferindo no envio do sinal do Pic.
Era bem simples, 01 Pic lia a temperatura e envia via printf para o outro, para resolver criei entre os 02 pics uma comunicação constante onde os dois estavam sempre conectados, quando eu ia enviar a temperatura mandava primeiro 0 para o pic receptor se preparar depois mandava via printf o temperatura, funcionou beleza! Tenho este projetinho até hoje com ideia de utilizar este recurso para futuros projetos, fiz um teste em campo aberto e passou dos 100 metros a comunicação entre os 02 pics via RF.
Não sei se ajudei em alguma coisa mas podemos trocar uma ideia para chegar na solução do seu problema, Ok
Um abraço Buiz.

Enviado:
24 Fev 2009 17:39
por buiz
Outro detalhe, tente utilizar uma velocidade de comunicação menor tipo 600 ou 1200 bps.
Fica bem mais estavel via RF a comunicação entre os 02 pics.
Inté!

Enviado:
25 Fev 2009 00:08
por Djalma Toledo Rodrigues
Mas, se é bem simples para que Uart ?

Enviado:
25 Fev 2009 10:09
por xultz
Marcelo, usar estes módulos com USART é pepino porque quando pára de transmitir, o receiver joga o ganho do AGC nas alturas e o micro recebe uma porrada de ruídos, e a porta USART se confunde toda. Se ficar transmetendo sem parar, funciona, mas se transmitir só quando necessário, dá pau. Modulação PWM ainda é uma das melhores soluções prá usar esses modulinhos de RF.

Enviado:
25 Fev 2009 17:30
por msamsoniuk
nao vamos complicar xultz, como ele mesmo disse, eh bem simples. ele quer um start bit de 5ms, um codigo de 8 bits com 5ms por bit e por fim um stop bit de 8 ms. isso eh simplesmente o padrao de bits de uma UART com stop bit fracionario e ele consegue gerar e detectar isso com GPIO a partir de um timer de 1KHz na boa. como ele disse tambem, nao conseguiu testar isso com fios no tx e rx, entao acho que o primeiro passo eh ele estabelecer essa conexao com fios, depois ele ve o que acontece com o modulo...
por sinal, nao entendi pq vc sugeriu pwm... estes modulos nao sao com interface digital e fazem fsk direto ?

Enviado:
25 Fev 2009 21:33
por lpagano
Pessoal,
Obrigado pelas respostas, mas só uma correção: os meus bits de dados têm 3ms cada e não 5ms como dito anteriormente.
No caso do USART eu não posso usar também pois os PICs que utilizo nesse projeto são o 12F629 (que não possui módulo USART interno).
Valeu!

Enviado:
26 Fev 2009 08:45
por xultz
Marcelo, estes módulos não trabalham com FSK, são ASK (com shift de 100%), ou seja, quando o bit nele é 1 ele manda 433,92MHz (quando calibrado, porque o trimmer geralmente é vagabundo e ele tende a escorregar alguns MHz dependendo da fase da lua, da cotação do dólar e do humor do usuário. O recepetor tende a variar um pouco mais), e quando o bit é zero ele não manda nada. Do lado do receptor, quando ele pega a portadora de 433,92MHz, ele manda bit 1, quando não pega nada (logo em seguida a pegar um bit 1) ele manda bit 0.
O pepino é se ficar tipo meio segundo ou mais sem pegar portadora. O AGC do receptor começa a subir, subir, e aí qualquer interferência de qualquer nave alienígena passando perto já começa a jogar ruído na saída, e um segundo depois a saída tá que é uma ruideira só. Imagine essa ruideira entrando numa USART, dá confusão na certa.
Por este motivo, quase todo mundo modula os bits em PWM, porque você verifica o comprimento do bit, se estiver muito fora, você consegue discernir que é ruído. É bem comum ver gente que tenta ligar duas seriais (até mesmo de dois computadores) e a comunincação funcionar enquanto estão trocando bytes sem parar. Quando cessa a comunicação, os dois computadores começam a receber caracteres do éter...

Enviado:
26 Fev 2009 10:54
por msamsoniuk
nao seria soh usar uma metodologia de deteccao e correcao de erros? habilitar a paridade na UART jah filtraria 50% dos caracteres aleatorios! orientar a frame e adicionar checksum resolveria o resto. e ainda eh possivel usar tecnicas melhores para nao perder frames com erros... tem uma infinidade de tecnicas:
http://en.wikipedia.org/wiki/Error_correction

Enviado:
26 Fev 2009 11:32
por polesapart
Ipagano,
Tua UART/USART por um acaso opera em modo IrDA? Os módulos infra-vermelho pra IrDA tem praticamente as mesmas propriedades dos receptores/transmissores de rf (não confundir com os módulos IR usados em controle-remoto, os receptores destes usam uma portadora de 30 e poucos khz e já fazem a demodulação pra você).
O modo IrDA basicamente usa codificação por largura de pulso, e o que tenho ouvido a respeito é que o pessoal anda é metendo ao invés de infravermelho, um tx (e na outra ponta um rx) de rf desses comuns. Do ponto de vista do software, a UART continua operando exatamente da mesma forma, basta habilitar o modo IrDA e ela já codifica o bitstream de acordo (talvez até já faça um preâmbulo e tudo mais), no lado receptor você faz a mesma coisa.
Marcelo, sobre usar correção de erro, é uma boa, mas em cima da modulação adequada: o problema não é só não confundir o ruído com dados válidos, mas também conseguir pegar os dados válidos e nesses receptores nojentos em ambiente com relação sinal/ruído complicadas, é difícil filtrar o que é ruído e o que é sinal. Com a largura de pulso dá pra fazer certas brincadeiras, por exemplo, você manda como um preâmbulo uma cadeia PWM com duty cycle conhecido (50-50, 25-75, etc) e duração conhecida, isto ajuda o AGC a se achar e também te dá uma base de tempo pra calibrar a recepção dos próximos pulsos. Desta forma quando você recebe pulsos muito estreitos ou fora do "clock" você ignora, e em alguns casos consegue extrair o bitstream correto mesmo quando tem algum ruído já na saída digital do receptor.
Em cima disto dá pra botar hamming-code ou o que a imaginação ajudar em termos de detecção e/ou correção de erros. Só não vale dizer pro cara implementar reed-solomon num PIC


Enviado:
26 Fev 2009 13:43
por polesapart
Ah, outra coisa, tou brincando aqui com estes caras:
http://www.telecontrolli.com/pdf/transceivers/RXQ2.pdf
Só não gostei do preço.

Enviado:
26 Fev 2009 22:29
por lpagano
Então, outro dia eu botei esses receptores 433MHz no osciloscópio e a saída era muito boa, sem ruídos ou outras coisas. Fiz até mesmo um teste com o controle remoto do alarme do meu carro e recebeu tudo legalzinho.

Enviado:
27 Fev 2009 09:05
por otavio luiz
Fazer um controle assim na verdade é bem facil mesmo, se voce mandar um start bit de uns 5ms voce manda o dado num intervalo de 1ms, se o bit por 1 então voce mantem a saida em 0 por 1/3 do periodo (1ms da 333us) o tempo restante 2/3 (666us)mantem em 0, voce envia os bits um a um se for oito bits manda os 8 se for 16 manda todos, depois manda de novo o start bit e começa tudo de novo, faça isso por umas 20 vezes pelo menos, no receptor voce vai lendo o que vai chegando se coincidir pelo menos dois frames destes voce compara com o valor ou código pré determinado e faz o que voce quiser, ascender um led, uma lampada ou esplodir uma bomba e etc. Essa é a tão falada modulação PWM.

Enviado:
27 Fev 2009 17:11
por lpagano
otavio,
Foi baseado nisso que eu "tentei" fazer, só que não sei o porquê que não deu certo.
Mas vou ver no que vai dar. Acho que até semana que vem não vou fazer nada pois estou em tratamento médico, mas depois eu tento novamente com suas sugestões.
Valeu!