Отправка данных в UART а не в com порт

cron
Offline
Зарегистрирован: 01.02.2017
Друзья привет!
Имею следующий код, задача отправить байты не вы com порт на компьютер, а в UART по первому и второму пину с ардуины на другое устройство. 
 
byte GetData[] = { 0xFC, 0x05, 0x40, 0x2B, 0x15 };
Serial.begin(9600);
Serial.write(GetData, 5);
 
В итоге я вижу что данные отправляются на com порт через USB кабель на компьютер и только после того как я открою монитор порта, а через UART(1 и 2 пины) ничего не уходит. Если выдернуть кабель USB и просто подать 12 вольт на дуню то лампочки TX RX молчат данных на 1 и 2 пинах ничего нет.
 
Что я не так делаю? как заставить дуню отправлять байты через 1 и 2 пины при условии что USB отключены. Ведь дуня в будущем будет работать без USB кабеля от компа а просто при подаче 12 вольт. 
 
Надеюсь понятно сформулировал
Спасибо!
Jeka_M
Jeka_M аватар
Offline
Зарегистрирован: 06.07.2014

Во-первых, ардуина не работает с COM-портом на компьютере. Она работает только с UART. Просто на плате ардуино уже стоит USB-UART конвертер, который определяется в комьютере как виртуальный COM-порт.

Во-вторых, аппаратный UART выведен на пины 0 и 1, а не 1 и 2.

В-третьих, к этим же пинам подключён USB-UART конвертер. Поэтому всё что будет отправляться через Serial - будет передаваться одновременно и через пины 0/1, и через USB-кабель.

UPD: А вообще, уточните, что у вас за плата.

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

cron пишет:

Надеюсь понятно сформулировал
 

не вполне.

Во-первых, что за Ардуина?
Во-вторых, точно ли нужно отправлять именно через пины 1 и2? - на большинстве ардуин сериал на пинах 0 и 1
В третьих, как вы видите, что у вас ничего не уходит? Вы что-нибудь на эти пины подключали?
В четвертых. куда вы там собрались 12в подавать?

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

b707 пишет:
куда вы там собрались 12в подавать?
Ну, как куда?

cron
Offline
Зарегистрирован: 01.02.2017

Друзья признателен за ответы!

Плата arduino uno с логотипом ардуины, вроде оригинал.
1) Простите ошибся когда писал, пины конечно же 0 и 1, а не 1 и 2
2) Когда подключаю USB кабель то вижу что диод TX моргает при отправке, а когда выключаю кабель и просто подаю 12в на ардуину она включается но диод не моргает, поэтому я делаю вывод что отправка на пины 0 и 1 не идет.
3) Пробовал менять TX RX результата нет.
 

Правельно я понимаю что:
1) Лампочки TX RX на плате моргают только для кабеля USB. Если кабель USB не подключен то лампочки не моргают, но при этом отправка всеровно идет.
2) Все что отправляется по кабелю USB на комп автоматически дублируется на пины 0 и 1
 

 

 

bwn
Offline
Зарегистрирован: 25.08.2014

cron пишет:

Правельно я понимаю что:
1) Лампочки TX RX на плате моргают только для кабеля USB. Если кабель USB не подключен то лампочки не моргают, но при этом отправка всеровно идет.
2) Все что отправляется по кабелю USB на комп автоматически дублируется на пины 0 и 1

На уне-нане сейчас не проверить, но на связке: чип 328 и USB-UART на СH340, Serial.println("XXX"); мигает независимо от подключенного кабеля USB.

cron
Offline
Зарегистрирован: 01.02.2017

Друзья вобщем уточню задачу!

Есть дуня уно и устройство с com портом. Задача соеденить их и передать данные с дуни на устройство. 

Я подключаю три кабеля RX TX GND. Достаточно ли этого для общения дуни и устройства? так как от компьютера устройство работает, а от дуни нет.

Хелпую друзья!

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Переходник ttl-rs232 вас спасет

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Нет.
Варианта два:
1. Простой - взять про мини без сериал ковертора и поставить MAX232.
2. Сложный - выпаять с уно сериал конвертор и поставить MAX232.

cron
Offline
Зарегистрирован: 01.02.2017

