Искаженный серийный номер устройства GPS

Я использую Arduino Uno. «Обычный» серийный номер подключен к моему компьютеру, и я могу нормально принимать сообщения.

Я использую AltSoftSerial (попробовал SoftwareSerial, те же результаты) с RX и TX на контактах 8 и 9 для взаимодействия с GPS-модулем BR-355S4. Согласно техническим данным этого модуля, RX и TX имеют напряжение 5 В, что, по моему мнению, и есть то, что у Arduino ожидает.

Я объединил примеры Serial и SoftwareSerial, чтобы проверить возможность подключения Arduino к моему ПК и от GPS к Arduino.

#include <AltSoftSerial.h>
AltSoftSerial altSerial;

void setup() {
  //Инициализируем последовательный порт и ждем открытия порта:
  Serial.begin(19200);
  while (!Serial) {
    ; // ждем подключения последовательного порта. Требуется только для собственного порта USB
  }

  printAsciiTable();

  altSerial.begin(4800);
}

void printAsciiTable(){
  Serial.println("ASCII Table ~ Character Map");
  int thisByte;
  for(thisByte = 33; thisByte < 127; thisByte++){
    Serial.write(thisByte);
    Serial.print(", dec: ");
    Serial.print(thisByte);
    Serial.print(", hex: ");
    Serial.print(thisByte, HEX);
    Serial.print(", oct: ");
    Serial.print(thisByte, OCT);
    Serial.print(", bin: ");
    Serial.println(thisByte, BIN);
  }
  Serial.println("~~Done with ASCII Table~~");
}

void loop() {
  char c;
  if(altSerial.available()){
    c = altSerial.read();
    Serial.print(c);
  }
}

Данные, поступающие в инструмент Serial Monitor, выглядят нормально, пока они не начинают извлекаться из последовательного потока GPS (мною добавлены многоточия):

...
|, декабрь: 124, шестнадцатеричный: 7C, октябрь: 174, бин: 1111100
}, декабрь: 125, шестнадцатеричный: 7D, октябрь: 175, интервал: 1111101
~, декабрь: 126, шестнадцатеричный: 7E, октябрь: 176, бин: 1111110
~~С таблицей ASCII готово~~
4™5f3y=›ùÙ)É9Ӧ̙¦ ...

Я хотел бы получить правильные строки NMEA от модуля GPS на altSerial и отправить их в Серийный. Искаженный характер последовательных данных выглядит как проблема со скоростью передачи данных, но я попробовал несколько комбинаций последовательной и altSerial скорости, но безуспешно. Есть идеи?

, 👍1


3 ответа


1

Я посмотрел техническое описание и характеристики устройства GPS. Там написано, что выход RS-232. Обратите внимание, что RS-232 НЕ совместим с уровнями Arduino. Arduino «говорит и слушает» при напряжении 5 В или 3,3 В, в зависимости от того, какую плату вы используете. Итак, вам нужен преобразователь RS-232 в TTL. Теперь TTL говорит с Arduino. Итак, Arduino сможет это понять. Поэтому попробуйте использовать микросхему MAX232 или экран, в зависимости от того, что вам удобно.

,

Возможно, это так, а может и нет. Можете ли вы сказать, где вы нашли «технические данные», которые привели вас к такому выводу? Большая часть информации кажется весьма неспецифичной, поэтому трудно быть уверенным, использует ли само устройство сигнализацию RS232 или же они просто предоставляют кабельный адаптер, который преобразует их недокументированную фирменную сигнализацию в надлежащий RS232, точно так же, как они кажется, есть тот, который конвертирует его для использования с USB., @Chris Stratton

Купленная мной модель не использует RS-232. Проверьте таблицу данных, которую я дал в первом вопросе, и найдите «напряжение», и вы увидите, что для TX и RX используется напряжение 5 В., @Dallas Epperson

Возможно, я слишком поторопился с выводами. Набор кабелей PS/2 — RS-232 для преобразования PS/2 в RS232 — вот что заставило меня задуматься. [ссылка] http://usglobalsat.com/store/p-228-br305-rs232-rs232-cable-set.aspx#http://www.usglobalsat.com/images/product/large/228.jpg. Вы можете видеть, что контакты TX и RX подключаются непосредственно к разъему RS-232. Поскольку в «технических данных» не так много информации, я предположил, что он использует RS-232. Прошу прощения за то, что не слишком ясно объяснил, как я пришел к приведенному выше ответу., @Ajay Prabhu

Не волнуйся, @AjayPrabhu. Большое спасибо за помощь., @Dallas Epperson

Я потратил некоторое время, осматриваясь, есть ли у кого-нибудь такой же интерфейс с Arduino или каким-либо микроконтроллером. Я нашел этот проект. Возможно, вы захотите взглянуть на эту [ссылку](http://danceswithferrets.org/geekblog/?p=482). Надеюсь это поможет., @Ajay Prabhu


1

Вы можете приобрести последовательные USB-адаптеры TTL 5 В. Классикой является FTDI. Также вы можете приобрести преобразователи уровня микросхемы MAX в виде крошечного модуля, если у вас уже есть нормальный адаптер RS232. Я бы порекомендовал подключить GPS к вашему компьютеру для проверки реальности. Искажение, которое вы видите, — это типичные проблемы со скоростью передачи данных.

Также могут возникнуть проблемы с полярностью сигнала. (Не уверен, что вы можете программно переключить полярность контактов Arduino.) Поэтому, если вы подключаетесь к стандартному адаптеру RS232, я думаю, что чипы MAX доступны в инвертирующей и неинвертирующей версиях.

Некоторые адаптеры RS232 для ПК поддерживают напряжение 5 В. Google это для подтверждения. Если вы попробуете это сделать, вам нужно просто подключить GPS-передатчик к ПК-приемнику. (И, очевидно, 0 В.)

,

1

В комментариях вижу, что не понятно, как вы подключаете модуль в своем ардуино. Собственный режим — PS2 (старая мышь и клавиатура), вы можете использовать его непосредственно с вашим Arduino (протокол PS2 тоже 5 В), для этого вам необходимо реализовать протокол часов/данных. Если вы используете преобразователь rs-232, обратите внимание, что RS-232 с амплитудой от -12 до 12 В сжигает ваш Arduino, поэтому вам нужно использовать преобразователь rs232-ttl.

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

,