Protocolo Serial do DPM


Protocolo de comunicação serial do DPM

(Dilbertian protocolo modificado)

Observação o nome do protocolo
O nome “Dilbertiano” vem da primeira versão do presente protocolo, Nós ligamos “IDP invertido Dilbertian protocolo” (2010), onde os zeros foram representados com uma célula “fechar” e com uma célula “grande” (“0” magro e “1” gordura – conforme a seguinte vinheta vem de “Dilbert” por Scott Adams – www.Dilbert.com).

Inglês

Italiano
dilbertian_one


Porque um novo protocolo ?

Theremino o sistema visa fornecer um simples sistema de Input-Output para PC, barato e fácil de usar. Para tornar mais fácil de usar a numeração automática são necessários e o reconhecimento de seus tipos, para simplificar e minimizar o custo das ligações é necessário para se comunicar em um fio só.

Há um protocolo semelhante, que tivemos que escrevê-lo. A versão atual reúne o melhor de muitos anos de pesquisa e experimentação.

Faça download deste documento em formato PDF:
Sistema de Theremino - DPM_Protocol_2015_ENG.pdf
Sistema de Theremino - DPM_Protocol_2015_ITA.pdf


Características

  • Comunicação serial bidirecional em um único fio.
  • Configuração automática.
  • Detecção automática de dispositivos conectados, de.
  • Número de dispositivos que variam de 1 em 200.
  • Número de bytes transmitidos e recebidos varia dependendo do tipo de dispositivo.
  • Velocidade de transmissão até 4 Megabits por segundo para transmitir uma grande quantidade de dados com cabos curtos.
  • Velocidade de transmissão até 100 Kilobits/segundo para cabos longos (até 10 km).
  • Alta eficiência de comunicação (De 10 em 20 vezes maior do que em lata).


Persianas elétricas

A transmissão ocorre em um único fio, Mas você precisa de uma referência de massa e uma tensão de alimentação, para onde os fios são normalmente três.

Qualquer dispositivo que ofereça suporte a DPM deve ter um conector de entrada (para o mestre) e um de saída para dispositivos a jusante (Escravos)

Os conectores são normalmente utilizados por 3 poli, com espaçamento de 2.54 mm.

Sobre a comunicação da cadeia deve ter um mestre (fornecimento de energia e tempo) e um número de dispositivos conectados em cascata (chamado de escravo).

É a tensão que o mestre fornece on-line 5 V, com a mesma tolerância e com a mesma corrente máxima de 5 V ou retirada do conector USB.

A corrente máxima que o mestre pode fornecer limita o número e tipo de dispositivos que podem ser conectados. Esta corrente, é normalmente 250 Mas, e pode ser aumentada até 500 Mas. Repassando excede a capacidade do USB e ele iria impor características incomuns para os conectores.

O número máximo de dispositivos conectáveis é limitado pelos seguintes factores:
– A corrente máxima que o “Mestre” pode fornecer.
– O número máximo de bytes que a linha leva no tempo de ciclo do arroz-transmissão.

Ambos os “Mestre” que o “Escravo” são conectados à linha com um resistor de amortecimento, Ele também atua como uma passa-baixa, proteção de rádio interferência e sobretensão. O valor deste resistor é normalmente de 33 em 330 Ohm


Formato de transmissão

Usando um formato de não-retorno-a-Zero (NRZ) padrão.

Formato padrão = 8, N, 1
– 1 comece pouco
– 8 bits de dados
– no-Parity
– 1 bit de parada


Níveis de linha de dados “Linha com.”

A linha de lado para subir de nível (3.3 V)
O sinal “1” é denotado por 3.3 V
O sinal “0” é denotado por 0 Vdilbertian two


Taxa de transferência e repetição vezes

Velocidade de transmissão
Usando velocidades baixas quando o comprimento, e assim a capacidade dos cabos de conexão, são elevados. Quando as distâncias são curtas e alta velocidade pode ser usada para se comunicar com um grande número de dispositivos (ou se comunicar com dispositivos que exigem um grande número de bytes) São estabelecidas nomeadas velocidades de “1” (1 k bits/seg) até “12” (4 Mega bits por segundo)

Número máximo de bytes
Dependendo da taxa de baud, o número máximo de bytes que pode ser transmitido está listado na tabela a seguir.


Vezes, distâncias e o número de bytes

