Protocolo de comunicación serie DPM
(Protocolo de Dilbertian modificado)
Nota el nombre de protocolo
El nombre de “Dilbertiano” viene de la primera versión de este protocolo, Se llama “IDP invertida Dilbertian protocolo” (2010), donde representaron a ceros con un celular “cerrar” y con un celular “grandes” (“0” flaco y “1” grasa – según la viñeta siguiente proviene de “Dilbert” por Scott Adams – www.Dilbert.com).
Porque un nuevo protocolo ?
Theremino el sistema tiene como objetivo proporcionar un sistema simple de entrada-salida para PC, barato y fácil de usar. Para hacer fácil a utilizar la numeración automática se necesitan y el reconocimiento de sus tipos, para simplificar y minimizar el costo de los enlaces es necesario comunicarse en un cable de sólo.
Existe un protocolo similar que tuvimos que escribirlo. La versión actual recoge lo mejor de muchos años de experimentación e investigación.
Descargue este documento en formato PDF:
DPM_Protocol_2015_ENG.pdf
DPM_Protocol_2015_ITA.pdf
Características
- Comunicación serial bidireccional sobre un solo cable.
- Configuración automática.
- Detección automática de dispositivos conectados.
- Número de dispositivos que van desde 1 en 200.
- Número de bytes transmitidos y recibidos varía dependiendo del tipo de dispositivo.
- Velocidad de transmisión de hasta 4 Megabits/seg a transmitir muchos datos con cables cortos.
- Velocidad de transmisión de hasta 100 Kilobits/sec para cables largos (hasta 10 Km).
- Alta eficiencia de la comunicación (De 10 en 20 veces mayor que en puede).
Persianas eléctricas
La transmisión ocurre en un solo cable, pero necesita una referencia masa y una tensión de alimentación, a donde los cables son normalmente tres.
Cualquier dispositivo que admita DPM debe tener un conector de entrada (para el maestro) y una salida a los dispositivos downstream (Esclavos)
Los conectores son utilizados normalmente por 3 Poli, con separación de 2.54 mm.
En la comunicación de la cadena debe tener un maestro (provee de energía y tiempo) y un número de dispositivos conectados en cascada (llamado esclavo).
Es la tensión que proporciona el maestro en línea 5 V, con la misma tolerancia y con la misma corriente máxima de 5 V que retiran del conector USB.
La corriente máxima que puede proporcionar el maestro limita el número y tipo de dispositivos que pueden conectarse. Esta corriente, es normalmente 250 pero, y se puede aumentar hasta 500 pero. Va sobre ella excedería la capacidad de la USB ’ e impondría características inusuales a los conectores.
El número máximo de dispositivos conectables está limitado por los siguientes factores:
– La corriente máxima que el “Master” puede proporcionar.
– El número máximo de bytes que lleva la línea de tiempo del ciclo de transmisión de arroz.
Tanto la “Master” que la “Auxiliar” están conectados a la línea con una resistencia de amortiguación, También actúa como un paso bajo, Radio interferencia y sobretensión protección. El valor de esta resistencia es normalmente de 33 en 330 Ohm
Formato de difusión
Utilizando un formato de no retorno a cero (NRZ) estándar.
Formato predeterminado = 8, N, 1
– 1 comenzar poco
– 8 bits de datos
– no-Parity
– 1 bit de parada
Niveles de línea de datos “Línea de com.”
La línea a un lado que para subir de nivel (3.3 V)
La señal de “1” se denota por 3.3 V
La señal de “0” se denota por 0 V
Rendimiento y repetición veces
Velocidad de transmisión
Utilizar bajas velocidades cuando la longitud, y así la capacidad de los cables de conexión, son altos. Cuando las distancias son cortas y de alta velocidad puede utilizarse para comunicarse con un gran número de dispositivos (o comunicarse con los dispositivos que necesitan una gran cantidad de bytes) Son velocidades nombre establecidos de “1” (1 k bits/seg.) hasta “12” (4 Mega bits por segundo)
Número máximo de bytes
Dependiendo de la velocidad en baudios se enumera el número máximo de bytes que se puede transmitir en la siguiente tabla.
Veces, Distancias y el número de bytes
Velocidad
|
poco tiempo
|
poco
para
segundo
|
Bytes
cada 15MS |
Bytes cada
30MS |
Distancia máxima
|
Capacidad máxima
|
Esclavos
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
|
250_nS
|
4M
|
6000
|
12000
|
2.5 m
|
250 PF
|
4
|
Todos los dispositivos deben implementar al menos la velocidad “7” se considera que la velocidad por defecto. Si desea establecer una velocidad distinta de la “7” todos los dispositivos de la cadena deben apoyarla.
El “distancia máxima” depende de las características de los cables, los valores de la tabla están calculados para un blindado cable RG58 de 50 Ohm con capacidad de 100pF por metro.
A bajas velocidades el número de “esclavos” está limitado por el número máximo de bytes que se puede transmitir en 30 milisegundos. (cada esclavo usa al menos un byte y reclamar una rápida repetición suficiente para hacer movimientos fluidos)
A alta velocidad, el número de “esclavos” está limitada por la capacidad máxima, cada “auxiliar” Agrega una capacidad de aproximadamente 40..60 PF y reduce la distancia máxima de aproximadamente 50 cm.
La capacidad se calculó sobre la base de 30pF por “auxiliar” Además de otros 20pF a un cable de conexión de 20 cm y otros 10pF a tener en cuenta la resistencia adicional debido a “interruptor bilateral” (total: 60PF)
Longitud máxima del cable de comunicación de la corriente y la resistencia por metro
Cable tipo —>
Corriente máxima
( corriente máxima )
|
H1500/H1000/H500/H155/RG11
20 Mili ohms
o menos
por metro
|
Rg58 /Rg59u/H155 /
cables de red
Acerca de
50 Mili ohms
por metro
|
Rg59/RG6 /teléfono trenzado de alambre /
cables de red
Acerca de
100 Mili ohms
por metro
|
10 pero | 1 Km | 400 m | 200 m |
20 pero | 500 m | 200 m | 100 m |
50 pero | 200 m | 80 m | 40 m |
80 pero | 125 m | 50 m | 25 m |
100 pero | 100 m | 40 m | 20 m |
200 pero | 50 m | 20 m | 10 m |
400 pero | 25 m | 10 m | 5 m |
500 pero | 20 m | 8 m | 4 m |
800 pero | 12.5 m | 5 m | 2.5 m |
1 En | 10 m | 4 m | 2 m |
En el cálculo de la distancia tenemos en cuenta que la tensión cae en la tierra, no exceda de 200 MV. La caída de tensión en el cable de alimentación, no causa errores de transmisión, También puede ser mucho mayor (el 5 V puede caer abajo a 3.3 V sin crear problemas) En el caso de cables blindados en terreno es la pantalla, que generalmente tiene menos resistencia que declaró, para que la distancia sea mayor.
Capacidad de cable
Los valores de “longitud máxima” indicado en la tabla anterior son válidos sólo para la conexión de cable con una capacidad de aprox. 100 PF por metro. La siguiente tabla muestra las correcciones a aplicar para los cables más utilizados.
Cable
|
Externo
diámetro
( mm )
|
Impedancia
( Ohm )
|
Capacidad
(PF/mt.)
|
Resistencia
(miliohmio
/ medidor de)
|
Corrector de longitud máxima
|
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 vía satélite)
|
6.8
|
75
|
51
|
100
|
x 2.0
|
RG56/en _(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
|
|
–
|
Cable de red
|
|
|
min 50
Max 130
|
min 60
Max 200
|
x 2.0
x 0.7
|
Cable de Audio de la PC
|
|
|
min 120
Max 300
|
min 500
Max 3000
|
x 0.8
x 0.5
|
Microfónicos de la coclea
cable
|
|
|
min 60
Max 300
|
|
x 1.7
x 0.3
|
Cable telefónico trenzado
|
|
|
50
|
100
|
x 2.0
|
También hay cables de baja capacidad (poco utilizado y difícil 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 la capacidad de un cable desconocido:
- Preparar el perfecto pelar cable blindado y aislado filamento central de retención.
- Medir entre escudo Central y externa con un metro o medidor de capacitancia.
- Para mejorar la exactitud de la medida, utilizar cinco o diez metros de cable.
- Dividir el valor de los picofaradios medido por el número de metros de cable.
Tipos de dispositivos de
Los dispositivos están marcados con un número de 0 en 199 identificar su "tipo".
En la etapa de reconocimiento y numeración de cada dispositivo identifica con este "Tipo".
Actualmente están definidos los siguientes dispositivos:
Tipo de dispositivo
|
Velocidad
min
|
Velocidad max
|
En hacia fuera los pernos
|
Energía
|
Nombre
|
0
|
Especial “personalizados” tipo
|
||||
1
|
1
|
12
|
1
|
12 pero
|
Sensor capacitivo
Alta calidad
|
2
|
1
|
12
|
10
|
InOut Servo
|
|
3
|
1
|
12
|
12
|
InOut genérico
|
|
4
|
1
|
12
|
12
|
InOut
|
|
5
|
6
|
Virtual Master Pins
(primera versión) |
|||
8
|
10
|
Virtual Master Pins – V2
|
|||
9 | 12 | Virtual Master Pins – V4 | |||
255 | Desconocido |
Número máximo de dispositivos
Es limitado el número máximo de dispositivos conectables por:
– el número máximo de bytes que se puede transmitir dependiendo de la velocidad seleccionada.
– la corriente máxima que puede proporcionar el "maestro" (normalmente 500 pero)
– es el número máximo de dispositivos compatibles con el protocolo 200 (De 0 en 199)
Tipos de perno
Los pernos están marcados con un número de 0 en 255 identificar su "PinType".
Tipos de Pin de salida
Pin de salida
Tipo
|
Nombre
|
Master a esclavo
bytes
|
Esclavo a maestro
bytes
|
0
|
SIN USAR
|
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 | PASO A PASO | 4 | 0 |
7 | PWM_FAST | 5 | 0 |
Tipos de entrada de Pin
Entrada de Pin
Tipo
|
Nombre
|
Master a esclavo
bytes
|
Esclavo a maestro
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 DE
|
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
|
Comunicación entre maestro y esclavos (línea serie)
Primer byte | Tipo de transmisión | Transmisión | Recibir |
255 (*4) | Especial extendido (para una futura ampliación) |
1 bytes (extensión) >>>>> Consulte la tabla de verbos extendidos <<<<< |
— |
254 (*1) | RecogStart Reconocimiento temprano y numeración |
1 bytes (número de bytes de datos = 0) 1 bytes (CRC de Cmd / 0) |
— |
253 (*2) | Tuación Introduzca el número de secuencia y de la solicitud tipo |
1 bytes (número de bytes de datos = 1) 1 bytes (De 0 en 199) 1 bytes (CRC de Cmd, Nbytes, tipo) |
1 bytes ( tipo ) 1 bytes ( CRC ) |
251 (*3) | FastDataExchange Intercambio de datos rápido. |
1 bytes (número de bytes de datos = 0) 1 bytes (CRC de Cmd/0) De 0 en 60 bytes de datos |
De 0 en 63 bytes de datos |
249 (*4) | SetupSlavePins Acceder a los ajustes para el uno de los pines “auxiliar” |
1 bytes (Índice de esclavo) 1 bytes (número de bytes de datos) Bytes NN (PinTypes: 1 bytes por pin) 1 bytes (CRC de Cmd/SlaveId/etc...) |
1 bytes (Índice de esclavo) 1 bytes (CRC en bytes anterior) |
248 (*4) | SetMasterName Introduzca el nombre de la “Master” |
Bytes NN (caracteres del nombre terminadas en cero) | — |
247 (*4) | GetMasterName Leyendo el nombre de la “Master” |
— | Bytes NN (caracteres de nombre terminada en cero) |
246 (*4) | SendValuesToSlave Envío de “n” bytes un esclavo “m” (Max 56 bytes) |
1 bytes (Índice de esclavo) 1 bytes (número de bytes) bytes 1 . . . byte n 1 bytes (CRC CMD/SlaveId/nBytes/n) |
1 bytes (Índice de esclavo) 1 bytes (CRC en bytes anterior) |
245 (*4) | GetValuesFromSlave Solicitud de “n” bytes a esclavo “m” (Max 56 bytes) |
1 bytes (Índice de esclavo) 1 bytes (número de bytes) 1 bytes (CRC de Cmd/SlaveId/nBytes) |
byte1 . . byte n 1 bytes (Índice de esclavo) 1 bytes (CRC en n + 1 anterior bytes) |
244 (*4) | SendBytesToSlave Envío de “n” bytes a esclavo “m” (Max 56 bytes) |
1 bytes (Índice de esclavo) 1 bytes (número de bytes) bytes 1 . . . byte n 1 bytes (CRC CMD/SlaveId/nBytes/n) |
1 bytes ( Índice de esclavo ) 1 bytes ( CRC ) en bytes anterior |
243 (*4) | GetBytesFromSlave Solicitud de “n” bytes a esclavo “m” (Max 56 bytes) |
1 bytes (Índice de esclavo) 1 bytes (número de bytes) 1 bytes (CRC de Cmd/SlaveId/nBytes) |
bytes 1 . . . byte n 1 bytes (Índice de esclavo) 1 bytes ( CRC ) Acerca de n + 1 anterior bytes |
199 (*5) | SetSpeed | 1 bytes (COMM. Velocidad) 1 bytes (CRC en velocidad de Cmd/COMM.) |
— |
0 | Ninguna acción |
(*1) Comandos de servicio.
(*2) El comando es utilizado por el maestro y los esclavos oriundos durante el reconocimiento.
(*3) Comunicación rápida – el maestro intercambia los valores de todos los esclavos usando solamente una USB intercambio
(*4) Comandos de comunicación al único esclavo
(*5) Comandos especiales
SendValuesToSlave envía los valores al Pin de salida de un esclavo (Forma física en el Master o esclavos virtuales)
GetValuesFromSlave Lee los valores de la clavija de entrada de un esclavo (Forma física en el Master o esclavos virtuales)
SendBytesToSlave enviar bytes genéricos (ejemplo de configuración), a un esclavo (Forma física en el Master o esclavos virtuales)
GetBytesFromSlave bytes genérico derecho (por ejemplo del estado), de un esclavo (Forma física en el Master o esclavos virtuales)
Todos los comandos tienen códigos de 200 en 255, para evitar que, en caso de errores, Identificadores y tipos de esclavos (De 0 en 199) podría interpretarse como un comando. (SETSPEED no cuenta, porque nunca se envía abajo de la línea serial pero solamente ’ HAL, para el maestro, a través de USB)
Comunicación entre el ordenador y maestro (USB)
Da de carretel “Host” verso “Master”
Nombre de comando | ID USB_TxData[0] |
PARÁMETROS USB_TxData[1 a n] |
RecogStart | CommandID, | Nbytes |
FastDataExchange | CommandID, | De 0 Para 60 bytes de datos |
SetupSlavePins | CommandID, | SlaveId, Nbytes |
SetMasterName | CommandID, | MasterName (cero terminada) |
GetMasterName | CommandID, | – |
SendValuesToSlave | CommandID, | SlaveId, Nbytes, Byte1….ByteN |
GetValuesFromSlave | CommandID, | SlaveId, Nbytes |
SendBytesToSlave | CommandID, | SlaveId, Nbytes, Byte1….ByteN |
GetBytesFromSlave | CommandID, | SlaveId, Nbytes |
SetSpeed | CommandID, | CommSpeed |
Da respuestas “Master” verso “Host”
Nombre de comando | RESPUESTA USB_RxData[0] |
DEVOLVER VALORES USB_RxData[1 a n] |
RecogStart | 0 = OK | Nslaves, Esclava tipo 1 … Tipo de esclavo N |
FastDataExchange | 0 = OK | De 0 Para 63 bytes de datos |
SetupSlavePins | 0 = OK | – |
SetMasterName | 0 = OK | – |
GetMasterName | 0 = OK | Nombre del maestro (cero terminada) |
SendValuesToSlave | 0 = OK | – |
GetValuesFromSlave | 0 = OK | Bytes 1 … Byte N |
SendBytesToSlave | 0 = OK | – |
GetBytesFromSlave | 0 = OK | Bytes 1 … Byte N |
SetSpeed | 0 = OK | – |
La posición cero del búfer USB indica si se ejecuta el comando de “Master” con éxito.
Cálculo de la CRC
Todos CRC utilizado se calculan sobre un cierto número de bytes consecutivos y el resultado de la CRC es un byte. Cálculo de CRC utilizando un algoritmo basado en "comprobación de redundancia Longitudinal".
Verificación de redundancia longitudinal
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
Next
Para evitar "choques" entre secuencias mundanas ( Por ejemplo, 0000 = 1111 o 123 = 321 ) y secuencias simples que producen CRC válido ( Por ejemplo, 0000 con CRC = 0 ) el método anterior es modificado con una permutación.
Cálculo de la CCR resulta eficaz y extremadamente simple.
Cálculo de la CRC utilizado en este protocolo
Dim CRC as Byte
CRC = 0
For each byte b
CRC = CRC Xor b
CRC = CRC + 1
Next
Ajuste la velocidad en baudios
Si usted decide utilizar una velocidad distinta de la predeterminada una, luego el "maestro" debe comunicarse a todos los dispositivos en la cadena de la nueva velocidad.
Este ajuste debería ser posible incluso antes de hacer un reconocimiento del dispositivo de bucle y debe también ser posible con líneas de transmisión muy largo. Por lo tanto hay un comando especial que se muestra.
1 – El maestro mantiene la línea de alta 50 MS
2 – Todos los esclavos se colocan definitivamente espera un carácter
3 – El maestro genera un descanso (línea de nivel bajo 12 bits a velocidad mínima
4 – El maestro emite un personaje 55 (01010101) la velocidad deseada
5 – Todos los esclavos deducir la velocidad de este bytes (Auto-baud)
6 – El maestro envía un byte que especifica la "velocidad" (De 1 en 12)
7 – El maestro envía un byte de CRC calculado en dos bytes (CMD/velocidad)
8 – Si el esclavo es un error no cambia su velocidad
Compruebe la velocidad
Si establece una velocidad demasiado alta para línea de transmisión en uso algunos dispositivos en la cadena pueden no ser capaces de soportar el ajuste de velocidad y errores pueden ocurrir cuando la transmisión de datos.
Si los errores de transmisión son cero o menor que el 0.1% entonces la velocidad es válida.
Reconocimiento y enumeración
1 – El maestro de las salidas a la esclava toda la secuencia de ajuste de "Velocidad" para asegurarse de que todos comunican a la misma velocidad.
2 – El maestro no transmite órdenes a 50 milisegundos.
3 – En este punto todos los esclavos debe esperando un comando.
4 – El maestro emite un código "254″ (RecogStart).
5 – Todos los esclavos pusieron el débil-pull-up (100-400 UA) en la entrada-salida y abrir la conexión de salida a los dispositivos downstream. Ya no responden a los comandos excepto "253″ (Tuación).
6 – El maestro emite un código "253″ (solicitud tipo) y luego un byte con el número 0″, el primer dispositivo de la cadena cumple un octeto con el tipo de, Elimina la tensión, Conecte el esclavo aguas abajo y no responde a ningún comando.
7 – El maestro emite un código "253″ (solicitud tipo) y luego un byte con el número 1″, el segundo dispositivo en la cadena cumple un octeto con el tipo de, Elimina la tensión, Conecte el esclavo aguas abajo y no responde a ningún comando.
8 – El maestro emite un código "253″ (solicitud tipo) y luego un byte con el número "2″,
9 – El maestro emite hacia los esclavos todos secuencia de configuración "Velocidad", muestra a todos los esclavos en el modo de comunicación normal.
10 – El maestro informa al Host (PC) Via USB esclavo reconoce el número y tipo de cada uno.
Roberto_Cena & Livio_Cicala (2010 – 2016)