Есть вот такой переходник на max3232 CSE от дуни разъем справо подключаю RX TX GND. С верху питание от компа +12В и +5В. С лева устройство. Если в место дуни воткнуть комп порт компьютера то устройство отвечает и работает на запросы с компа, а с дуни не хочет.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Определитесь уже - устройство имеет реальный COM порт с уровнями сигнала 12 вольт? Если да, то как вы так подключает то комп то ардуино не понятно

Вот такой переходник прекрасно работает как промежуточные устройство между COM и ардуино

https://s.click.aliexpress.com/e/A2Nx29y

MaksVV
Offline
Зарегистрирован: 06.08.2015

попробуйте использовать софт уарт (софт сериал). Иногда Хард сериал глючит, т.к. к нему подключен еще юсб<->уарт конвертер. Тогда юсб вам мешать не будет. Толко скорость не должна быть высокой на софт сериале. 38400 чтоли максимум 

cron
Offline
Зарегистрирован: 01.02.2017

ОК!) 
Устройство не имеет класического ком порта, но умеет упровляться с com порта компьютера, что успешно выполняется, когда с компа через терминал кидаю команды. 

Задача стоит убрать комп и в место него подключить дуню и отправить через UART дуни туже команду.
Я понимаю что дуня 5 вольтовая а устройство работает на 12 вольтах. Для этого я использую вот этот согласователь уровней. Его же использую и при подключении к компьютеру. 

Задам вопрос по другому для управления устройством из дуни достаточно проводов RX TX GND или надо еще управляющие провода подать? кстати пробовал с дуни еще подать +5в ничего не помогает.

MaksVV
Offline
Зарегистрирован: 06.08.2015

нарисуйте схему как у вас с компом работает

cron
Offline
Зарегистрирован: 01.02.2017

Уже попробовал подключить softserial увы результат неутешительный т.е. тотже. Но за совет спасибо!

MaksVV
Offline
Зарегистрирован: 06.08.2015

смутила фраза

cron пишет:

Я понимаю что дуня 5 вольтовая а устройство работает на 12 вольтах. Для этого я использую вот этот согласователь уровней. Его же использую и при подключении к компьютеру. 

дак значит у устройства тоже простой уарт? тогда дуню напрямую нужно подключать

MaksVV
Offline
Зарегистрирован: 06.08.2015

такое ощущение, что на фото переходника, справа разъем это для подключения компорта, а слева уарт ттл. А вы в правый разъем дуню втыкаете, вот и не работает. 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

cron пишет:

ОК!) 
Устройство не имеет класического ком порта, но умеет упровляться с com порта компьютера, что успешно выполняется, когда с компа через терминал кидаю команды. 

Это как?

Цитата:

Задача стоит убрать комп и в место него подключить дуню и отправить через UART дуни туже команду.
Я понимаю что дуня 5 вольтовая а устройство работает на 12 вольтах. Для этого я использую вот этот согласователь уровней. Его же использую и при подключении к компьютеру. 

Какой сигнал нужен Вашему устройству, мы не знаем. Остается лишь поверить Вам, что 12 В.

Если все работает, в чем вопрос?

Цитата:

Задам вопрос по другому для управления устройством из дуни достаточно проводов RX TX GND или надо еще управляющие провода подать? кстати пробовал с дуни еще подать +5в ничего не помогает.

На этот вопрос нельзя ответить до тех пор, пока неизвестны параметры порта устройства.

cron
Offline
Зарегистрирован: 01.02.2017

MaksVV пишет:

такое ощущение, что на фото переходника, справа разъем это для подключения компорта, а слева уарт ттл. А вы в правый разъем дуню втыкаете, вот и не работает. 

Да справо разъем мама com порта он втыкается в компьютер. А слева выход на устройство. 
Я посчитал что если у меня в место компа дуня то и втыкать надо в тот же разъем куда и компьютер втыкался.
Я не прав?

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

cron пишет:

Уже попробовал подключить softserial увы результат неутешительный т.е. тотже. Но за совет спасибо!

че то вы не так делаете, все прекрасно работает с "железным" COM портом и SoftSerial

схему показывайте, по другому никак.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Выход Tx дуни нельзя соединять с любым другим выходом.
При выдаче этими выходами разных уровней вы устраиваете ими короткое по питанию.

MaksVV
Offline
Зарегистрирован: 06.08.2015

cron пишет:

MaksVV пишет:

такое ощущение, что на фото переходника, справа разъем это для подключения компорта, а слева уарт ттл. А вы в правый разъем дуню втыкаете, вот и не работает. 

Да справо разъем мама com порта он втыкается в компьютер. А слева выход на устройство. 
Я посчитал что если у меня в место компа дуня то и втыкать надо в тот же разъем куда и компьютер втыкался.
Я не прав?

ну вот смотрите. У вас переходник уарт <-> компорт.   Соответвенно если справа подключаете компьютер это и есть компорт - всё работает, получается так:

устройство_уарт | уарт_переходник_компорт| компорт_компьютер    - работает

Из этого можно с высокой долей вероятности предположить, что слева, куда подключено устройство, уарт ттл. Далее вы берёте и через переходник подключаете дуню, у которой тоже уарт ттл, подключаете к уарт ттл устройства, но делаете это через переходник уарт <-> компорт, получается так: 

 устройство_уарт | уарт_переходник_компорт| уарт_ардуино  -  не работает

 а нужно так:

устройство_уарт | уарт_ардуино   - должно заработать

только есть небольшая вероятность, что я не прав, тогда можно испортить дуню. Нужно узнать какой вольтаж у тх и rx вашего устройства

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

Вам не нужен переходник. Подключать нужно дуню сразу к устройству в левый разъём. Тх устройства к Rx дуни подключить через резистор 1к.

cron
Offline
Зарегистрирован: 01.02.2017

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

причем ответ лежит в названии темы. Прочитайте название топика, и сделайте что там написано 

MaksVV
Offline
Зарегистрирован: 06.08.2015

не телефон не дам, он и так у меня не затыкается. Пишите сюда. Вам уже советы дали, а результат вы не озвучили. 

cron
Offline
Зарегистрирован: 01.02.2017

И так попорядку!

Устройство у меня купюрник cashcode MFLV-2110 c power interface 1710
Оф документация, распайка гнизда на 40 странице - http://www.tdmegalit.ru/upload/iblock/07c/cashcode_cashcode_mfl-0336_v2.pdf

из форумов понял что нельзя именно эту модель с интерфесой 1710 подключить напрямую к ком порту компьютера, без преобразователя уровней, так как у него 5 вольтовое управление. И васамом деле без преобразователя я несмог его разбудить от компа. Подключив такой преобразователь она стал работать от компьютера успешно. 

Подключив вместо компьютера ардуину у которой 5 вольт, предпологаю что тут преобразователь не нужен, так как купюрнику тоже для приема команд надо 5 вольт. Но сам купюрник питается от 12 вольт и у него нет пинов для 5 вольт исходя из оф.документации - ВОТ ЗАГАДКА нужен в данном случаи преобразователь или нет ???

Пробовал подключить дуню напрямую к купюрнику т.е. соеденить их RX TX GND увы не помогает, местами менял RX TX тоже не помогает (Дуня кстати живая осталась).  

Незнаю есть ли у этого купюрника свой UART в документации ничего не нашел про это. Поэтому прошу помощи.
Монитором com порта на компе я вижу что дуня шлет успешно команды из своего com порта, поэтому я делаю вывод что дуня работает корректно.

Прошу помощи голосом чую что проблема то несложная, ну если никто неготов дать номер скайпа или телефона, то прошу еще совета.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Из документации pdf

Валидатор FL позволяет выбрать любой из следующих вариантов интерфейсов: Вариант 1. Opto-Isolated, 12 Volt CC FLBDP Вариант 2. RS232 levels, 12 V CCNET (single slave mode) или CC-BDPS Вариант 3. Isolated Pulse Low Current, 12 V CC-IPL Вариант 4. RS232 levels, 24 V DC, CCNET (single slave mode) или CC-GPC22.

а у вас какой?

ниже в документации есть установки скорости интерфеса - какая у вас стоит?

соотвественно если 8 и 9 пины коннектора воткнуть в TXD RXD COM порт компьютера и запустить например putty - обмен идет? управлять валидатором с компа получается?

Вот после этого уже можно будет понять как жить дальше.

MaksVV
Offline
Зарегистрирован: 06.08.2015

нужен код и схема подключения чтобы чтонибудь далее советовать

MaksVV
Offline
Зарегистрирован: 06.08.2015

при ваших манипуляциях чтонибудь в разъем db37 воткнуто? 

cron
Offline
Зарегистрирован: 01.02.2017

Друзья! я похоже понял в чем дело.

Подскажите как устанавливаются параметры serial порта на дуне, а именно:
1) скорость (это понятно - Serial.begin(9600))
2) Start bit: 1
3) Data bit: 8
4) Parity bit: EVEN
5) Stop bit: 1

Согласно оф. документации нужны такие параметры. Через программы на компе купюрник работат только при таких настройках com порта.

В итоге по окончанию я обязательно опишу все свои ошибки и их личение.

MaksVV
Offline
Зарегистрирован: 06.08.2015

так можно только через хард сериал ардуино Serial.begin (9600, SERIAL_8E1)

cron
Offline
Зарегистрирован: 01.02.2017

несовсем понял, SERIAL_8E1 это параметр что означает?  

правельно я понимаю что com порт ни как не конфигурируется? 
а как тогда если железка требует параметр к примеру 
Parity bit: EVEN ?

Обясни пожалуйста поподробнее. В гугле совсем нет информации о настройках com порта дуни.

 

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

EVEN это вторая по порядку буква E вот тут, у MaksVV : SERIAL_8E1

MaksVV
Offline
Зарегистрирован: 06.08.2015

В гугле есть все, не врите. 

cron
Offline
Зарегистрирован: 01.02.2017

Эх увы не помогло задать параметры порта.

Увы схемы нет. так как я не нашел распиновку преобразователя. Выяснил ее методом индукции гловного мозга(метод тыка). 

т.е. на вход преобразователя с верху приходит питание 12 в;
Справо подключю ардуину в черный разъем он выглядет как мама com порта по схеме TX(2пин ) RX(3пин) GND(5 пин);
Слевой стороны включаю купюрник питаю его от этого разъема и так же забираю TX RX с этого же разъема.

Судя потому что при подключении к компу эта схема работала делаю выводы что подключил правельно.

Кстати при подключении купюрника через преобразователь к com порту компьютера запускаю терминал отправляю команды вида FC 05 40 2B 15 купюрник отвечает реагирует и обрабатывает команды.

Убераю компьютер включаю дуню. С дуни забираю три кабеля TX(0 пин ) RX(1 пин) GND (GND пин) и втыкаю их в черный разъем в место компа;

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

MaksVV
Offline
Зарегистрирован: 06.08.2015

Это уже и так понятно. В разъем db37 при этом воткнута интерфейсная плата? Судя по пдф они там разные

MaksVV
Offline
Зарегистрирован: 06.08.2015

короче я понял. У вас интерфейсная плата воткнута Opto-Isolated. Нужно подключить TX и RX ардуино напрямую к 12пиновому разъему купюроприемника.

tx_arduibo - 9pinCashcode(rx);     

rx_arduino - 8pin Cashcode(tx)

gnd_arduino - 4pin Cashcode (gnd_interface)

и питание подать на купюроприёмник туда же,куда оно подается, когда вы через max232 с компом соединяетесь. 

У вас не работало, потому что вы, подключая ардуино напрямую к купюрнику не подавали питание на купюрник, а там интерфейс с опторазвязкой, которая требует питания

cron
Offline
Зарегистрирован: 01.02.2017

MaksVV и другие признателен за ответы.

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

Схема подключения следующая:
Дуня +5 -> Желтый кабель купа
Дуня GND -> Черный кабель купа
Дуня 0 пин -> 8 пин купа
Дуня 1 пин -> 9 пин купа

Еще раз спасибо.

 

cron
Offline
Зарегистрирован: 01.02.2017

Есть еще вопрос!

От купа приходят данные вида FC 05 40 2B 15, как мне на дуне считывая байты увидеть имеено такой вид ответа?

Что я делаю:
1) Отправляю каждые 200 мс запрос о состонии купа request , в ответ должен увидеть код ответа.

 Serial.write(request, 5);
  delay(200);  

Вот такой код собирает ответ купа

 

String str;

 if (Serial.available() > 0 ) {
       while (Serial.available() > 0) {
          str += Serial.read();
      }
       Serial.println(str);   
       str = "";
 }

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

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

Прошу помощи!

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Если по простому, читайте как байт, а выводите с дополнительным параметром HEX. Если именно собирать в строку - то ручками.

MaksVV
Offline
Зарегистрирован: 06.08.2015

как всегда все так делают. Для связи с купюрником вам нужен один уарт , а для связи с отладкой (терминальная прграмма) - другой. Вы же пытаетесь одним всё сделать. 