Velocidade
pouco tempo
pouco
para
segundo
Bytes
cada
15MS
Bytes cada
30MS
Distância máxima
Capacidade máxima
Escravos
Max
número
1
1 MS
1K
1
3
10 km
1 UF
3
2
500 nos
2K
3
6
5 km
500 NF
6
3
200 nos
5K
4
8
2 km
200 NF
15
4
100 nos
10K
15
30
1 km
100 NF
30
5
50 nos
20K
30
60
500 m
50 NF
60
6
20 nos
50K
40
80
200 m
20 NF
150
7
10 nos
100K
150
300
100 m
10 NF
160
8
5 nos
200K
300
600
50 m
5 NF
80
9
2 nos
500K
400
800
20 m
2 NF
32
10
1 nos
1M
1500
3000
10 m
1 NF
16
11
500 NS
2M
3000
6000
5 m
500 PF
8
12
250nS _
4M
6000
12000
2.5 m
250 PF
4

Todos os dispositivos devem implementar pelo menos a velocidade “7” que é considerada a velocidade padrão. Se você deseja definir uma velocidade diferente da “7” todos os dispositivos da cadeia devem apoiá-lo.

O “distância máxima” depende das características dos cabos, os valores da tabela são calculados para um cabo RG58 de 50 ohms com capacidade de 100pF por metro.

Em baixas velocidades o número de “escravos” é limitada pelo número máximo de bytes que pode ser transmitido em 30 milissegundos. (cada escravo utiliza pelo menos um byte e você alega um repetição rápido o suficiente para fazer movimentos fluidos)

Em alta velocidade, o número de “escravos” é limitado pela capacidade máxima, cada “escravo” Adiciona uma capacidade de aproximadamente 40..60 PF e reduz a distância máxima de aproximadamente 50 cm.

A capacidade foi calculada com base 30pF por “escravo” Além de outros 20pF a um cabo de conexão de 20 cm e outros 10pF para ter em conta a resistência adicional devido a “interruptor bilateral” (total: 60PF)


Comprimento máximo do cabo de comunicação do que a fonte de corrente e a resistência por metro

Cabo tipo —>
Corrente máxima
( corrente de pico )
H1500/H1000/H500/H155/RG11
20 Mili ohms
ou menos
por metro
Rg58 /Rg59u/H155 /
Cabos de rede
sobre
50 Mili ohms
por metro
Rg59/RG6 /telefone trançado de fio /
Cabos de rede
sobre
100 Mili ohms
por metro
10 Mas 1 km 400 m 200 m
20 Mas 500 m 200 m 100 m
50 Mas 200 m 80 m 40 m
80 Mas 125 m 50 m 25 m
100 Mas 100 m 40 m 20 m
200 Mas 50 m 20 m 10 m
400 Mas 25 m 10 m 5 m
500 Mas 20 m 8 m 4 m
800 Mas 12.5 m 5 m 2.5 m
1 Em 10 m 4 m 2 m

No cálculo da distância, levamos em conta que a tensão cair no chão, Não ultrapasse 200 mV. A queda de tensão no cabo de alimentação, Não causando erros de transmissão, Também pode ser muito maior (o 5 V pode cair para baixo para 3.3 V sem criar problemas) No caso de cabos blindados no chão é a tela, que normalmente tem menos resistência do que o declarado, Então, a distância será maior.


Capacidade de cabo

Os valores de “comprimento máximo” indicado na tabela acima são válidos apenas para o cabo de ligação com uma capacidade de aprox. 100 PF por metro. A tabela a seguir mostra as correções a serem aplicadas para os cabos mais usados.

Cabo
Externo
diâmetro
( mm )
Impedância
( Ohm )
Capacidade
(PF/mt.)
Resistência
(milliohm
/ medidor de)
Corrector de comprimento Max
H1500
15
50
80
4
x 1.25
H1000
10.3
50
80
11
x 1.25
Rg213
10.3
50
100
H500
9.8
50
82
15
x 1.22
H155
5.8
50
82
32
x 1.22
Rg8
10
52
90
Rg11 (TV)
10.3
75
60
21
x 1.7
RG59 (TV)
6.15
75
67
159
x 1.5
RG6 _(TV satélite)
6.8
75
51
100
x 2.0
Rg56/irar(TV)
6.9
75
53
x 2.0
Rg59/U _(TV)
4.5
75
53
45
x 2.0
Rg58
5.2
50
100
53
Rg142
4.95
50
96
Rg174
2.8
50
100
Rg178
1.85
50
95
Rg179
2.55
75
64
x 1.5
RG187
2.7
75
65
x 1.5
Rg188
2.7
50
95
Rg196
1.9
50
93
Rg316
2.5
50
95
Cabo de rede
min 50
Max 130
min 60
Max 200
x 2.0
x 0.7
Cabo de áudio de PC
min 120
Max 300
min 500
Max 3000
x 0.8
x 0.5
Alertarão
cabo
min 60
Max 300
x 1.7
x 0.3
Fio de telefone trançado
50
100
x 2.0

