Форум программистов, компьютерный форум, киберфорум
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/34: Рейтинг темы: голосов - 34, средняя оценка - 4.53
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466

Время передачи одного символа по USART

24.08.2011, 01:16. Показов 6344. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток.
В данный момент задача такая. По USORT надо гонять данные. Один мастер и несколько слейвов. Мастеру необходимо понять, когда слейв закончил передачу и начинать опрос следующего. Каждый слейв может выдать информацию по нескольким каналом, их число и размер заранее не известны. Думаю сделать так, что если после получения последнего символа прошло некое время (ну скажем время передачи символа умноженное на некий коэффициент) а новый символ не поступил, значит слейв закончил передачу.
До этого я думал, что скорость в бодах означает количество бит, проталкиваемых в секунду. Однако засомневался в том, что время передачи одного байта будет равно 1/скорость в бодах и умноженную на 8. Как минимум есть старт и стоп биты. То есть, усреднено можно взять время за 1/скорость в бодах и умноженную на 10 (старт и стоп биты + байт).
Но тут опять засомневался, может есть какие то еще не учтенные задержки типа перезарядки сдвигового регистра, может какого нибудь хендшейка и т.д. На момент передачи первого байта слейвом, у него сформирован весь буфер передачи, то есть данные уходят по готовности передатчика, затрат на формирование данных нет.
Собственно вопрос в том, как в зависимости от скорости USORT определить среднее время передачи (хотя наверное правильнее говорить о приеме) байта?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.08.2011, 01:16
Ответы с готовыми решениями:

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

Скорость передачи данных в USART.
Я инициализирую третий USORT, подключаю плату RS232 и включаюсь в COM-порт на компьютере. Но вот засада, мне надо передавать данные c baud...

PIC18F25K22. Максимальная скорость передачи по USART
Добрый день. Попала ко мне в руки платка с контроллером PIC18F25K22 и проект для нее. Стоит внешний генератор на 4,9152МГц и включен PLL: ...

10
0 / 0 / 1
Регистрация: 22.01.2010
Сообщений: 4,000
24.08.2011, 01:18
Тут уместней y2s имхо.

Усарт это асинхронный протокол и тут по времени что то ловить не самая лучшая идея. Либо вводить маркеры начала и конца.
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
24.08.2011, 01:25
Цитата Сообщение от DY HOTT
Тут уместней y2s имхо.

Усарт это асинхронный протокол и тут по времени что то ловить не самая лучшая идея. Либо вводить маркеры начала и конца.
Забыл написать, данные будут ходить по RS485.
А вот с маркерами боюсь засада. Маркер начала не особо нужен, как мне кажется, потому, что мастер передает слейву запрос, переключается в режим прослушивания и первый полученный байт будет началом (первым будет передаваться ID слейва). А вот с концом проблемы. На уровне протокола жестко ограничивать размер пакетов данных, как то западло, лишний расход памяти, хрянить все возможные варианты. А вот как сделать маркер конца, ума не приложу. Каким бы я не сделал байт или последовательность байт конца, она все равно сможет совпасть по содержанию с началом или серединой обычных данных, которые по стечению обстоятельств содержат сигнатуру маркера конца передачи.
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 332
24.08.2011, 01:52
Цитата Сообщение от Doimom78
Цитата Сообщение от DY HOTT
Тут уместней y2s имхо.

