Отправка данных в SoftwareSerial и получение приходящих данных в Serial

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

доброго дня. Так уж получилось, что опять приходится создать топик, в надежде, что пытливые умы этого форума подскажут дорогу верную)

Имеется: UNO, UHF Rfid ридер, который по даташиту можно подключить по rs232

Ридер сам по себе не считывает. Ему нужно отправить комманду в HEX формате - A0 04 01 89 01 D1, тогда он ответит, что считал метку: A0 13 01 89 50 30 00 E2 00 00 17 83 18 00 34 14 20 8B B1 60 AB.

Подключил так:

UNO       Reader
2(rx)      rs232 tx
3(tx)      rs232 rx
gnd        gnd

Питание у ардуины и считывателя разное. Земля общая.
Вот дадашит считывателя (подключать аналогичные устройства по 232 уже приходилось)

Отправку тестировал отдельно через программу Serial Port Monitor

На считывателе мигает диод и тутже приходит от него ответ.

А вот выдержка из мануала, как должны данные отправляться:

 

Теперь о Дуине: почитав форумы понял, что отправку можно реализовать направив пакеты байтов в софтверный сериал порт. Для этого поправил скрипт:

#include <SoftwareSerial.h>
String resp;
int i = 0;
SoftwareSerial mySerial(2, 3); // RX, TX
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(115200);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }
  mySerial.begin(115200);
}

void loop() { // run over and over
  byte code[] = {0xA0, 0x04, 0x01, 0x89, 0x01, 0xD1};
  mySerial.write(code,sizeof(code));

  delay(2);
  while (mySerial.available()) {
    Serial.print(mySerial.read());
  }
  delay (1000);
}

Как я понял, в софтверный сериал отправляются эти данные в том виде, в котором мне нужно

byte code[] = {0xA0, 0x04, 0x01, 0x89, 0x01, 0xD1};
 mySerial.write(code,sizeof(code));

Но тишина - диод на считывателе не моргает, считыватель не просыпается.

Фото подключенного считывателя:

PS Менял местами RX & TX.

Буду признатеелен за помощь. Спасибо!

sadman41
Offline
Зарегистрирован: 19.10.2016

См. конверторы на MAX232 

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

sadman41 пишет:

См. конверторы на MAX232 

Спасибо. Почему тогда другие считыватели и сканеры штрихкодов не нуждаются в доп преобразователях?

nik182
Offline
Зарегистрирован: 04.05.2015

Может быть потому что подключаются по другому интерфейсу? https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%B3%D0%B0%D0%BD%D0%B4_(%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81) 

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

nik182 пишет:

Может быть потому что подключаются по другому интерфейсу? https://ru.wikipedia.org/wiki/%D0%92%D0%B8%D0%B3%D0%B0%D0%BD%D0%B4_(%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D1%84%D0%B5%D0%B9%D1%81) 

Да не, у них тоже есть выбор подключения: USB, Wiegand, rs232. Всех их подключал по 232 и работали же. А этот не хочет. 

sadman41
Offline
Зарегистрирован: 19.10.2016

sazanof пишет:

Спасибо. Почему тогда другие считыватели и сканеры штрихкодов не нуждаются в доп преобразователях?

Все, что мне попадалось из RS-232 требовало преобразователя. Видел тут, правда, вопросы про RS232-TTL, но у меня такого в руках не бывало.

nik182
Offline
Зарегистрирован: 04.05.2015

У ардуины нет физического RS-232 интерфейса. Есть ТТL с логикой RS-232, поэтому нужен преобразователь.  

b707
Offline
Зарегистрирован: 26.05.2017

Софтовый Сериал не поддерживает скорость 115200. Максимум - 19200 или 38400

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

sazanof пишет:
Подключил так:

UNO       Reader
2(rx)      rs232 tx
3(tx)      rs232 rx
gnd        gnd