Existem também os cabos de baixa capacidade (pouco usadas e difíceis de encontrar):

  • Rg62 – 93 Ohm – 44 PF/mt
  • RG71 – 93 Ohm – 44 PF/mt
  • Rg210 – 93 Ohm – 44 PF/mt
  • RG63 – 125 Ohm – 33PF/mt
  • RG114 – 185 Ohm – 27PF/mt

Medir a capacidade de um cabo desconhecido:

  • Preparar o perfeito esfola cabo blindado e mantendo o fio central isolado.
  • Medir entre escudo Central e exterior com um medidor ou medidor de capacitância.
  • Para melhorar a precisão de medição, usar cinco ou dez metros de cabo.
  • Divida o valor picofarad medido pelo número de metros de cabo.


Tipos de dispositivos

Os dispositivos são identificados com um número de 0 em 199 que identifica o seu "Tipo".
Na fase de reconhecimento e numeração cada dispositivo pode ser identificado com este "Type".

Actualmente, os dispositivos seguintes são definidos:

Tipo de dispositivo
Velocidade
min
velocidade máxima
Em fora boton
Poder
Nome
0
Especial “personalizadas” tipo
1
1
12
1
12 Mas
capacitivo Sensor
oi Qualidade
2
1
12
10
InOut Servo
3
1
12
12
InOut genérico
4
1
12
12
INOUT
5
6
Virtuais mestre Pinos
(primeira versão)
8
10
Virtuais mestre Pinos – V2
9 12 Virtuais mestre Pinos – V4
255 Desconhecido

O número máximo de dispositivos
O número máximo de dispositivos conectáveis ​​é limitada pela:
– o número máximo de bytes que pode ser transmitida, dependendo da velocidade seleccionado.
– a corrente máxima que o "master" pode fornecer (Normalmente 500 Mas)
– o número máximo de dispositivos suportados pelo protocolo que é 200 (De 0 em 199)


Tipi no pino

Os pinos são identificados com um número de 0 em 255 identificando seu "PinType".

SAÍDA tipos de pinos

saída Pin
Tipo
Nome
Mestre para o escravo
bytes
Slave a Master
bytes
0
NÃO UTILIZADO
0
0
1
DIG_OUT
1
0
2
PWM_8
1
0
3
PWM_16
2
0
4
SERVO_8
1
0
5
SERVO_16
2
0
6 STEPPER 4 0
7 PWM_FAST 5 0

ENTRADA tipos de pinos

Pin entrada
Tipo
Nome
Mestre para o escravo
bytes
Slave a Master
bytes
129
DIG_IN
0
1
130
DIG_IN_PU
0
1
131
ADC_8
0
1
132
ADC_16
0
2
133
CAP_8
0
1
134
CAP_16
0
2
135
RES_8
0
1
136
RES_16
0
2
140
CONTADOR
0
2
141
COUNTER_PU
0
2
142
FAST_COUNTER
0
2
143
FAST_COUNTER_PU
0
2
144
PERÍODO
0
4
145
PERIOD_PU
0
4
146
SLOW_PERIOD
0
4
147
SLOW_PERIOD_PU
0
4
150
USOUND_SENSOR
0
2
160
CAP_SENSOR
0
3
165
STEPPER_DIR
0
4
180
ENCODER_A
0
2
181
ENCODER_A_PU
0
2
182
ENCODER_B
0
0
183
ENCODER_B_PU
0
0
175
ADC_24
0
1
176
ADC_24_DIN
0
0
177
ADC_24_DOUT
0
0


As comunicações entre mestres e escravos (linha serial)

