19 votos

¿Qué codificación se utiliza en esta señal?

Tengo un termómetro de piscina inalámbrico barato (AcuRite 617 1 ) y me gustaría interceptar los datos de temperatura en el receptor y utilizarlos con un sistema informático de registro de datos.

Convenientemente, en el interior del receptor hay una pequeña placa de conexión que se conecta a la antena y tiene pines digitales "V", "G", "D" y "SH":

RF211 board

Aquí hay un segmento de datos capturados del pin "D" durante una transmisión (estas ocurren una vez por minuto). Antes de este segmento, hay lo que parece ser datos de velocidad mucho más alta, pero creo que podría ser ruido - este es el comienzo de los datos de 1,36kHz / 680Hz.

captured signal from "D" pin

He buscado un poco en Google y no encuentro una codificación que se parezca a esta, pero si tuviera que adivinar lo que pasa, esto es lo que pienso:

  • los 4 ciclos iniciales de 680 Hz son para sincronizar los relojes pero no contienen datos
  • los 13 ciclos de 1,36 kHz (el doble de la tasa inicial) que siguen parecen tener una de dos formas: o bien caen bajo antes del punto medio del ciclo o después de él -- yo asumiría que una forma es un uno lógico y la otra es un cero.
  • Después de eso, parece haber un hueco extraño, pero si se descuenta la parte del bajo que forma parte del "1" precedente, entonces el hueco restante es de 735 µs, que es una continuación (¡correcta en fase!) del preámbulo de 680 Hz.

¿Estoy viendo esto correctamente? ¿Existe un nombre para esta codificación?

Algunos apuntes más sobre la pizarra de ruptura:

  • la placa está marcada como "RF211" y parece notablemente consistente con el MICRF211 "de propósito general, 3V QwikRadio receptor que opera en 433.92MHz" 3
  • la hoja de datos del MICRF211 tiene la siguiente figura (con muy poca explicación), que se parece tentadoramente a lo que estoy viendo, excepto por la onda cuadrada de doble tasa de datos en comparación con mi captura:
    data profile

2016-02-14 Actualización: He revisado este proyecto y parece que estoy obteniendo un flujo limpio de 64 bits entre un preámbulo de 4 ciclos y un "postámbulo" de 1 ciclo, después del cual la placa de visualización apaga el módulo de RF tirando de ^SH a bajo (línea superior):

64 bits of data

Según el esquema "33/66% PWM" de Micrel (que no aparece en ningún otro sitio en Google), eso es

-_-_-_-_0000011110011000110000000000000000000000100011101000010010101010-_

Así que ahora tengo que empezar a manipular la temperatura para decodificar los bits. Aquí ("x") están los bits que parecen cambiar sin ningún cambio aparente en la pantalla:

0000011110011000110000000000000000000000100011101000010010101010
------------------------------------------------x----xxxx----xxx

Supongo que se trata de los bits menos significativos o del nivel de la batería (que sólo se muestra como "Bajo" cuando baja significativamente).

2016-02-15 Actualización: Me llevo el programa a la carretera para dar al nuevo stackexchange de "Ingeniería inversa" una grieta para determinar el significado: https://reverseengineering.stackexchange.com/questions/12048/what-is-contained-in-this-transmission-rf-pool-temperature-sensor-base-unit-re

8voto

caveman Puntos 1590

Micrel lo denomina esquema PWM 33/66%. Parece ser un protocolo bastante simple, pero ad-hoc.

PWM significa modulación por ancho de pulso. Hay una página de Wikipedia que entra en más detalles, pero en resumen, PWM es donde se mantiene un período fijo, por lo que aquí es el tiempo desde el borde ascendente hasta el siguiente borde ascendente, pero se varía el porcentaje de tiempo que pasa en el estado alto cambiando cuando se produce el borde descendente. Para este, puedes ver que es 33% alto para un '1' y 66% alto para un '0'.

La serie inicial de pulsos son tiempos altos y bajos iguales. Esto suele hacerse para permitir que el receptor se sincronice antes de recibir los datos reales.

Ver http://www.micrel.com/_PDF/App-Notes/an-22.pdf para obtener más detalles sobre lo que esperan para el módulo.

Una forma típica de poder recibir este tipo de codificación sería introducirla en un pin de captura de entrada del temporizador de un microcontrolador. O simplemente se puede conectar a una entrada general y hacer que muestre a 4-5 veces el periodo PWM. El algoritmo para la decodificación no es demasiado difícil a partir de ahí.

Como alternativa, tal y como sugiere markt, se puede llegar hasta el propio sensor de temperatura. Pero, si se trata de una señal de salida analógica, tendrá que convertirla en digital usted mismo y puede tener números ligeramente diferentes en su registro de la salida original.

3voto

Kimball Robinson Puntos 161

La gente que conozco suele llamar a esa técnica de codificación "PWM", que supongo que es una descripción razonable.

Mi primer pensamiento al ver tu flujo de datos, y asumiendo que estás adivinando correctamente la polaridad de los bits, es que es una lectura de ADC de 12 bits, LSB primero, con un '1' inicial como bit de inicio. Voy con LSB primero porque el comienzo de lo que es presumiblemente la siguiente lectura muestra una variación de un solo bit y es poco probable que una lectura ADC de la temperatura (de la piscina) varíe por un segundo o tercer MSB en un marco de tiempo tan corto.