Ардуина ещё жива только потому, что она была мастером, м модуль покорно ждал и ничего не отправлял ей. Если бы он начал инициировать связь, скорее всего, она бы уже в мусорном ведре была. У RS232 другие напряжения и ардуине их не пережить.

Правильно поступить, как советовали коллеги - взять конвертер на основе MAX232, благо на али они по "рупь за ведро". Можно, конечно и самогон наколхозить - схем в сети навалом, ищите "конвертер RS232 в TTL"

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

b707 пишет:

Софтовый Сериал не поддерживает скорость 115200. Максимум - 19200 или 38400

Спасибо! На 38400 завелось: Нашел как настроить китайский считыватель на постоянное сканирование. Подключил считыватель к ардуино и данные пошли!

Однако чтобы НА считыватель присылать комманды нужен как я понимаю модуль ttl?

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

ЕвгенийП пишет:

Ардуина ещё жива только потому, что она была мастером, м модуль покорно ждал и ничего не отправлял ей. Если бы он начал инициировать связь, скорее всего, она бы уже в мусорном ведре была. У RS232 другие напряжения и ардуине их не пережить.

Правильно поступить, как советовали коллеги - взять конвертер на основе MAX232, благо на али они по "рупь за ведро". Можно, конечно и самогон наколхозить - схем в сети навалом, ищите "конвертер RS232 в TTL"

Да вроде не сгорела. Я matrix 2 тоже подключал и все норм было и другие ридеры тоже работали. По поводу конвертера - спасибо. Закажу!

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

nik182 пишет:

У ардуины нет физического RS-232 интерфейса. Есть ТТL с логикой RS-232, поэтому нужен преобразователь.  

Тоесть считывать приходящие данные он может без преобразователя (сейчас считывает), а отправлять что-то на считыватель - нет?

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

Можно модуль. Стоит он меньше бакса. А можно за ту же цену пять штук микросхем и спаять самому. Там на модуле всё равно акромя этой микросхемы ничерта особо нет.

sadman41
Offline
Зарегистрирован: 19.10.2016

Вообще очень удивительно, что пошли какие-то данные. Потому что в RS232 сигналы фактически инвертированы. Условно: VCC - это лог.0, а -VCC - это лог.1.

Или там RS232-TTL, который, как мне помнится, в принципе просто TTL, просто была какая-то замутка с тем, что он проходил через чип FT232 и поэтому китайцы писали, что "интерфейс RS232-TTL". Надо хотя бы потыкать осциллографом, посмотреть до скольки вольт машет сигнал. Или смотреть даташит на чип, с которого эти данные лезут - что про него вендор пишет.

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

Взял max232 и 4 конденсатора. посмотрел в интернете, как правильно собрать. Собрал, но не уверен что правильно))

Подключил к ардуино:

Пробовал и на пины софтверного сериала тоже. В данном фото подключил так (питание + и -)тоде от ардуино ну и PX TX

Открыл монитор порта, чтобы проверить идут ли данные. 

if (Serial.available()) {
    Serial.println(Serial.read());
  }

Пишутся байты по мере замыкания rx и tx на контактах 10 и 9 (где-то видел что так можно проверить работоспособность)

Теперь появился вопрос: а rx tx gnd считывателя куда подключать? Я подключил на 10 и 9, а землю считывателя кинул на gnd (мах232 и ардуину (пробовал и так и так)). Но не считывается информация, хотя считыватель пищит. Где я ошибся?

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

ЕвгенийП пишет:

Правильно поступить, как советовали коллеги - взять конвертер на основе MAX232, благо на али они по "рупь за ведро". Можно, конечно и самогон наколхозить - схем в сети навалом, ищите "конвертер RS232 в TTL"

В сообщении выше описал проблемку, как думаете, что не так?

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017
sadman41
Offline
Зарегистрирован: 19.10.2016

Что-то я не понял - зачем 7,8 (RS-232 side) втыкать в ардуину? Ардуина - это TTL side.

Вы выяснили, импульсы какого размаха и полярности идут со сканера?

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

