com-порт

Dimrix
Offline
Зарегистрирован: 16.05.2018

Доброго всем времени суток. Столкнулся с проблемой передачи данных по ком-порту.

Есть устройство, которое передает команду другому устройству по ком-порту. Команда мне известна (например cp). Создал проект, передаю эту команду - не работает. Ладно, подключаюсь не к устройству получателю, а к устройству управления, читаю команду и офигиваю: вместо 99, 112 (соответсвует коду ASCII  c, p) принимаю 78, 20. Попытался понять логику, не удалось, время поджимает, решил тупо "отсканированную" команду отправить на устройство управления - но опять не работает. В чем может быть момент: почему отправляемые точ в точ данные не обрабатываются источником?

Вот код передачи данных:

Serial.begin(9600);

Serial.write(78)

Serial.write(20);

Serial.write(256);//признак конца строки

Параметры порта указаны одинаково как на устройстве отправителе так и у меня.

Считывал команды таким образом:

if (Serial.available() > 0) {
    val = Serial.read();
    Serial.print("I received: ");
    Serial.print(val);
    Serial.println();
 
Какие будут предложения?
ToRcH2565
Offline
Зарегистрирован: 16.05.2015

>>Serial.write(256);//признак конца строки

Оригинально но работать не обязано.

Что именно выводит вам в консоль "сканирование" ?

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

Dimrix пишет:

Serial.write(256);//признак конца строки

вот эта строка явно отправляет не то, что вы думаете.

Кроме того, что-то мне сомнительно, что конец строки - это 256. Это в каком протоколе?

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Это актуально для отправки байта(чего этот код не делает) переполнение и отправляется ноль.

 

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

ToRcH2565 пишет:

Это актуально для отправки байта(чего этот код не делает) переполнение и отправляется ноль.

зачем переполнение? а сразу ноль отправить нельзя? :)

 

ToRcH2565
Offline
Зарегистрирован: 16.05.2015

b707 пишет:
зачем переполнение? а сразу ноль отправить нельзя? :)

Вопрос не совсем по адресу(автор топика не я =), просто я уже видел подобные извращения =) Сам пользовался во времена "паскаля", правда не понимая как это работает =)

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Dimrix пишет:

...и офигиваю: вместо 99, 112 (соответсвует коду ASCII  c, p) принимаю 78, 20. ...

Вот код передачи данных:

Serial.begin(9600);

Serial.write(78)

Serial.write(20);

Вас правда удивляет, что в результате работы этого кода Вы получаете 78, 20, а не 99, 112?

Цитата:

Serial.write(256);//признак конца строки

Число 256 в байт не помещается. Что будем делать?

Dimrix
Offline
Зарегистрирован: 16.05.2018

Спасибо за кучу коментов, и сразу отвечаю:

Serial.write(0); - меня компилятор послал: мол не допустимое значение (сам не понял как так и вышел из ситуации использовав 256). Но даже если убрать это 256 и передавать одним из способов:

1. Serial.print("cp");

2. Serial.println("cp");

3. Serial.write(99);Serial.write(112);

4. char txt[2]={'c','p'}

...

Serial.print(txt);// или Serial.println(txt);

Получаю на входе бред! Причем, у меня в мониторе порта от Ардуины ИДЕ я вижу нужный текст, а вот на компорт физически (читал putty, free serial port monitor и т.п.) приходит бред. При этом на тех же кабелях я отправляю данные с ком-порта устройства и читаю данные, которые получаю, теми же программами - приходит то что отправилось, а если вешаю кабеля на ардуину уно (0, 1 и GND) приходит бред на ардуиновский монитор порта. Скорости устройств указаны одиноково (9600), четности и т.п. тоже те что надо. Курил интернет: читал что бывает скорость пишет ардуино одну, а реально работает на другой, т.е. менял скорости. Такое впечатление, что какого то на ардуине в момент отправки/получения данных происходит перекодировка. Как победить?

Кстати, может это важно (я специально указал пины, на которые вешаю ком-порт) - на ардуине прикомутации начинает гореть светодиод ТХ (причем все время), а вот что бы какая то индикация была на RX в момент получения или прочее я так и не увидел, может я неверно подключил (0 и 1 менял местами)?

Dimrix
Offline
Зарегистрирован: 16.05.2018
ToRcH2565
Offline
Зарегистрирован: 16.05.2015

Dimrix пишет:

1. Serial.print("cp");

2. Serial.println("cp");

3. Serial.write(99);Serial.write(112);

4. char txt[2]={'c','p'}

...

Serial.print(txt);// или Serial.println(txt);

Так, давайте начнем с самого начала, вы что отправляете? текст? char? байты(byte buf[3] = {99,112,0})?

Dimrix
Offline
Зарегистрирован: 16.05.2018

У меня отправляется строка с Ардуино на компорт другого устройства. На сколько я ознакомился с тематикой проблемы: стандартный ком-порт использует -12в~-5в и +5в~+12в для передачи 0 и 1, а на пинах Ардуино формируется 0 и +5в. Таким образом я без пребразователя передаю некорректную информацию, т.к. у меня:
1. Нет сигнала -5в~-12в
2. На сколько я понял + в Ардуино используется для передачи логической 1, а в rs232 наоборот логический 0

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

