Descrição do Protocolo Utilizado

Índice:

Introdução.
Descrição dos Bytes Enviados e Recebidos.
Outros registos (Bytes) utilizados no programa.

Introdução

Foi necessário criar um protocolo de comunicação entre os Power Line Modem de forma a que não existisse quaisquer perca de dados e se conseguisse endereçar apenas um dos Power Line Modem, assim como existir a possibilidade de apenas um servidor actuar os power line modem.

Assim, caso se pretenda actuar simultaneamente dois microcontroladores ( power line modems), bastam que estes tenham os mesmos endereços. Da mesma maneira caso se pretenda ter vários servidores a actuar simultaneamente os microcontroladores também estes devem ter os mesmos endereços.
Desta maneira, consegue-se distinguir o problema de termos, por exemplo, duas habitações adjacentes com este sistema, onde não deve existir qualquer interferência entre as habitações.

Como aplicação final, decidiu-se criar um sistema em que existe um ‘servidor’ que endereça um microcontrolador através da linha eléctrica, e que o ‘manda’ :

Activar (N.L.1) um Bit à escolha (Não só das portas, mas também de qualquer posição de memória).
Desactivar (N.L.0) um Bit à escolha (Não só das portas, mas também de qualquer posição de memória).
Enviar para uma porta pré-definida ( P1 neste caso ), um byte.

De notar que muito facilmente se consegue criar qualquer outra aplicação, visto o programa estar feito de maneira a redireccionar facilmente quaisquer outras instruções. Para isso existe uma depuração se o endereço enviado corresponde ao próprio endereço do microcontrolador.
O endereço de cada máquina corresponde a um endereço de 16 bits logo podendo existir virtualmente 2^16 = 65535 microcontroladores ligados a um só servidor. Além disso existe mais um nibble que varia com o valor duma porta do microcontrolador e que possibilita a alteração do endereço do microcontrolador pela simples comutação de um switch por exemplo.
A nível de depuração de erros, existe uma verificação de paridade, visto a linha eléctrica ser muito ruidosa logo ser provável que existam erros de transmissão.
Embora em aplicações como esta, devido à elevada possibilidade de ocorrerem erros de transmissão, fosse recomendável criar um, qualquer outro tipo de verificação de erros, (a verificação de paridade pode ser facilmente confundida quando existem, por exemplo, dois erros simultâneos na transmissão de um byte) optámos por não o implementar no nosso protocolo, visto existirem muitos endereços (2^20=1048576) disponíveis para a implementação de mais power line modems, logo consegue-se uma verificação de erros pois quando estes endereços não estão ocupados, existe uma muito boa percentagem de o erro de transmissão ser detectado.

Para explicação do protocolo propriamente dito, apresentamos a ordem dos bytes enviados e recebidos assim como a sua descrição.

Descrição dos bytes enviados e recebidos:

Esquema dos bytes enviados e recebidos:
Byte N.º De Para Valor
1 Servidor MicroControlador RX_PREAMBLE
2 Servidor MicroControlador RX_L_HEADER
3 Servidor MicroControlador RX_H_HEADER
4 Servidor MicroControlador RX_L_HOMEADD
5 Servidor MicroControlador RX_H_ADD
6 Servidor MicroControlador RX_CTRL
7 Servidor MicroControlador RX_SOURCEADD
8 Servidor MicroControlador RX_DESTADD
9 Servidor MicroControlador RX_MESSAGE
10 Servidor MicroControlador RX_DATA
11 Servidor MicroControlador RX_PARITY
12 MicroControlador Servidor TX_PREAMBLE
13 MicroControlador Servidor TX_L_HEADER
14 MicroControlador Servidor TX_H_HEADER
15 MicroControlador Servidor PARITY

RX_PREAMBLE e TX_PREAMBLE

Este byte é o primeiro byte recebido e enviado (Chamemos-lhe um “start byte”).Fica disponível para futuras implementações, caso seja preciso :

Aumentar o número de estações.
Fazer um qualquer outro tipo de ”Checksum Error” (melhor nível de depuração ).


No programa utilizado, é simplesmente enviado e recebido mas não existe qualquer tipo de depuração com outro valor pré-definido. No entanto foi incluído no programa de forma a, para uma futura implementação, não se tivesse de alterar todo o código fonte.
Envia-se neste programa o Byte ‘FFh’ para que os outros modems que possivelmente iriam transmitir passem a detectar a portadora na linha, logo esperam que esta fique disponível.

RX_L_HEADER e RX_H_HEADER