Спасибо за отклик!
Я ничего не выяснил(. Я не не знаю как это сделать. Вот как написать веб-приложение - знаю. Как на линуксе поднять телефонию - знаю. А это дается с трудом. Осцилографа у меня нет. Я бы проверил. Есть даташит только и желание все это заставить работать.

Я думаю что схема должна быть такая: считыватель - max232 - ардуино

Но не удивительно что это пока что не получается.

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

sadman41 пишет:

Что-то я не понял - зачем 7,8 (RS-232 side) втыкать в ардуину? Ардуина - это TTL side.

Вы выяснили, импульсы какого размаха и полярности идут со сканера?

в

Согласно этого даташита походу так нужно

Считыватель tx, rx - 14 (t1 out), 13 (r1 in)

На ардуину rx tx - 11(r in), 12(t out)

Как в мультике - ННННичего не понимаю. )) 

 

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

sadman41 пишет:

Что-то я не понял - зачем 7,8 (RS-232 side) втыкать в ардуину? Ардуина - это TTL side.

Вы выяснили, импульсы какого размаха и полярности идут со сканера?

УРА! Вроде б разобрался:

считыватель - 14 и 13

на ардуину - 12 и 11

sadman41
Offline
Зарегистрирован: 19.10.2016

Я сам постоянно путаюсь в ногах MAX232.

Насколько помню: TxIN - от TX TTL устройства (прием данных от ардуины) , RxOUT - к  RX TTL устройства (передача на ардуину), TxOUT - к RX RS232 устройства (передача данных на сканер),  RxIN - от TX RS232 устройства (прием со сканера).

 

 

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

sadman41 пишет:

Я сам постоянно путаюсь в ногах MAX232.

Насколько помню: TxIN - от TX TTL устройства (прием данных от ардуины) , RxOUT - к  RX TTL устройства (передача на ардуину), TxOUT - к RX RS232 устройства (передача данных на сканер),  RxIN - от TX RS232 устройства (прием со сканера).

Спасибо! Теперь мне понятно, почему у меня данные ходили "чепуховые"

Скажите, как думаете - если данные теперь приходят корректно СО считывателя на ардуину, то теперь можно нормально посылать в Сериал команды НА считыватель С ардуино? По идее теперь все должно быть правильно же))

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

sadman41 пишет:

Я сам постоянно путаюсь в ногах MAX232.

Ещё бы! 16 пинов - это Вам не три сосны. И в тех то народ иногда блаждает :))))

sadman41
Offline
Зарегистрирован: 19.10.2016

Если данные приходят со сканера действительно корректными, то по идее - и на сканер должны приходить тоже верные.  

sazanof
sazanof аватар
Offline
Зарегистрирован: 08.12.2017

sadman41 пишет:

Если данные приходят со сканера действительно корректными, то по идее - и на сканер должны приходить тоже верные.  

Я проверил в стоковой программе, которая на пару со считывателем была - и стандарт меток uhf глянул, да - 100% все верное! Даже настроение улучшилось.

sadman41
Offline
Зарегистрирован: 19.10.2016

ЕвгенийП пишет:

Ещё бы! 16 пинов - это Вам не три сосны. И в тех то народ иногда блаждает :))))

Да не... Когда UPS по RS232 к ардуине подключал, то обнаружил, что вендоры свои RX-TX на дальних разъемах иногда наоборот пишут. Видимо, чтобы понятно было, что RX разъёма UPS соединять с RX разъема ПК, а не путать пользователя.  Ну, вобщем, в первый раз я этот MAX232 вертел во все стороны полдня - никак не мог понять, куда ей данные совать и откуда вытаскивать.  

ЕвгенийП
ЕвгенийП аватар
Онлайн
Зарегистрирован: 25.05.2015

sadman41 пишет:

 RX-TX на дальних разъемах иногда наоборот пишут

Так китайцы и безо всякой MAX232  - "RX-TX иногда наоборот пишут".

sadman41 пишет:

Видимо, чтобы понятно было

:)))))