Yo indagaría un poco más en el sistema, hasta llegar a lo que genera los datos (en lugar de transmitirlos), a ver si puedes identificar el sensor de temperatura y buscar alguna correlación entre los datos transmitidos y la temperatura.

3voto

Yuyutsu Puntos 61

He empezado a descifrar el Acurite 617 y estas son mis primeras observaciones. Puedo decir que el último byte es una especie de byte de "comprobación" y los penúltimos tres bytes contienen la temperatura. Estos bytes también se envían utilizando el 7º bit para hacer paridad y sólo se utiliza el nibble inferior de cada byte. He escrito un programa de Arduino para capturar los datos y he visto los siguientes mensajes/temperatura.

40 ce c0 00 00 0c 03 be
(00 0C 03) => 0C3 => 67F

40 ce c0 00 00 0c 84 39
(00 0C 04) => 0C4 => 67F

40 ce c0 00 00 0c 05 b8
(00 0C 05) => 0C5 => 67F

Otros datos/temas que he visto son:

E2 => 73F

F5 => 76F

108 => 80F (81 00 88)

109 => 80F

Con esto deberías ser capaz de hacer la conversión en "línea recta" (suposición).

Como no tengo un buen osciloscopio (y el hecho de que los datos se envían una vez por minuto) no estoy seguro de mi sincronización. Veo que la sincronización HI y LO son 720 usec y los bits de datos son 240 y 480 usec.

Espero tener más información más adelante. Tengo un montón de estos. En cuanto empiezan a tener fugas, los saco de la piscina y los seco para usarlos en la casa. Los módulos 617 posteriores (con el fondo atornillado y la junta tórica) parecen durar más.


Hice algo más de decodificación. El último byte (byte de control) hace que el XOR de los ocho bytes sea igual a 0FFH. Por ejemplo, para "40 CE C0 00 00 8D 0C 30", 40 xor CE xor C0 xor 00 xor 00 xor 8D xor 0C xor 30 es igual a 0FF.

Además, he bajado la temperatura a 34F y la cuenta era de 10 decimales (es decir, 00 00 0A) y a 80F la cuenta era de 264 decimales (es decir, 81 00 88 o 108H).

De esto estoy usando Temp(F) = 0.1811 * Count + 32.1889. Puede que consiga un lapso mayor para obtener mejores datos si veo algún error.

Mirando la cadena de Rob Starling en 2016-02-14:

00000111/10011000/11000000/00000000/00000000/10001110/10000100/10101010 07 98 C0 00 00 8E 84 AA

XOR = FF

Cuenta = 0E4 o 228

Temperatura = 73.5F

2voto

Bernd Puntos 61

Casi todos los esquemas de transmisión por radiofrecuencia van a necesitar tener varias características en sus protocolos de codificación de datos. Estas incluirían:

  1. Preámbulo de formato coherente utilizado para bloquear un receptor en la frecuencia
  2. Un indicador de pulso de sincronización para marcar el inicio si la indicación de la trama
  3. Un método para codificar los 1's y 0's de los datos con algún tipo de reloj codificado para la recuperación de datos.

El pulso de la bola impar que has anotado es seguramente el indicador de pulso de sincronización.

La codificación de los datos parece seguir lo que he visto llamar codificación de ancho de pulso. Se trata de una técnica bastante común en la que la dirección de una transición sigue una frecuencia constante que conduce a tiempos de celda de bits de ancho constante. Durante la celda de bits, el pulso activo se presenta como el 25% del tiempo de la celda de bits o el 75% del tiempo de la celda de bits. Este esquema no es un esquema de codificación equilibrada de CC de pulso a pulso como el que ofrece la codificación Manchester. Es una técnica común con la codificación de ancho de pulso para proporcionar un equilibrio de CC dentro del protocolo del mensaje enviando bits adicionales para crear un equilibrio general en todo el mensaje. En su forma más simple, los datos se envían dos veces con la segunda copia lógicamente invertida.

En tu ejemplo es impar ver que los datos modulados por ancho de pulso ocurren antes del pulso de sincronización. Sin embargo, sigue siendo un esquema factible si el algoritmo de decodificación de datos está diseñado para aceptar los datos recibidos con la sincronización en esta posición. Es posible que la unidad esté enviando un tipo de datos antes de la sincronización y otro después. La división podría ser entre dirección del sensor / datos de temperatura O datos verdaderos / datos invertidos.

Editar:

Es interesante observar que casi parece que la unidad transmisora está utilizando un algoritmo de software diferente para formular los anchos de pulso positivos para las celdas de datos antes del patrón de sincronización que para el ancho de pulso en y después del patrón de sincronización. Esto implica que puede haber un trozo de software separado que genera el patrón anterior que el de la parte posterior del patrón. Esta diferencia de patrón podría implicar que la fuente de datos en cada caso requería un manejo diferente en términos de cómo se accedía bit a bit. La diferencia que se ve en el diagrama de tiempos podría ser simplemente una diferencia de tiempo de instrucción o dos en los bucles de generación de patrones.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X