Ir ao conteúdo
  • Cadastre-se

Transmitir e Receber dados RF433 utilizando codificação Manchester (PIC 16F)


Posts recomendados

Olá amigos,

Estou trabalhando num transmissor e receptor RF 433 + PIC 16F628A e gostaria de saber se alguém pode me ajudar com a parte do código.

Preciso saber como programar o PIC para enviar e receber os comandos utilizando o protocolo Manchester. Alguém tem algum exemplo no compilador CCS.

O protocoloco SIRC da sony eu sei como enviar e receber os dados mas o Manchester eu nunca utilizei. A parte de transmissão parece se assemelhar ao SIRC o problema é como decodificar os bits, por que os 0s e 1s são identificados de acordo com a borda de transição e não de acordo com o período como é o caso do SIRC.

Link para o comentário
Compartilhar em outros sites

O código Manchester é caracterizado por SEMPRE haver transição no meio do bit de dado.

Para que uma sequência contínua de bits (como um byte, por exemplo) possa ser concatenada, entre cada bit de dado PODE haver uma transição ou não.

Com isso...

1 - A taxa de dados cai para a metade, já que cada bit de dado possui dois níveis.

2 - Não precisa de cristais nos microcontroladores (uC) para decodificar os dados , uma vez que neste código a informação do clock se encontra incluída no dado.

3 - Há semelhança com os códigos Biphase Mark e Biphase Space.

 

Certa ocasião eu fiz o código com a seguinte regra. Sempre há transição no meio do bit de dado. Se o bit for zero, então o código é 10, se o bit for 1, então o código é 01. Com isso eu espero pela transição e logo a seguir leio o valor do bit.

Mas atenção para identificar a transição no meio do bit de dado e não a transição entre dados, que PODE ou não haver.

Segue um fluxograma, em pseudo código, que transmite um byte.

 

Quando se gira o Byte para a esquerda, o valor do bit que aparece ao final desta função corresponde ao valor de BIT.

Saída é o nome do pino do uC que vai exteriorizar o dado.

N_Pulsos é um registro que será usado para contar 8 bits de dados.

TempoMeioBit é um gerador de tempo para durar meio bit de dado. Pode ser gerado por atraso (duração de instruções do uC) ou por um timer interno do uC.

MOR_AL

post-683989-0-44750300-1429976894_thumb.

Link para o comentário
Compartilhar em outros sites

Obrigado pela contribuição,
 
Mas eu gostaria de implementar isso em termos práticos.
Algum exemplo em C (compilador CCS)?
 
Quando eu usei o código SIRC para fazer um Controle Remoto eu tinha que fazer o seguinte no transmissor:
 
 

/*------ ENVIO START --------*/   output_high(pin_B0); delay_us(2400); output_low(pin_B0); delay_us(600); /*------Transmite 1--------*/      if (dado) {                      //Verifica se é 0 ou 1.    output_low(pin_B0);   delay_us(1200);   output_high(pin_B0);   delay_us(600); /*------Transmite 0--------*/      if (dado) {                      //Verifica se é 0 ou 1.    output_low(pin_B0);   delay_us(600);   output_high(pin_B0);   delay_us(600);

E no receptor eu usava o pino de Interrupção pra receber e decodificar, medindo o período de cada dado recebido, assim conseguia identificar o que era um bit de START, um 0 ou um 1.

 

Agora no Manchester como fazer essa codificação e decodificação?

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

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

×
×
  • Criar novo...