Descodificación del paquete de API de XBee Series 1

0

Tengo problemas al intentar decodificar un paquete de API XBee. Empiezo a decodificarlo, pero no estoy seguro de cuáles deberían ser mis datos analógicos reales. Varios de ellos parecen:

7E 00 12 83 56 78 43 00 05 02 00 00 00 03 FF 03 FF 00 00 00 00 60 
7E 00 12 83 56 78 43 00 05 02 00 03 E8 03 FF 00 2A 00 00 01 C8 84 
7E 00 12 83 56 78 43 00 05 02 00 03 FF 02 DE 00 0D 00 00 03 FF 73 
7E 00 12 83 56 78 42 00 05 02 00 03 FF 00 00 00 00 03 DB 03 FF 83  

Hasta ahora tengo:

7E - start
00 - length byte 1
12 - length byte 2
83 - API identifier
56 - source address byte 1
78 - source address byte 2
43 - RSSI value bytes
00 - option byte
05 - sample quantity byte
02 00 - channel indicator 0000 0010 0000 0000  (A0 is active) (IO header) (I'm not sure if this is right)
last byte is chechsum

Estoy usando la serie XBee 1 usando el firmware XB24. Tengo un sensor de temperatura Lilypad basado en el MCP9700 .

La documentación para el módulo XBee es: enlace

Cada vez que trato de obtener los datos de ADC obtengo un número enorme como 51228675.

El documento también dice que si alguna de las líneas DIO son los primeros dos bytes son la muestra DIO. ¿Por qué aparece "03 FF" o "E8 03" y, a veces, "00 00" si no tengo ninguna de las líneas DIO activas?

Esquema: Sensor de temperatura Lilypad (pin S) - > Xbee (pin AD0)

Cualquier ayuda es muy apreciada al tratar de encontrar la salida del sensor.

    
pregunta user1247595

3 respuestas

1

Está haciendo algo muy mal si obtiene un número grande como 51228675: la hoja de datos a la que se vincula indica que la salida del ADC es un número de 10 bits justificado a la derecha dentro de dos bytes (16 bits). Eso significa que el valor máximo debe ser 0000 0011 1111 1111b, que es equivalente a 1,023 decimal. Entonces, si obtienes algo tan grande, estás incluyendo más bits de los que deberías.

¿Qué bytes crees que son los datos de ADC en los ejemplos anteriores?

    
respondido por el AngryEE
0

El formato de ese marco se encuentra en la página 13 del documento XBee. Las líneas DIO nunca están activas, por lo tanto, las muestras DIO se omiten y los siguientes dos bytes son inmediatamente las muestras analógicas. Las lecturas de A0 son:

  • 00 00 = 0
  • 03 E8 = 0x3E8 = 1000
  • 03 FF = 0x3FF = 1023
  • 03 FF = 0x3FF = 1023

Nunca debes obtener nada más alto que 1023 para la lectura de ADC, porque es solo un número de 10 bits.

¿Cómo estás recibiendo los marcos? Supongo que tienes un segundo XBee que está conectado a algo y está escupiendo los datos del marco. ¿Puedes publicar el código que te está dando 51228675?

    
respondido por el Jeff E
0

Tal vez el uso de una biblioteca es la mejor solución. Para Arduino hay

enlace

y para Java:

enlace

He usado ambos y son buenos. Sin embargo, solo una captura, si pretende utilizar la biblioteca arduino, no olvide configurar el modo API = 2 (AT comando AP, valor 2), de lo contrario se preguntará por qué no se envía nada. (AT AP = 2 es el dialecto API donde se escapan ciertos caracteres. La biblioteca usa ese dialecto. La biblioteca de Java se encarga de inicializar las cosas correctamente, pero la biblioteca de Arduino deja eso al usuario)

    
respondido por el Erion

Lea otras preguntas en las etiquetas