В итоге для связи с купюрником какие настройки Serial по стоп битам и чётности? если всё стандартно прлучилось, то свзязывайтесь с купюрником по софтсериалу (например пин 7 и 8 ардуино) а для отладки ипользуйте хард Serial. 

update: а вижу, нестандартные настройки. 

Софтсериал такие не поддерживает. Тогда вам нужна ардуино мега или леонардо, или промикро, где более одного хард сериала. 

или дополнительный usb<->uart преобразователь типа сh340 или pl2303, pl2301 и т.д.

MaksVV
Offline
Зарегистрирован: 06.08.2015

пример для меги, где купюриник подключен на Serial3, а вывод на сериал монитор через Serial



//#include <SoftwareSerial.h>
//SoftwareSerial cashcode(7,8 ); // RX, TX

#define cashcode Serial3 // сериал порт к которому подключен купюрник 

byte header = 0;          // состояние заголовка (заголовок определяется по первым байтам 0хFC и 0х05 см. ниже)
byte message_size = 5;    // размер тела принимаемого сообщения, кол-во байт

byte RequestCashcode[] =  {0xFC, 0x05, 0x40, 0x2B, 0x15};  // запрос на купюрник 

byte j = 2;               // инкремент
const byte bufsize = 50;  // размер буфера принятого сообщения
byte buf [bufsize] = {0}; // буфер принятого сообщения


uint32_t curmillis = 0;     // снимок системного времени

byte waitbyte_time = 1;   // задержка, мс для успевания заполнения буфера RX (подрегулировать в зависимости от уровня жизнидеятельности на Марсе)
uint32_t timerdelay = 0;  // таймер ожидания байт (для успевания заполнения буфера УАРТ)
bool Delay = 0;           // таймер ожидания байт (для успевания заполнения буфера УАРТ)
#define TIMER_DELAY Delay = 0; timerdelay = curmillis  // включение этого таймера

uint32_t prevRESETheader=0; // таймер сброса заголовка если в момент приёма заголовка данные оборвались
bool RESETheader_timer = 0; // таймер сброса заголовка если в момент приёма заголовка данные оборвались

uint32_t prevRequest = 0;   // таймер периодических запросов на купюрник
int RequestPeriode = 200;   // периодичность запросов , мс



void setup() {

Serial.begin(9600);
cashcode.begin(9600, SERIAL_8E1);

}


void loop() {
  
  curmillis = millis();

// периодически отправляем запрос на купюрник
if (header==0 && curmillis - prevRequest > RequestPeriode) {
  cashcode.write (RequestCashcode, sizeof(RequestCashcode));
  prevRequest = curmillis;
  }
  
  receive ();
  }





void receive () {
  
  if (cashcode.available() ){
    

 // первый старт байт
 if (header == 0 && Delay){buf[0]=cashcode.read();   if (buf[0]==0xFC){
  TIMER_DELAY ; header = 1; 
  Serial.print (buf[0], HEX);  Serial.print (" "); RESETheader_timer =1; prevRESETheader = curmillis; }}

 // второй старт байт
 if (header == 1 && Delay){buf[1]=cashcode.read(); if (buf[1]==0x05){
  TIMER_DELAY ; 
  Serial.print (buf[1], HEX);  Serial.print (" "); header = 4;} 
  else {header = 0; j=2; RESETheader_timer = 0;}} 
 
 
 // пишем тело сообщения 
 if (header == 4 && Delay && j< message_size) {
 buf[j] = cashcode.read(); 
 
 if (j==message_size-1) header = 5; // закончили принимать
 
 TIMER_DELAY ; Serial.print (buf[j], HEX);  Serial.print (" ");  j++;} 
 }

 // если сообщение приняли, действуем
 if (header == 5) {TIMER_DELAY ;  Serial.println();  
header=0; j=2; RESETheader_timer = 0;
}

if (!Delay && curmillis - timerdelay > waitbyte_time) Delay = 1; // таймер ожидания байт (для успевания заполнения буфера УАРТ)

// таймер сброса заголовка если данные оборвались во время приёма заголовка
if (RESETheader_timer && curmillis - prevRESETheader > 500) {RESETheader_timer = 0; header = 0;}  
  
     }

 

cron
Offline
Зарегистрирован: 01.02.2017

ООООО примного благодарен за код, супер!!!

Да! соеденение по serial было не стандартным. а именно 8E1.

Спасибо за помощь!