Почему мои серийные показания не точны? Используя 2 xbees - PullRequest
0 голосов
/ 29 марта 2019

У меня есть один XBee-Arduino, передающий простой счетчик int на приемник XBee-Arduino.Приемник печатает нормально, пока не достигнет 16 и выше.Это пример моих выводов:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 48 17 50 19 52 21 54 23 56 25 26 59 28 61 62 63 64 6598 67 68 69

Я пробовал новые XBees, и XBees, похоже, не являются проблемой.

Код передатчика:

#include "SoftwareSerial.h"
int count = 1;

// RX: Arduino pin 2, XBee pin DOUT.  TX:  Arduino pin 3, XBee pin DIN
SoftwareSerial XBee(2, 3);

void setup() {

  XBee.begin(115200);
  Serial.println ("Initializing...");
}

void loop() {

    XBee.write(count);
    delay(1000);
    count++;

}

Код получателя:

#include "SoftwareSerial.h"

// RX: Arduino pin 2, XBee pin DOUT.  TX:  Arduino pin 3, XBee pin DIN
SoftwareSerial XBee(2, 3);

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  Serial.println("Started Ground station");
  XBee.begin(115200);
}

void loop() {
  // put your main code here, to run repeatedly:

  if (XBee.available())  
  {
    int c = XBee.read();
    Serial.println(c);  
    delay(1000);
  }
  else
  {
    Serial.println("XBee not available.");
    delay(1000);
  }
}

Я просто хочу, чтобы получатель распечатал счетчик как есть.Не уверен, почему я получаю эти случайные числа после 15. Любая помощь приветствуется.

1 Ответ

2 голосов
/ 29 марта 2019

Неправильные числа отличаются на один бит.

Это может быть вызвано различной синхронизацией при считывании последовательной линии, особенно при высоких скоростях передачи (программный серийный номер не особенно надежен при более высоких скоростях передачи). Вы можете видеть, где бит сдвинулся во времени для соседнего бита, например,

16 = 0001 0000 was interpreted as 0011 0000 = 48
18 = 0001 0010 was interpreted as 0011 0010 = 50
20 = 0001 0100 was interpreted as 0011 0100 = 52
27 = 0001 1011 was interpreted as 0011 1011 = 59
34 = 0010 0010 was interpreted as 0110 0010 = 98

Попробуйте использовать более низкую скорость передачи в бодах, чтобы синхронизация не была столь критичной, и биты с меньшей вероятностью дрейфовали в синхронизацию для соседних битов.

...