Протокол обмена?
- Войдите на сайт для отправки комментариев
Сб, 16/03/2013 - 11:13
Привет всем подскажите пожалуйста как реализовать работу данного протокола по RS 232 HEX файл с ардуино?
Почитал в интернете это стандартный RS232 com протокол обмена
Отправляю цифру 1 с ком порта
У меня получается 6 бит данных, может я конечно ошибаюсь.
Подскажите как отправлять с ардуино указанный протокол?
Отправляю с ардуино в сериал на ком порт цифру 1 там уже получается не 6 и не 8 бит а гораздо больше
1. Не понятно как и где вы получили такую картинку. Это картинка именно с СОМ-порта RS-232, потому как сигнал инвертирован.
2. В конце один стоповый бит(если вы не меняли стандартные настройки порта), а не 2 и так как сигнал инвертирован - это 0.
То есть что мы получаем, по вашей картинке: 1011100110, инвертируем 0100011001, убираем стоповый и стартовый биты 10001100, дальше как вы видите последовательность бит обратная, потому как при передаче байт передается перевернутым, перевернем байт обратно, 00110001 - представим в десятичном виде - получим 49, что в кодах АСКИ что ??? Правильно - ваша 1, которую вы отправили.
Отправляю с ардуино в сериал на ком порт цифру 1 там уже получается не 6 и не 8 бит а гораздо больше
И на выводах дуины сигнал не инвертирован, так как это UART TTL, в отличие от сигнала на картинке.
Вот теперь до меня дошло
Чёта я опять запутался когда инвертируем цифры получаются задом напреет или у вас просто ошибка?
Не пойму почему 1 меняется на 0
Не путайте инвертирование и последовательность.
Инвертирование:
00000000 10101010 10011010
11111111 01010101 01100101
Обратная последовательность:
11100000 11000001 10100011
00000111 10000011 11000101
Теперь понял просто меняем 1 на 0 а нули на 1 инвертируем
Инвертация происходит потому что, UART RS232 не есть UART TTL
| интерфейс | UART RS232 | UART TTL |
| лог. 1 | -12В (-5В) | +5В (+3.3В) |
| лог. 0 | +12В (+5В) | 0В |
Тоесть если нам нужно отправить с ардуино на сериал в ком пор цифру 1
то мы пишем?
А откуда тогда взять два байта которые покроям находятся?
Нет. Так вы отправите число 49 в бинарном виде кодами АСКИ. Вы лучше напишите что хотите.
Пытаюсь разобраться как это всё работает.
Вот как мне с ардуино pin12 отправить цифру 1 в ком порт?
А откуда тогда взять два байта которые покроям находятся?
Пытаюсь разобраться как это всё работает.
Вот как мне с ардуино pin12 отправить цифру 1 в ком порт?
В общем что вы хотите мне не понятно. Хотите разобраться такое UART - гугл в помощь.
Я та сейчас на объясняю)))
может я не правильно мыслю поправьте меня
Вот есть протокол передачи ардуино в сериал 10 байт из них 8 байт данных
1 старт, а 10 стоп
Старт
00110001
стоп
Вопрос как это передать на любой из цифровых выходов
А к цифровому выходу я цепляю ком пор и в гип. терминале должна быть единица
вы уж извините что у меня такие вопросы , да и объяснять я внятно не умею
pin12 цифровой выход с ардуино
это тогда получается протокол UART?
тогда как сделать чтобы ардуино отправлял данные в этом протоколе?
У меня есть замученное жизнью устройства галилео
Было совсем умершее но оживить я его оживил
http://7gis.ru/doc/UserManual0157.pdf
У этого устройства есть цифровые входы RXD сигнал первого канала RS232 TXD сигнал первого канала RS232
Работает по универсальному протоколу для RS232/RS485
У голилео есть свой конфигуратор
http://7gis.ru/support/konfigurator.html
в которых видно что приходит на цифровые входы
То есть если мы падаём на цифровой вход данные скажем в виде 111 то в конфигураторе мы ведем это число.
И вопрос в том как совместить ардуина на этот протокол чтобы ардуино мог передавать цифры на цифровой порт галилео?
По протоколу я нашел ещё вот это там вроде всё описано но для меня это дикий лес ст.15.
http://control74.ru/img/files/docs/Manual-LLS-20160-v8.pdf
Подскажите как инверти данные и адоптировать протокол, чтобы то устройство читала отправленные символы с ардуино?
В первую очередь нужно согласовать уровни RS232 и TTL, потому как если вы подключитесь напрямую к дуине, она может сгореть, для этого нужна например MAX232, либо готовый шилд RS232 Shifter.
И вот еще почитайте http://arduino.ru/forum/processing/serial-read#comment-25842
У меня согласования на ADM3202 собрано это тоже самое что и макс232
Так что вы хотите от этого Галилео?
На цифровой вход голилео подорвать свои данные с ардуино чтобы они отображались в ковигураторе
Если вы под "цифровой вход" подразумеваете RS232, то судя по мануалу к нему можно подключить только
1 – цифровой датчик уровня топлива (относительный уровень N);
2 – цифровой датчик уровня топлива (частота F);
3 – внешний модуль ГЛОНАСС;
4 – видеокамера Galileo;
5 – навигатор Garmin;
6 – CAN-LOG;
7 – индикатор CUB5;
8 – курсоуказатель Trimble (только для Galileo GPS).
Можно сказать и так с эмитировать
1 – цифровой датчик уровня топлива (относительный уровень N);
То есть подавать свои данные
На этот вход
типа протокола обмена: в бинарном (HEX) виде или в символьном виде (передачей ASCII-последовательностей). Для работы рекомендуется использовать бинарный протокол обмена.
Данные, между датчиком и внешним устройством передаются в виде сообщений стандартного формата. Сообщение передаѐтся пакетами байт. Передача каждого байта начинается СТАРТ битом, а завершается СТОП битом (Рисунок 10). Данные передаются младшим байтом вперѐд.
А вот я перехватил команду запроса вот только я не могу понять почему тут 12 байт
Хотя выше написано 1 старт и 1 стоп
Я наверно не так это понимаю
Где тут старт бит , 8 байт данн, стоп бит?
Или команда запроса идёт в другом протоколе?
Вы понимаете разницу между битом и байтом?
И откуда эта картинка? Так как совершенно неизвестно куда вы тыкаете щупом осциллографа и что отправляете, то могу предположить, что это опять таки RS-232. Так же не видно что дальше справа, поэтому предположу что ничего - то есть логическая 1 (-12В).
Тогда получаем следующее:
10111001101000000000 , инверируем:
01000110010111111111 , разобьем на байты информации и стартовые и стоповые биты:
0 10001100 1 0 11111111 1 , и получаем два байта обратной последовательности:
10001100 11111111 , переворачиваем:
00110001 11111111
Получаем два байта:
| BIN | DEC | HEX | ASCII |
| 00110001 | 49 | 0х31 | 1 |
| 11111111 | -1 (255) | 0хFF | ÿ (я) |
Бит это 0 или 1 , в 1 байте 8 бит
А картинка эта с выхода TX Голилео
Судя по мануалу это команда опроса на датчик
Скорей всего вы правы я не всю оцилограмму записал
Вот записал полный код опроса
Попробовал подцепить скан портов вот что он выдаёт
TXD1 галилео (TXD1-RXD1 вход и выход на датчик с галилео)
этот код приходи часто примерно каждые 10 секунд FA 1A FE
HEX BIN DEC
FA 1A FE 11111010 00011010 11111110 250 26 254
FA F9 11111010 11111001 250 249
FD 00 FF 11111101 00 11111111 253
То есть я как понял приходит команда запроса на выдачу пакета и через 100мс отправляется пакет с устройства типа вот в таком формате
Например, F=0AF9 t=1A N=03FF.0 <CR><LF>,
где F – текущее значение частоты, t – текущее значение температуры в градусах по Цельсию, N – значение уровня.
http://control74.ru/img/files/docs/Manual-LLS-20160-v8.pdf
Хотя судя по мануалу данные должны идти без запроса
Подскажите как сделать чтобы ардуино читал команды запроса и отравлял пакеты подобного примера на вход голилео?
Подключился к выходу голилео через схему согласования на сериал пор ардуино и включил сериал монитор там приходят одни квадратики скорость менял бесполезно
Провёл маленький эксперимент думал он что то прояснит, а не тут то было.
Отправляю в сериал соединения с ардуино на ком порт
записываю на оцил.
И что мы получаем
1 11010011 0 1 01011101 0 1 01001111 0 1 10101111 0
И мы получаем 4 байта
Ищем где тут зарыта 4E - 01001110 - N
Не понимаю почему становится 4 байта
И самое главное где тут буква N?
Кто-нибудь может объяснить?
Методом научного тыка определил что
4E вставляется во 2 байте
Не понимаю я что то не так делаю может я не правильно считаю биты?
Тоесть если нам нужно отправить с ардуино на сериал в ком пор цифру 1
то мы пишем?
А откуда тогда взять два байта которые покроям находятся?
Нет. Так вы отправите число 49 в бинарном виде кодами АСКИ. Вы лучше напишите что хотите.
Не понимаю почему становится 4 байта
В сообщении #22 Максим давал вам ссылку и совет почитать на мой пост в другой ветке, где я детально расписывал почему при Serial.println(78) у вас пошлется четыре байта.
И там же есть рецепт как послать байт именно как байт. Serial.write поможет отцу русской демократии ;)
Serial
.println(78,HEX);
И так. 78 в шеснадцатиричном представлении это 4E.
1 11010011 0 1 01011101 0 1 01001111 0 1 10101111 0 , инвертируем:
0 00101100 1 0 10100010 1 0 10110000 1 0 01010000 1 , выделяем байты:
00101100 , 10100010 , 10110000 , 01010000 , переворачиваем:
00110100 , 01000101 , 00001101 , 00001010 , представим в десятичном виде:
52 , 69 , 13 , 10 , смотрим в таблицу ASCII и получаем:
4 E Возврат каретки , Перевод строки
Как отправить "чистый" байт как он есть я вам уже писал выше.
Ну вот теперь я эту часть понял благодарю за разъяснения
Это всё моя невнимательность
Ну вот теперь вырисовывается как должен выглядеть пакет который передаётся на галилео
F=0AF9 t=1A N=03FF.0 <CR><LF>,
F – текущее значение частоты, t – текущее значение температуры в градусах по Цельсию, N – значение уровня. Все значения в шестнадцатеричном виде.
F=0AF9
1 00110000 0 1 01000001 0 1 01000110 0 1 00111001 0
t=1A
1 00110001 0 1 01000001 0
N=03FF
1 00110000 0 1 00110011 0 1 01000110 0 1 01000110 0
<CR>
1 00001101 0
<LF>
1 00001010 0
Перевернуть и инвертировать
Вам естественно инвертировать и переворачивать ничего не нужно, за вас это сделает UART и MAX232, вы просто отпраляете как есть.
Всю голову сломал но не как разобраться не могу с протоколам передачи я уже и датчик на время нашел, подключил его к голилео
Подключаем датчик и через несколько секунд в конфигураторе появляется число уровня
Подключаем осциллограф к выходу датчика
Пытаюсь подсчитать биты получается какая та фигня
Подключаю к ардуино к сериал пишет
>M>M>M>M И квадратики
Подключаю Soft сканируем порт
Почитал данные по датчику
В сообщении передаются текущие данные: пользовательское значение уровня топлива
(10 или 12 бит), технологическое значение уровня топлива (16 бит), температура (8 бит).
http://www.euromobile.ru/wp-content/uploads/manual_epsilon.pdf
Подскажите как мне создать и отправлять аналогичный пакет из ардуино в галилео
Написал код который отправляет из ардуино 3E 01 07 17 4D 00 68 13 FE
Но галилео его не читает в чём проблема