А-фи-геть!

Dimrix, Вы специально размещаете аппаратные проблемы в раздел программирование, чтобы сбить всех с толку?

Dimrix
Offline
Зарегистрирован: 16.05.2018

Когда я размещал, я считал ошибку программной.
Adriano, вам палку дать, чтобы меня наказать или палка это не серьезно, необходимо что то по жёстче? В интернете куча примеров работы с ком-портом, но ни в одном нет упоминания о дополнительных девайсах. Извините, но до сих пор не знал вольтаж, на котором работает обычный ком-порт...
И заметьте, я не сидел и тупо ждал ответа, а дальше упорно искал ответ, более того, по-видимому, я его нашел, спасибо за ваше участие, не хотел никого вводить в заблуждение.

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

Dimrix пишет:
В интернете куча примеров работы с ком-портом, но ни в одном нет упоминания о дополнительных девайсах.

https://ru.aliexpress.com/store/product/RS-232-module/1950989_3253093314...

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Dimrix пишет:
В интернете куча примеров работы с ком-портом, но ни в одном нет упоминания о дополнительных девайсах. Извините, но до сих пор не знал вольтаж, на котором работает обычный ком-порт...

Вы это всерьез?

Если Вы не знаете "вольтаж" (кстати, по-русски называется - напряжение), то IMHO первое, что надо сделать, - это поинтересоваться хотя бы в самом общем виде: https://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D1%81%D0%BB%D0%B5%D0%B4%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D1%80%D1%82

https://ru.wikipedia.org/wiki/RS-232

Рискну без просьбы с Вашей стороны дать Вам совет: если Вы не считаете нужным перд тем, как что-то куда-то подключать, выяснить все, что касается "вольтажа" и "каррентажа" (или как это на Вашем жаргоне называется?), лучше держитесь подальше от любого электрооборудования. Это исключительно с заботой о Вашей безопасности.

Dimrix
Offline
Зарегистрирован: 16.05.2018

Спасибо за совет, о великий гуру andriano, но я чётко описал свои действия: что я контакты с ком порта повесил напрямую на Ардуино на 0, 1 и землю, и вы, о великий и все знающий, даже не ткнули меня незнающего тупицу в тот факт, что я делаю это не верно. Что ж так то, промах о великий?
А для тех, кто также наступил на данные грабли пишу: МАХ232 или аналоги решение проблемы.

Dimrix
Offline
Зарегистрирован: 16.05.2018

Спасибо, sadman41, уже взял МАХ232 и решил проблему.

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Dimrix, откуда я знаю, куда Вы повесили контакты Ардуино, если схему Вы привести забыли, а хрустальный шар у меня испортился? В проектах Ардуино на каждом шагу COM-порт используется в ТТЛ уровнях. Вопрос-то в другом: если бы Вы сочли возможным почитать хоть что-нибудь перед итем, как "подключать контакты", Вы бы неизбежно наткнулись на упоминание об отрицательном напряжении в диапазоне от -5 до -15 В, и это (я искренне надеюсь на это) заставило бы Вас усомниться в возможности непосредственного подключения Ардуино к первому попавшемуцся COM-порту. И по крайней мере задаться вопросом: а в каких уровнях передаетя сигнал с того устройства, которое Вы намеревваетесь подключить а Ардуино.

Видите ли, Dimix, разные люди ведут себя по-разному в одних и тех же ситуациях. В частности, в ситуации, когда они осознают имеющийся у них недостаточк знаний: одни стремятся этот недостаточк лиувидироваться, а другие надеются на авось. Так вот этим последним крайне не рекомендуется иметь дело с электричеством. Для их же блага. Я искренне надеюсь, что с Вами все будет хорошо. Но Вам об этом тоже следовало бы позаботиться.

Dimrix
Offline
Зарегистрирован: 16.05.2018

Знаете, вы мне напоминаете один в один человека, который действительно имеет очень хорошие знания в электроннике, но не смотря на это он ничего толком так и не сделал. Есть люди, которые знают и не делают, а есть люди, которые хоть и не знают, но учатся и стремятся что-то сделать. Не смотря, на мою безграмотность, на которую вы не устаете мне намекать, я много чего добился, более того мне этого мало, и я иду дальше учится и добиваться. А если вы считаете, что 5В или даже 15В (при 30-50ма, а то опять ткнете носом, что не важно напряжение, а важна сила тока), может причинить вред мне, или 4$, которые я отдал за Ардуино, заставят меня жить в проголодался несколько месяцев, то мне вас искренне жаль. Сидите и дальше на вашем насиженном теплом месте и высказывайте умные речи и тыкайте носом, мимо проходящих неучей: они будут добиваться чего-то, а вы сидите дальше... Успехов вам!

Dimrix
Offline
Зарегистрирован: 16.05.2018

Простите, глюк браузера: продублировалось сообщение

andriano
andriano аватар
Онлайн
Зарегистрирован: 20.06.2015

Dimrix пишет:
Знаете, вы мне напоминаете один в один человека, который...
Вряд ли следует уделять так много внимания моей скромной особе. Подумайте лучше о собственной безопасности.