Усарт это асинхронный протокол и тут по времени что то ловить не самая лучшая идея. Либо вводить маркеры начала и конца.
Забыл написать, данные будут ходить по RS485.
А вот с маркерами боюсь засада. Маркер начала не особо нужен, как мне кажется, потому, что мастер передает слейву запрос, переключается в режим прослушивания и первый полученный байт будет началом (первым будет передаваться ID слейва). А вот с концом проблемы. На уровне протокола жестко ограничивать размер пакетов данных, как то западло, лишний расход памяти, хрянить все возможные варианты. А вот как сделать маркер конца, ума не приложу. Каким бы я не сделал байт или последовательность байт конца, она все равно сможет совпасть по содержанию с началом или серединой обычных данных, которые по стечению обстоятельств содержат сигнатуру маркера конца передачи.
А зачем выдумывать свой протокол, если их раработано и стандартизировано множество?
Проще всего использовать протокол ISIS-II, например. Это "старый добрый HEX-код. Начисто пропадает проблема генерации всевозможных маркеров и контроля ошибок. Его до сих пор используют во множестве программаторов.
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
24.08.2011, 01:58
Да я как то и не смотрел в сторону серьезных протоколов, мне надо то всего три-четыре команды реализовать.
Видимо лучшим вариантом будет передача первым байтом длины всего сообщения.
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 332
24.08.2011, 02:13
Цитата Сообщение от Doimom78
Да я как то и не смотрел в сторону серьезных протоколов, мне надо то всего три-четыре команды реализовать.
Видимо лучшим вариантом будет передача первым байтом длины всего сообщения.
Как говорят: - Хозяин - Барин! :-)))
Но если один раз хорошо реализовать проект, в будущем меньше проблем будет!
Тем более, что программа получается простой и красивой!
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
24.08.2011, 02:23
Цитата Сообщение от vystor_b_k
Цитата Сообщение от Doimom78
Да я как то и не смотрел в сторону серьезных протоколов, мне надо то всего три-четыре команды реализовать.
Видимо лучшим вариантом будет передача первым байтом длины всего сообщения.
Как говорят: - Хозяин - Барин! :-)))
Но если один раз хорошо реализовать проект, в будущем меньше проблем будет!
Тем более, что программа получается простой и красивой!