Primo byte tipo de transmissão transmissão receber
255 (*4) controle especial estendida
(para futura expansão)
1 bytes (extensão)
>>>>> consulte a tabela de comandos estendidos <<<<<
254 (*1) RecogStart
iniciar o reconhecimento
e numeração
1 bytes (Dados Número de bytes = 0)
1 bytes (CRC em Cmd / 0)
253 (*2) reco
Digite o número de série e solicitar o tipo
1 bytes (Dados Número de bytes = 1)
1 bytes (De 0 em 199)
1 bytes (CRC di Cmd / Nbytes / Tipo)
1 bytes ( tipo )
1 bytes ( CRC )
251 (*3) FastDataExchange
troca rápida de dados.
1 bytes (Dados Número de bytes = 0)
1 bytes (CRC em Cmd / 0)
De 0 em 60 dados de bytes
De 0 em 63 dados de bytes
249 (*4) SetupSlavePins
Introduza as definições
pino em uno “escravo”
1 bytes (índice escravo)
1 bytes (número de bytes de dados)
nn byte (PinTypes: 1 byte por pino)
1 bytes (CRC di Command / SlaveId / etc ..)
1 bytes (índice escravo)
1 bytes (Os bytes CRC
anterior)
248 (*4) SetMasterName
Digite o nome do “Mestre”
nn byte (caracteres do nome terminada com de zero)
247 (*4) GetMasterName
Lendo o nome de “Mestre”
nn byte (os personagens
name terminada com de zero)
246 (*4) SendValuesToSlave
transmissão “n” bytes
um escravo “m”
(Max 56 bytes)
1 bytes (índice escravo)
1 bytes (número de bytes)
bytes 1 . . . byte n
1 bytes (CRC
Composto / SlaveId / nBytes / n)
1 bytes (índice escravo)
1 bytes (Os bytes CRC
anterior)
245 (*4) GetValuesFromSlave
pedido “n” bytes da escrava “m”
(Max 56 bytes)
1 bytes (índice escravo)
1 bytes (número de bytes)
1 bytes (CRC di Command / SlaveId / nBytes)
byte1 . . byte n
1 bytes (índice escravo)
1 bytes (CRC em
n + 1 byte anterior)
244 (*4) SendBytesToSlave
transmissão “n” bytes um escravo “m”
(Max 56 bytes)
1 bytes (índice escravo)
1 bytes (número de bytes)
bytes 1 . . . byte n
1 bytes (CRC
Composto / SlaveId / nBytes / n)
1 bytes ( índice escravo )
1 bytes ( CRC ) sul byte
anterior
243 (*4) GetBytesFromSlave
pedido “n” bytes da escrava “m”
(Max 56 bytes)
1 bytes (índice escravo)
1 bytes (número de bytes)
1 bytes (CRC di Command / SlaveId / nBytes)
bytes 1 . . . byte n
1 bytes (índice escravo)
1 bytes ( CRC ) em
n + 1 byte anterior
199 (*5) setspeed 1 bytes (Comm. Velocidade)
1 bytes (CRC su Cmd / Comm.Speed)
0 Nenhuma ação

(*1) Comandos de serviços.
(*2) O comando reco é usado pelo mestre e os escravos durante o reconhecimento.
(*3) comunicação rápida – As trocas master com todos os escravos valores usando uma única troca USB
(*4) comunicação segura comandos ao escravo indivíduo
(*5) comandos especiais

SendValuesToSlave enviar valores ao Pino escravo de saída (Corpo Virtual nos módulos mestres ou escravos)

GetValuesFromSlave lê os valores a partir do pino de entrada de um escravo (Corpo Virtual nos módulos mestres ou escravos)

SendBytesToSlave enviar byte genérico (tal como configuração), no sentido de um escravo (Corpo Virtual nos módulos mestres ou escravos)

GetBytesFromSlave Lei byte genérico (por exemplo, o estado), da escrava uno (Corpo Virtual nos módulos mestres ou escravos)

Todos os controles têm códigos 200 em 255, para evitar, em caso de erros, IDs e tipos de escravos (De 0 em 199) Eles podem ser interpretados como um comando. (não setspeed não contam porque ele nunca é enviado ao longo da linha de série, mas apenas o HAL, para o mestre, via USB)


Comunicações entre o computador host e Mestre (USB)

comandos “Hospedeiro” para “Mestre”

nome do comando identidade
USB_TxData[0]
PARÂMETROS
USB_TxData[1 tonelada]
RecogStart CommandID, nbytes
FastDataExchange CommandID, De 0 Para 60 bytes de dados
SetupSlavePins CommandID, SlaveId, nbytes
SetMasterName CommandID, mastername (de zero terminada)
GetMasterName CommandID,
SendValuesToSlave CommandID, SlaveId, nbytes, byte1….trocas
GetValuesFromSlave CommandID, SlaveId, nbytes
SendBytesToSlave CommandID, SlaveId, nbytes, byte1….trocas
GetBytesFromSlave CommandID, SlaveId, nbytes
setspeed CommandID, CommSpeed

respostas de “Mestre” para “Hospedeiro”

nome do comando RESPOSTA
USB_RxData[0]
valores de retorno
USB_RxData[1 tonelada]
RecogStart 0 = OK Nslaves, slave Type1 … Tipo N escravo
FastDataExchange 0 = OK De 0 Para 63 bytes de dados
SetupSlavePins 0 = OK
SetMasterName 0 = OK
GetMasterName 0 = OK Nome master (de zero terminada)
SendValuesToSlave 0 = OK
GetValuesFromSlave 0 = OK Byte 1 … N byte
SendBytesToSlave 0 = OK
GetBytesFromSlave 0 = OK Byte 1 … N byte
setspeed 0 = OK

A posição Buffer USB zero indica que o comando foi executado por “Mestre” com sucesso.


Cálculo do CRC

Todos usado CRC são calculados em um número de bytes consecutivos e o CRC resultante é um byte. Para o cálculo CRC usando um algoritmo baseado na "verificação de redundância longitudinal".

verificação de redundância longitudinal

Dim CRC as Byte  CRC = 0  For each byte b      CRC = CRC Xor b  Next

Para evitar "colisões" entre sequências triviais ( Por exemplo, 0000 = 1111 ou 123 = 321 ) e seqüências simples que produzem válido CRC ( Por exemplo, 0000 CRC = 0 ) O método acima é modificado com uma permutação.

O cálculo do CRC resultante é eficiente e extremamente simples.

Cálculo do CRC utilizado neste protocolo

Dim CRC as Byte  CRC = 0  For each byte b      CRC = CRC Xor b      CRC = CRC + 1  Next 


a definição de taxa de transmissão

Se você decidir usar uma velocidade de transmissão diferente do padrão, em seguida, o "mestre" precisa comunicar a todos os dispositivos na cadeia de usar a nova velocidade.

Esta configuração também deve ser possível antes de ter realizado um ciclo de reconhecimento dos dispositivos e que deve ser possível mesmo com linhas de transmissão muito longas. Portanto, existe um comando especial que é ilustrada agora.

1 – O mestre mantém a linha de alta 50 MS
2 – Todos os escravos são certamente posicionados à espera de um personagem
3 – O Mestre gera uma ruptura (A linha de baixo nível 12 bits de velocidade mínima
4 – O mestre emite um personagem 55h (01010101) para a taxa de transmissão pretendido
5 – Todos Slave deduzir a taxa de transmissão a partir deste byte (auto-baud)
6 – O mestre envia um byte que especifica o "Speed" (De 1 em 12)
7 – O mestre envia uma CRC byte calculado em dois bytes (cmd / velocidade)
8 – Se o escravo encontra um erro não muda a sua velocidade

dilbertian eig

Verifique a taxa de transmissão

Se você definir uma velocidade demasiado alta para a linha de transmissão em uso, é possível que alguns dos dispositivos da cadeia não são capazes de suportar a velocidade definida e pode ocorrer um erro durante a transmissão de dados.

Se os erros de transmissão são iguais a zero ou menor que o 0.1% em seguida, a velocidade definida é válido.


Reconhecimento e Numeração

1 – O Mestre dá aos escravos seqüência inteira de "Speed" configuração para garantir que todos se comunicar com a mesma velocidade.
2 – O Mestre não enviar comandos para 50 milissegundos.
3 – Neste ponto, todos os escravos deve estar esperando por um comando.
4 – O mestre emite um "código 254″ (RecogStart).
5 – Todos Slave colocar o fraco-pull-up (100-400 UA) fio na entrada-saída e abrir a ligação de saída para os dispositivos a jusante. Também já não responderá a quaisquer comandos, exceto o "253″ (reco).
6 – The Master "vontade" código 253″ (pedido de tipo) e então um byte com o número "0″, o primeiro dispositivo na cadeia responde com um byte seu tipo, remove o pull-up, liga a saída para o escravo a jusante e já não responde a todos os comandos.
7 – O mestre emite um "código 253″ (pedido de tipo) e, em seguida, um byte com o número "1″, o segundo dispositivo na cadeia responde com um byte seu tipo, remove o pull-up, liga a saída para o escravo a jusante e já não responde a todos os comandos.
8 – O mestre emite um "código 253″ (pedido de tipo) e, em seguida, um byte com o número "2″,

…. o “253” (pedido de tipo) Repete-se até um máximo de 200 vezes
Quando nenhum dispositivo responde mais por um longo período de 10 bits para a velocidade de transmissão efectiva, Isso significa que a cadeia é mais. Para evitar este cálculo, você pode usar um time-out 12 mS que sempre funciona, até à velocidade mais baixa.

9 – O Mestre dá a sequência de configuração todo os Escravos "Speed", que mostra todos os escravos no modo de comunicação normal.
10 – O Mestre comunica Anfitrião (PC) o número de reconhecido via USB escravo e o tipo de cada um deles.

Roberto_Cena & Livio_Cicala (2010 – 2016)

Comentários estão fechados.