Estes dois bytes (o low e o high) enviados pelo servidor, representam a estação (microcontrolador) que se deseja endereçar. No microcontrolador, esse endereço está definido como duas Equates (LR_HEADER e HR_HEADER), e pode mesmo ser alterado quando o programa está em execução através da possibilidade de alteração de qualquer byte da memória.
Se não for igual ao endereço do microcontrolador, este sofre um pequeno reset a nível de software, em que fica no modo de espera outra vez, até ser ele, o endereçado.

RX_L_HOMEADD e RX_H_ADD

Estes dois bytes (o low e o high) enviados pelo servidor, representam o endereço do servidor que está a endereçar.
No microcontrolador, esse endereço está definido como duas Equates (L_HOMEADD e H_HOMEADD).
Se não for igual ao endereço do microcontrolador, este também sofre um pequeno reset a nível de software, em que fica no modo de espera outra vez, até reconhecer o servidor.
Nestes bytes decidimos fazer um controle de paridade, pois podem existir por exemplo dois servidores, cada um com vários microcontroladores, estes com endereços iguais.

RX_CTRL

Se o RX_CTRL.0 = 0 então verifica-se o que é que o servidor quer que o microcontrolador faça.
Se RX_CTRL Diferente de 0 então existe um RESET completo ... ( redefinição de todos os registos e restauro de todas as equates ...)

RX_SOURCEADD

É verificada a Paridade (Nova implementação em estudo.)

RX_DESTADD

Corresponde a mais um nibble no endereço do microcontrolador.
É comparada com a ADDRESS definida no inicio (através da P1 (Porta 1 do microcontrolador) - Para implementação de um Switch por ex. ).
Caso RX_DESTADD seja diferente de ADDRESS a flag de erro (ERROR.2) passa ao nível lógico 1 (um).
Também neste byte é verificada a paridade.

RX_MESSAGE e RX_DATA

Neste byte (RX_MESSAGE), está definido o que se quer que o microcontrolador faça. Os seus bits representam o seguinte :

Bit 0 -> Quando activo executa : setb RX_DATA ,e.g. Activa o bit cujo endereço é definido pelo RX_DATA.
Bit 1 -> Quando activo executa : clr RX_DATA ,e.g. Desactiva o bit cujo endereço é definido pelo RX_DATA.
Bit 2 -> Redireccionado no Programa . Reservado para futuras implementações.
Bit 3 -> Quando activo executa : mov P1,RX_DATA, e.g. Escreve na porta 1 o valor de RX_DATA
Bit 4 -> Não existe redireccionamento no programa. Reservado para futuras implementações.
Bit 5 -> Não existe redireccionamento no programa. Reservado para futuras implementações.
Bit 6 -> Não existe redireccionamento no programa. Reservado para futuras implementações.
Bit 7 -> Não existe redireccionamento no programa. Reservado para futuras implementações.

Se for um dos Bits não redireccionados que esteja activado, o Bit de Erro (ERROR.7) fica a 1.

RX_PARITY

Recebe o Byte de Paridade de forma a que se possa verificar se a transmissão foi correcta de forma a que, se necessária, exista uma retransmissão.

Os seus bits representam o seguinte:
Bit Deve ser igual ao: Contém a Paridade de :
RX_PARITY.0 PARITY.0 (=0) Não Implementado (=0)
RX_PARITY.1 PARITY.1 RX_DATA
RX_PARITY.2 PARITY.2 RX_MESSAGE
RX_PARITY.3 PARITY.3 RX_DESTADD
RX_PARITY.4 PARITY.4 RX_SOURCEADD
RX_PARITY.5 PARITY.5 RX_CTRL
RX_PARITY.6 PARITY.6 RX_H_HOMEADD
RX_PARITY.7 PARITY.7 RX_L_HOMEADD

Se a Paridade for diferente daquela que o servidor emitiu então a flag de erro (ERROR.3) fica com o nível lógico 1 (um).

TX_PREAMBLE

-> Ver RX_PREAMBLE .

TX_L_HEADER e TX_H_HEADER

Estes dois bytes ( o low e o high ) enviados pelo microcontrolador, representam o servidor que se deseja endereçar.
No microcontrolador, esse endereço está definido como duas equates (TX_L_HEADER e TX_H_HEADER.
O servidor pode então reconhecer que é ele o endereçado e receber então o resto do Acknoledge.

PARITY

Nesta altura o microcontrolador manda o byte de Paridade de forma a que o servidor reconheça que todos os bytes foram correctamente recebidos.
Para ver a que cada bit do byte de paridade corresponde, ver o byte RX_PARITY .

Outros Registos (Bytes) Utilizados no Programa.

ERROR

SER_DAT

Este byte contém o byte recebido pela interrupção serial (MOV SER_DAT,SBUF).

BACK
Back
UP
Up
FORWARD
Forward

BackTo front page Pages by Nuno Nunes.