Погуглил на тему ISIS-II, и нашел только IS-IS (протокол маршрутизации Intermediate System-to--Intermediate System), что то мне подсказывает, что Вы не его имели ввиду :)
0
0 / 0 / 0
Регистрация: 08.05.2010
Сообщений: 332
24.08.2011, 02:57
Цитата Сообщение от Doimom78
Цитата Сообщение от vystor_b_k
Цитата Сообщение от Doimom78
Да я как то и не смотрел в сторону серьезных протоколов, мне надо то всего три-четыре команды реализовать.
Видимо лучшим вариантом будет передача первым байтом длины всего сообщения.
Как говорят: - Хозяин - Барин! :-)))
Но если один раз хорошо реализовать проект, в будущем меньше проблем будет!
Тем более, что программа получается простой и красивой!
Погуглил на тему ISIS-II, и нашел только IS-IS (протокол маршрутизации Intermediate System-to--Intermediate System), что то мне подсказывает, что Вы не его имели ввиду :)
Нет, не его. Протокол ISIS-II, в основном, знаменит тем, что значение каждого байта передается в HEX-коде. А в начале каждого пакета передается код двоеточия - 0x3A.
Затем следует байт количества передаваемых байтов. После него байт типа пакета: - команда, данные и т.п. Далее, в стандартном протоколе передается адрес загрузки первого байта пакета. Потом передаются байты данных. После них байт дополнения контрольной суммы - ДКС. ДКС - это сумма всех переданных байтов без учета переноса (кроме двоеточия) с обратным знаком. На принимающей стороне для контроля, просто суммируются все байты, и, если нет ошибок, то в сумматоре должен оказаться нуль. После ДКС, обычно добавляют символы "Возврат каретки" (0x0D) и "Перевод строки" (0x0A). Это для того, чтобы можно было удобно читать передаваемую информацию с помощью текстового редактора. Вы можете легко просмотреть любой HEX-файл и убедиться. Но главная фишка этого формата заключается в том, что каждый байт передается в виде HEX-кода. Т.е., например если передается байт, в котором закодирован, например, символ "А" - код его 0x41 - передается вначале код четверки; - т.е. - 0x34, а затем код единички - 0x31. При этом реально любой байт будет содержать только семь битов, что позволит в восьмибитовых передачах осуществлять дополнительно проверку на четность. Это еще больше увеличивает надежность связи.
0
SWK
24.08.2011, 09:02
Подобное кодирование часто применялось также при работе с перфолентой. Там иногда кроме "поперечного" контроля каждого байта по нечетности, использовали также "продольный контроль" - четность или нечетность суммы бит каждой битовой дорожки блока.
Помнится, программа загрузчика Intel HEX кода с перфоленты для контроллера на I8080 была длиной всего не то 62, не то 162 байта...
А в "Электранике НЦ-32" с перфоленты сначала загружался загрузчик, потом уже он загружал основную программу (до 32кб). Скорость загрузки доходила до 3 метров в секунду, а край ее мигом резал руки, если грузилось в старт - стопном режиме - перфолента ревела, как реактивный самолет на взлете...
2 / 2 / 0
Регистрация: 25.05.2010
Сообщений: 3,609
24.08.2011, 11:17
Цитата Сообщение от SWK
А в "Электранике НЦ-32" с перфоленты сначала загружался загрузчик, потом уже он загружал основную программу (до 32кб). Скорость загрузки доходила до 3 метров в секунду, а край ее мигом резал руки, если грузилось в старт - стопном режиме - перфолента ревела, как реактивный самолет на взлете...
Продолжу такой милый сердцу оффтоп.
У нас на машинах местного производства (уж и забыл, как назывались, выпускал завод Королева, вполне нормальных компах, кстати) была такая же штука. Тот загрузчик мы называли "абсолютным". И эта короткая ленточка всегда должна была быть под рукой - без нее начать работу было нельзя. Даже делали ее не бумажной, а из какой-то пластиковой ленты, чтобы дольше служила.
Но вот прикол: та простенькая прога, что с нее грузилась, была довольно глупо неоптимальна. Проверка готовности перфосчитывателя делалась сразу после выдачи команды "ПРИНЯТЬ 1 БАЙТ". Ждали, а потом производили укладку этогог байта в память и наращивание адреса. И что придумал наш сотрудник Валадя Федив: он переставил проверку готовности ПОСЛЕ упаковки байта в память. То есть, шли параллельно 2 процесса - перфосчитыватель протягивал ленту на 1 байт, а в это время в память укладывался предыдущий байт.
Вы не поверите: результат был ошеломляющий! Лента перестала идти с треском, а начала просто бесшумно ЛЕТЕТЬ. Эти огромные бобины программ загружались теперь так приятно тихо и быстро, что мы ошалели.
Загрузчик после этого стали называть "абсолютный Федив", в честь нашего кулибина.
Ну, а касательно топика, то уважаемые коллеги говорят о способе кодирования информации, а не о способе огранизации обмена между мастером и слейвами. Думаю, автору темы следует посмотреть в сторону старого доброго Модбаса. Там, кстати, именно период тишины и означает, что линия свободна.
0
0 / 0 / 0
Регистрация: 11.08.2011
Сообщений: 466
25.08.2011, 00:22
Большое спасибо отписавшимся, теперь есть материал для работы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
25.08.2011, 00:22
Помогаю со студенческими работами здесь

Дано 2 символа. Верно ли, что код только одного символа кратен 3
помогите решить задачу: дано 2 символа. верно ли , что код только одного символа кратен 3 вот мое решение, исправьте, если есть...

Даны три символа. Верно ли, что код ни одного символа не является большой русской буквой
даны три символа. верно ли, что код ни одного символа не является большой русской буквой

Как измерить время между прерываниями по USART
Есть входящий поток данных от устройства по USORT. Динные передаются пакетами по 13 байт, между которыми интервал 28..30 мкс (битрейт...

Изменение регистра статуса USART UCSRnA во время прерывания RXCn в МК ATmega1281
Начну с самого адекватного вопроса) возможно ли во время процедуры обработки прерывания RXCn изменять регистр статуса UCSRnA? Я попытался...

Как заменить Глиф (Glyph) одного символа на глиф другого символа для шрифтов типа otf
Нужно поменять местами глиф символа А и Б. Что бы когда вводился символ А выводился символ Б и наоборот. Для шрифта в формате otf...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита, которое может. . .
Команды "Заполнить" и "Очистить" на форме документа
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". На примере нетипового документа разработанного в конфигурации КА2. В качестве источника данных указан регистр накопления, в который записываются данные о. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru