реклама на сайте
подробности

 
 
5 страниц V   1 2 3 > »   
Reply to this topicStart new topic
> падает скорость на rs232
borischi
сообщение Aug 23 2009, 09:27
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



здравствуйте!
Такая проблема-использую АТ89S52 для чтения информации с мобильника (эрик т28).На коротких посылках всё нормально а свыше 13-15 байт-не успеваю вычитывать похоже.Допустим посылка из 30 байт-меня в ней интересует 25-й для проверки и я в него не попадаю.Если чуть опережаю события(на один вызов getch меньше)-удается попасть в нужный байт-но это ж не дело.
В терминальной программе эрик выдает всё как надо.Уровни его на интерфейсе до 5 вольт подтянул.
Может кто сталкивался с подобным-буду очень благодарен за совет
Go to the top of the page
 
+Quote Post
Dog Pawlowa
сообщение Aug 23 2009, 09:39
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 2 702
Регистрация: 14-07-06
Пользователь №: 18 823



Цитата(borischi @ Aug 23 2009, 12:27) *
Может кто сталкивался с подобным-буду очень благодарен за совет

С поиском телепатов - конечно smile.gif
Приведите Ваш исходник, или часть его, или хоть что-то, за что можно зацепиться.


--------------------
Уходя, оставьте свет...
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 23 2009, 11:55
Сообщение #3


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Кварц какой? Может скорость не совсем точно совпадает?
Ну и, если обработка символов занимает какое-то время, можно использовать буферизованный приём по прерываниям.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 23 2009, 12:26
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Была у одного знакомого такая-же проблема.
Компьютер читал через СОМ порт промышленный контроллер Дельта Электроникс как часы, а вот МК
посредством USART - ну никак ! И кварцев кучу перепробовали, и скорости меняли, короче "танцы
с бубнами" были конкретные... А все потому, что USART у МК не имеет в отличие от компьютерной
микросхемы ФАПЧ (фазовую автоподстройку частоты) !

Победили написав программный USART через прерывания... Аппаратный отправили "фтоппку"... maniac.gif


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 23 2009, 12:49
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(manul78 @ Aug 23 2009, 14:26) *
А все потому, что USART у МК не имеет в отличие от компьютерной
микросхемы ФАПЧ (фазовую автоподстройку частоты) !

Вы бредите.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 23 2009, 14:51
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(zltigo @ Aug 23 2009, 16:49) *
Вы бредите.


Обоснуйте ? В каком месте ? biggrin.gif


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 15:12
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(AHTOXA @ Aug 23 2009, 14:55) *
Кварц какой? Может скорость не совсем точно совпадает?
Ну и, если обработка символов занимает какое-то время, можно использовать буферизованный приём по прерываниям.

Кварц 11.059
Настроил передатчик на стандартный 2-й режим 10 бит(старт,стоп и 8 бит дата).Скорость 9600 с соотв.перезагрузкой таймера.Никакой обработки символов нет-тупо вычитываю по готовности.проверяю на наличие определенного символа и всё.Там только и есть,что CJNE
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 23 2009, 15:46
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(borischi @ Aug 23 2009, 19:12) *
Кварц 11.059
Настроил передатчик на стандартный 2-й режим 10 бит(старт,стоп и 8 бит дата).Скорость 9600 с соотв.перезагрузкой таймера.Никакой обработки символов нет-тупо вычитываю по готовности.проверяю на наличие определенного символа и всё.Там только и есть,что CJNE


А как организован RS232 в телефоне ? Есть схема ?
Возможно у компьютера высокое входное сопротивление и соответственно в "терминалке" все работает
гуд. А вот в МК может быть более низкоомная входная цепь, которая в процессе работы медленно
подсаживает RS232 схему телефона и она начинает пороть чушь... Это мои догадки... biggrin.gif

С телефона идет "чиcтый RS-232" ? Уровни +10, -10 ?

Сообщение отредактировал manul78 - Aug 23 2009, 15:52


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 15:58
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(manul78 @ Aug 23 2009, 18:46) *
А как организован RS232 в телефоне ? Есть схема ?
Возможно у компьютера высокое входное сопротивление и соответственно в "терминалке" все работает
гуд. А вот в МК может быть более низкоомная входная цепь, которая в процессе работы медленно
подсаживает RS232 схему телефона и она начинает пороть чушь... Это мои догадки... biggrin.gif

Ну поставил я последовательно резисторы на Rx и Tx.По 100 ом.А как организовано входное сопротивление каналов rs232 контроллера-честно говоря не знаю.Пробовал вписывать 1 в Rx контроллера конечно-не помогло biggrin.gif

Цитата(manul78 @ Aug 23 2009, 18:46) *
С телефона идет "чиcтый RS-232" ? Уровни +10, -10 ?

Нет конечно TTL 0 +- 2.5 V
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 23 2009, 16:35
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(borischi @ Aug 23 2009, 19:58) *
Нет конечно TTL 0 +- 2.5 V


Осциллограф цифровой возможно пролил-бы свет на данную проблему... biggrin.gif

Попробуйте буферную микросхему чтобы привести уровни в приемлемый вид...

Последняя догадка, возможно телефон передает не поток, а пакеты (15 байт данных + 16-тый CRC) ?


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 16:58
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(manul78 @ Aug 23 2009, 19:35) *
Осциллограф цифровой возможно пролил-бы свет на данную проблему... biggrin.gif

Попробуйте буферную микросхему чтобы привести уровни в приемлемый вид...

Последняя догадка, возможно телефон передает не поток, а пакеты (15 байт данных + 16-тый CRC) ?

Осциллографа пока нету,-но жду его с нетерпением
Bus tranceiver ставил-не помогло.
А вот насчет пакета поподробнее если можно unsure.gif
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 23 2009, 17:24
Сообщение #12


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(borischi @ Aug 23 2009, 21:12) *
Кварц 11.059


Это гуд.

Цитата(borischi @ Aug 23 2009, 21:12) *
Настроил передатчик на стандартный 2-й режим 10 бит(старт,стоп и 8 бит дата).Скорость 9600 с соотв.перезагрузкой таймера.Никакой обработки символов нет-тупо вычитываю по готовности.проверяю на наличие определенного символа и всё.Там только и есть,что CJNE


Какого таймера? Какое значение перезагружается? Может, приведёте кусочки кода с инициализацией и обработкой?

Цитата
Нет конечно TTL 0 +- 2.5 V



При пятивольтовом контроллере? Я б поставил хоть транзистор для порядкаsmile.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 23 2009, 17:43
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(borischi @ Aug 23 2009, 20:58) *
А вот насчет пакета поподробнее если можно unsure.gif


Вы конечно знаете, что устройства осуществляющие обмен между собой по RS-232 используют протоколы
обмена. Протоколов этих масса. Возможно Ваш телефон использует какой-то свой.
Как пример, надо например передать 100 байт. Устройства "договариваются" между собой и процесс
пошел:

Формат пакета: первый байт - количество передаваемых байт данных.
следующие байты - собственно данные.
последний байт - контрольная сумма. (CRC)

Передаем 100 байт пакетами по 15 :

Первый пакет: 15, х,х....х,х, CRC - Получив его приемник быстро обрабатывает результат и
отвечает передатчику что все гут либо просит повторить
первый пакет...
Второй пакет: 15,х,х.....х,х, CRC ................................................................................
.....................

................................................................................
................................................................................
.

Седьмой пакет: 10,х,х.....х,х,CRC - Последний пакет.

Используя всевозможные протоколы, устройства "разговаривают" между собой. Динамически меняют
скорости обмена при плохом качестве передачи и т.д. Все это делается для точной и быстрой передачи
данных. Все это я описал в общих чертах. Кстати, я больше чем уверен, что Ваш телефон использу-
ет какой-либо протокол обмена, т.к. просто "сливать" данные как из одного ведра в другое, не контро-
лируя результат - это маловероятно... biggrin.gif


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 18:02
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(AHTOXA @ Aug 23 2009, 20:24) *
При пятивольтовом контроллере? Я б поставил хоть транзистор для порядкаsmile.gif

Уровни на приеме от эрика я подтянул к 5 вольтам-поставил 2 инвертора на транзисторах.
Причина редактирования: Урезание цитаты.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 23 2009, 18:15
Сообщение #15


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(manul78 @ Aug 23 2009, 17:51) *
Обоснуйте ? В каком месте ?
Если совсем откровенно - во всех. Для начала: "компьютерная микросхема" - 16550 и ее более продвинутые версии. Найдите в ее даташите хотя бы упоминание о ФАПЧ.

Цитата(manul78 @ Aug 23 2009, 20:43) *
Вы конечно знаете, что устройства осуществляющие обмен между собой по RS-232 используют протоколы
обмена. Протоколов этих масса. Возможно Ваш телефон использует какой-то свой.
Телефоны используют протокол, унаследованный от модемов Hayes. Обычный текст, текстовые же команды, начинающиеся с AT. Отсюда название - AT-команды. Никаких CRC.
borischi: лучше покажите код. Телепатией заниматься просто лень. Последняя попытка телепатии: У вас в системе используются прерывания? Если да, то нет ли где-то в прерываниях больших участков кода, время исполнения которых больше времени приема символа?

Цитата(borischi @ Aug 23 2009, 21:02) *
Уровни на приеме от эрика я подтянул к 5 вольтам-поставил 2 инвертора на транзисторах.
А инверторы там как раз и не нужны. Если у вас нет ничего, кроме инверторов - поставьте их два последовательно. И инверторы лучше взять интегральные. Что-то вроде 74HCT14.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 23 2009, 18:29
Сообщение #16


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(borischi @ Aug 24 2009, 00:02) *
Пожалуйста.Тем более что он не мой. Почти целиком взят тут http://www.gsmpager.spb.ru/soft/a.a51


Не грузится...

Цитата(Сергей Борщ @ Aug 24 2009, 00:15) *
Если у вас нет ничего, кроме инверторов - поставьте их два последовательно.

Насколько я понял, он так и сделал.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 18:42
Сообщение #17


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(Сергей Борщ @ Aug 23 2009, 21:15) *
А инверторы там как раз и не нужны. Если у вас нет ничего, кроме инверторов - поставьте их два последовательно. И инверторы лучше взять интегральные. Что-то вроде 74HCT14.


И то верно-лучше один раз увидеть.Так это подключено
А это код,если не грузится
Прикрепленные файлы
Прикрепленный файл  rxtx.bmp ( 328.58 килобайт ) Кол-во скачиваний: 15
Прикрепленный файл  kod.txt ( 7.6 килобайт ) Кол-во скачиваний: 56
 
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 23 2009, 18:46
Сообщение #18


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



А, загрузилось. Мне кажется, я знаю в чём дело.
Там сначала вызывается PUTSTR, а потом несколько раз GETCH, чтобы пропустить эхо. Но дело в том, что телефон выдаёт эхо сразу. Вот оттого и не работает ничего.

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 18:54
Сообщение #19


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(AHTOXA @ Aug 23 2009, 21:46) *
Там сначала вызывается PUTSTR, а потом несколько раз GETCH, чтобы пропустить эхо. Но дело в том, что телефон выдаёт эхо сразу. Вот оттого и не работает ничего.

Не понял...Телефон сразу выдает эхо с первой буквы комманды? Не дождавшись её конца?
Кстати код рабочий.Так во всяком случае ребята утверждают
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 23 2009, 19:19
Сообщение #20


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(borischi @ Aug 24 2009, 00:54) *
Не понял...Телефон сразу выдает эхо с первой буквы комманды? Не дождавшись её конца?

Естественно. Попробуйте в терминалке понабирать команды.
Цитата
Кстати код рабочий.Так во всяком случае ребята утверждают

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


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 19:24
Сообщение #21


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(AHTOXA @ Aug 23 2009, 22:19) *
Естественно. Попробуйте в терминалке понабирать команды.

Вы совершенно правы.Вижу это в терминалке.Как раньше не пришло в голову проверить..... Отскакивает эхо не дожидаясь кода CR
Щас перепишу код.Большое спасибо
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 23 2009, 19:29
Сообщение #22


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(borischi @ Aug 24 2009, 01:24) *
Щас перепишу код.Большое спасибо


Да не за чтоsmile.gif
Обратите внимание, что на CR может приходить эхо CR+LF. Проверьте это в своём телефоне.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
borischi
сообщение Aug 23 2009, 19:31
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 17
Регистрация: 14-07-09
Пользователь №: 51 224



Цитата(AHTOXA @ Aug 23 2009, 22:29) *
Да не за чтоsmile.gif
Обратите внимание, что на CR может приходить эхо CR+LF. Проверьте это в своём телефоне.

Точно .Есть такое дело biggrin.gif
Еще раз спасибо a14.gif
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 23 2009, 19:52
Сообщение #24


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Цитата(Сергей Борщ @ Aug 23 2009, 22:15) *
Если совсем откровенно - во всех. Для начала: "компьютерная микросхема" - 16550 и ее более продвинутые версии. Найдите в ее даташите хотя бы упоминание о ФАПЧ.


Обязательно найду и приложу документ, в котором я вычитал про ФАПЧ в контроллере RS-232. Я помню
тоже удивлялся. Там приводилась аналогия с радиоприемником. Возможно, данная схема называется
немного по другому, но я точно помню про Автоматическую Подстройку Частоты...


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 24 2009, 15:50
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(manul78 @ Aug 24 2009, 01:52) *
Обязательно найду и приложу документ, в котором я вычитал про ФАПЧ в контроллере RS-232.
К вашему сведению, "контроллеров RS-232" нету. Есть стандартный интерфейс RS-232 (стандарт TIA/EIA-232-F) и существуют контроллеры, поддерживающие (стандартный) интерфейс RS-232. Сам стандарт, кстати, имеется на местном ФТП. Там вообще ни про UART, ни про ФАПЧ нет ни слова.
Цитата(manul78 @ Aug 24 2009, 01:52) *
Там приводилась аналогия с радиоприемником. Возможно, данная схема называется
немного по другому, но я точно помню про Автоматическую Подстройку Частоты...
Вот только не нужно приводить журнальных статей, в которых какой-нибудь ламернахватавшийся верхушек пользователь пишет про "контроллер RS-232" и про ФАПЧ в этом "контроллере RS-232" laughing.gif Не стоит смешить местных профессионалов. Точно также как и не стоит упорствовать в своих заблуждениях
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 24 2009, 15:56
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(manul78 @ Aug 23 2009, 23:52) *
Обязательно найду и приложу документ, в котором я вычитал про ФАПЧ в контроллере RS-232. Я помню
тоже удивлялся. Там приводилась аналогия с радиоприемником. Возможно, данная схема называется
немного по другому, но я точно помню про Автоматическую Подстройку Частоты...

Может, с autobaud'ом перепутали, а?
Go to the top of the page
 
+Quote Post
manul78
сообщение Aug 24 2009, 19:07
Сообщение #27


Местный
***

Группа: Участник
Сообщений: 403
Регистрация: 14-05-07
Из: Россия, г.Пенза
Пользователь №: 27 719



Получив "по башке" сразу от двух модераторов ZLtigo и Rezident я конечно...

"Не буду смешить местных профессионалов. Точно также как и не буду упорствовать в своих заблуждениях "

Понятно, что интерфейс RS-232 (стандарт TIA/EIA-232-F) это одно, а например USART 82C51 контроллер
это разные вещи... Панцырь черепахи - это её скелет, как не парадоксально...

Но,... "не буду упорствовать в своих заблуждениях "...

А про автоматическую подстройку частоты в USART (UART) конкретных чипах постараюсь найти и предоставить, не приснилось-же мне это ? Я не Менделеев... biggrin.gif


--------------------
" Многие вещи нам непонятны не потому, что наши понятия слабы; но потому, что сии вещи не входят в круг наших понятий." (с) К.Прутков.
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 24 2009, 21:46
Сообщение #28


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(manul78 @ Aug 23 2009, 16:26) *
Была у одного знакомого такая-же проблема.

Писал в прошлом году autobaud rate на hdl и обнаружил следующее.
Как оказалось, переходники usb-com на современных чипах имеют очень неравное соотношение положительного БИ к отрицательному.
На скоростях близких к максимальной (115200) коэф. заполнения двухбитового интервала «10» отклонялся на 10% от нормы.
Проверял на конвертерах двух разных производителей.
Это не сильно принципиально для фиксированных скоростей.
Другое дело для автоматической подстройки, которая должна это учитывать.

Они выполняются как правило на счетчике. С ФАПЧ в классическом смысле что-то не встречал, хотя активно тогда гуглил.
Скорее всего у вас что-то было с МК или с программой.
Имею в виду программно-аппаратную неисправность , а не изначальную кривость USART.

Сообщение отредактировал x736C - Aug 24 2009, 21:53
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 24 2009, 22:02
Сообщение #29


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(x736C @ Aug 25 2009, 01:46) *
Как оказалось, переходники usb-com на современных чипах имеют очень неравное соотношение положительного БИ к отрицательному.
На скоростях близких к максимальной (115200) коэф. заполнения двухбитового интервала «10» отклонялся на 10% от нормы.

На встроенных в материнки портах они порой отклоняются еще сильнее, но это вина преобразователей уровней. На USB-COM то же самое наблюдается, скорее всего.
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 24 2009, 22:39
Сообщение #30


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Кстати сказать, для одних скоростей ширина единицы превалирует над шириной нуля, а для других скоростей наоборот.
Поясните, пожалуйста, как это может быть связано с преобразователем уровней.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение Aug 24 2009, 22:57
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Цитата(x736C @ Aug 25 2009, 02:39) *
Кстати сказать, для одних скоростей ширина единицы превалирует над шириной нуля, а для других скоростей наоборот.
Поясните, пожалуйста, как это может быть связано с преобразователем уровней.

Никак, естественно. Так сразу бы написали, а то "на скоростях близких к максимальной" - что тут можно еще подумать?
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 24 2009, 23:08
Сообщение #32


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



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

Сообщение отредактировал x736C - Aug 24 2009, 23:09
Go to the top of the page
 
+Quote Post
=AK=
сообщение Aug 25 2009, 07:21
Сообщение #33


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(manul78 @ Aug 24 2009, 05:22) *
Обязательно найду и приложу документ, в котором я вычитал про ФАПЧ в контроллере RS-232. Я помню
тоже удивлялся. Там приводилась аналогия с радиоприемником. Возможно, данная схема называется
немного по другому, но я точно помню про Автоматическую Подстройку Частоты...

Единственное объяснение, какое приходит в голову: в какой-то микросхеме могла быть использована ФАПЧ для умножения тактовой частоты. В самом же UART-e никаких ФАПЧ не используется, он тактируется от фиксированной частоты.

Чаще всего приемный тракт UART тактируют от частоты в 16 раз большей, чем бодовая. По приходу падающего фронта старт-бита отсчитывают 8 тиков, чтобы попасть в середину тактового интервала. После этого через каждые 16 тиков берут самплы в середине каждого бита. В простейшем случае берут 1 сампл. Если тактовые частоты приемника и передатчика не совпадают, то сампл постепенно "съезжает" из центра, однако за время передачи байта "съезжает" не так уж далеко, чтобы прием был с ошибками. Достаточно, чтобы частоты не сопадали не более чем примерно на 2%, чтобы гарантировать уверенный прием. К ФАПЧ все это не имеет ни малейшего отношения.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 25 2009, 10:22
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(x736C @ Aug 25 2009, 00:46) *
Писал в прошлом году autobaud rate на hdl и обнаружил следующее.
Как оказалось, переходники usb-com на современных чипах имеют очень неравное соотношение положительного БИ к отрицательному.
На скоростях близких к максимальной (115200) коэф. заполнения двухбитового интервала «10» отклонялся на 10% от нормы.
Проверял на конвертерах двух разных производителей.
Это не сильно принципиально для фиксированных скоростей.
Другое дело для автоматической подстройки, которая должна это учитывать.

Они выполняются как правило на счетчике. С ФАПЧ в классическом смысле что-то не встречал, хотя активно тогда гуглил.
Скорее всего у вас что-то было с МК или с программой.
Имею в виду программно-аппаратную неисправность , а не изначальную кривость USART.


Что-то совсем не понял. Я например, делал autobaud модема и совсем не заметил разницы м/у 1 и 0. Более того, имея представление о цифровой реализации схемы не могу поверить в такое. Конвертер - это врят ли фиксированная аппаратная фича. Не те времена. Это встроенный мк который имеет 2 интерфейса. Соответственно UART реализован стандартно. Так откуда взятся такой разнице??? Если брать CP, то там сразу виден МК, который применён. В FTDI не так очевидно, но косвенно тоже понятно. Могу только предположить что у вас что-то с преобразователями уровня не то. Хотя это только догадка.

По поводу эха. А что команда "ate0" уже перестала работать? Или список команд модема почитать религия запрещает?
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 25 2009, 10:47
Сообщение #35





Guests






Цитата
Писал в прошлом году autobaud rate на hdl и обнаружил следующее.
Как оказалось, переходники usb-com на современных чипах имеют очень неравное соотношение положительного БИ к отрицательному... Это не сильно принципиально для фиксированных скоростей.
Другое дело для автоматической подстройки, которая должна это учитывать.

По своему опыту реализации autobaud rate, пришел к выводу, что измерять длительность передачи одиночных битов - не самое лучшее решение. Сейчас измеряю время от начала старт-бита до начала стоп-бит и делю на количество бит. Получается много лучше, точнее. И описанные выше проблемы (даже если они есть) уже не критичны. Естественно, нужно знать, что передается, чтобы пропустить "лишние" фронты. Пока эта методика не подводила...
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 11:29
Сообщение #36


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Немного отклонились от темы, но все-таки.
Если не заметили разницы, значит, скорее всего у вас ее и не было. UART интерфейсы по-разному паршивы.
У меня есть табличка со снятыми значениями для Huge Pine конвертера. Разве что осциллограммы не делал. Но и это не долго, если надо. smile.gif
Прикрепленное изображение

Если что-то с преобразователем уровня, то в конвертере.
Микросхема бескорпусная, так что бог ее знает.
На конвертерах подороже в той или иной степени тоже это проявляется. Смотрел еще конвертер ST-Lab.


@Ark, как вы достоверно определяете стоп-бит? И что значит «знать, что передается»?
На произвольных данных, в том числе непрерывном потоке, ваша реализация не ошибется?

Сообщение отредактировал x736C - Aug 25 2009, 11:34
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 25 2009, 12:07
Сообщение #37





Guests






Ну, конечно, не на произвольном и непрерывном потоке. smile.gif
Этот способ хорошо работает для обмена, построенного по принципу "запрос-ответ", с паузами ожидания.
Предполагается, что формат и заголовок запроса известны устройству, неизвестна только текущая скорость...
Ждем паузы (прекращения текущей передачи), далее ожидаем начала следующего запроса. Достаточно знать только первый передаваемый байт. Он выбирается так, чтобы последний бит был нулевой - чтобы обнаружить начало стоп-бита. Ну, а дальше - дело техники программирования...
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 12:23
Сообщение #38


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Тогда ясно. В моем случае это не подходило.
В вашем случае, когда заголовок посылки известен, можно измерить и первый стартовый бит, заранее зафиксировав в протоколе ограничение следующей за ним единицей.
Смещения (1/0) можно учесть доверительным интервалом. Значения БИ для разных скоростей при неблагоприятных смещениях не перекрываются. И это самое главное. Так что не суть, как измерять.
Поправьте, если неправ.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 25 2009, 12:36
Сообщение #39





Guests






Все немного проще. По первому фронту (начало старт-бита) снимаете показания таймера, затем пропускаете известное количество фронтов, и по фронту начала стоп-бита снимаете второе значение таймера. Разница значений таймера - это суммарная длительность 9-ти бит (для 8-ми битного формата). Смысл в том, что измерив интервал из 9 бит подряд, получите в 9 раз меньшую ошибку длительности одного бита.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 12:58
Сообщение #40


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(@Ark @ Aug 25 2009, 14:36) *
...затем пропускаете известное количество фронтов

Отличный "алгоритм" sad.gif откуда это вдруг количество фронтов на произвольном байте статет "известным". А если байт известный, то проблема выеденного яйца не стоит и городить ловлю фронтов и прочее лишнее.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 25 2009, 13:02
Сообщение #41





Guests






Цитата
... откуда это вдруг количество фронтов на произвольном байте статет "известным".

А Вы внимательно читать не пробовали? smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 13:28
Сообщение #42


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(@Ark @ Aug 25 2009, 15:02) *
А Вы внимательно читать не пробовали? smile.gif

Пробовал, пробовал.... сначала пауза гарантированная, потом байт гарантированный, потом бит в байте гарантированный... Повторяю "отличый" алгоритм sad.gif. Непонятно, отчего это только вдруг скорость не принять тоже известной smile.gif. Ну его в болото.
P.S.
Модемы 100 лет в субботу, как по известным "AT" скорость детектят, причем молча. Аппаратная подержка автодетекта в микроконтроллерных UART тоже уже часто имеет место быть.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 25 2009, 13:41
Сообщение #43


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(@Ark @ Aug 25 2009, 13:47) *
По своему опыту реализации autobaud rate, пришел к выводу, что измерять длительность передачи одиночных битов - не самое лучшее решение. Сейчас измеряю время от начала старт-бита до начала стоп-бит и делю на количество бит. Получается много лучше, точнее. И описанные выше проблемы (даже если они есть) уже не критичны. Естественно, нужно знать, что передается, чтобы пропустить "лишние" фронты. Пока эта методика не подводила...


А кто вам сказал, что я проверяю единичные биты?

У меня проверяются биты и разница битов и прогнозируется длительность байта. Восстанавливается инфа включая первый байт с вероятностью 98%. Хотя этого и не требуется так как это в модеме стоит и первый байт чаще всего a. Тем не менее восстанавливается всё подряд, кроме символов восстановить которые нельзя. Всё это восстанавливается прямо в потоке.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 25 2009, 13:46
Сообщение #44





Guests






Цитата
... Непонятно, отчего это только вдруг скорость не принять тоже известной.
Аппаратная подержка автодетекта в микроконтроллерных UART тоже уже часто имеет место быть.

Да-да, конечно. smile.gif Все просто и не интересно, когда тактовый генератор от кварца. Тогда можно и перебором нужную скорость найти... Какие проблемы...
P.S. Попробуйте на некалиброванном RC-генераторе UART реализовать, в целях экономии...
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 13:55
Сообщение #45


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



SasaVitebsk, человек вообще-то мне оппонировал. smile.gif

«Восстанавливается инфа включая первый байт с вероятностью 98%».
Странно, что вы указываете вероятность успешного приема первого байта, хотя не известна вероятность получения конкретных байт.
Вероятность успешного приема первого байта, имхо, сильно зависит от того, какой это будет байт. Поэтому откуда взята цифра 98% ? smile.gif
Вероятность появления неблагоприятного байта при «случайном» обмене, конечно, можно посчитать, но не думаю, что вы это делали.
@Ark этот вопрос решил просто, сделал её единицей (около того), пожертвовав первым байтом.

И потом, по моему мнению, вы сильно усложнили. Проверять одно, второе, прогнозировать третье. В погоне за этим первым байтом что ли?

Сообщение отредактировал x736C - Aug 25 2009, 13:57
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 14:01
Сообщение #46


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(@Ark @ Aug 25 2009, 15:46) *
P.S. Попробуйте на некалиброванном RC-генераторе UART реализовать, в целях экономии...

Не валите в кучу две разных задачи. Подстройка под RC генератор может вообще осуществляться периодически по длительности специально передаваемого Break и соответственно совершенно не быть завязаным на какие-либо протокольные вещи.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 14:09
Сообщение #47


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(zltigo @ Aug 25 2009, 18:01) *
Не валите в кучу две разных задачи. Подстройка под RC генератор может вообще осуществляться периодически по длительности специально передаваемого Break и соответственно совершенно не быть завязаным на какие-либо протокольные вещи.

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

P. S. Попытка с менторским тоном придумать эту разницу уважения к вашему профессионализму, в котором лично у меня не возникает никаких сомнений, не добавляет.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 14:19
Сообщение #48


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(x736C @ Aug 25 2009, 16:09) *
А может быть осуществлена гораздо проще, в рамках процедуры обмена, как и было сделано.

При этом налагая ДОПОЛНИТЕЛЬНЫЕ НЕНУЖНЫЕ ограничения на эту самую процедуру, вместо того, что-бы процедура только выбрасывала битые фреймы в ней начинают наворачивать поиск пауз, подсчет фронтов в байте следущим после паузы, протокольные ограничения....
Цитата
Попытка с менторским тоном придумать эту разницу...

Эта разница, простите, совершенно не придумана sad.gif, она объективно есть. Любую задачу можно решить максимально извращенным способом - тут спору нет, но лучше проще. Предки, например, заложили тот-же Break совсем не зря.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
rezident
сообщение Aug 25 2009, 15:07
Сообщение #49


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(aaarrr @ Aug 24 2009, 21:56) *
Может, с autobaud'ом перепутали, а?
Скорее уж асинхронный приемопередатчик (UART) с самосинхронизирующимся, использующего что-то типа манчестерского кода.
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 15:17
Сообщение #50


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Вы тоже налагаете ограничение в виде постоянной посылки break. Шило на мыло.
Замена одного априорно известного байта, на другой «байт», который надо:
1. отделить от других данный (в том числе на стороне передатчика);
2. измерить тем же счетчиком.
Ну и третье. Так как скорость передачи неизвестна, то как этот break не спутать с нулевым БИ или их комбинацией, следующей на пониженной скорости, мне не ясно.
Опять-таки, в кучу свалено две задачи, калибровка и автоподстройка.

Калибровка RC-генератора при известной скорости передачи не представляется настолько простецкой, чтобы в данном контексте ей пренебрегать.
http://www.atmel.com/dyn/resources/prod_do...nts/doc2563.pdf

Добавить сюда еще autobaud rate — вообще сомнительное предприятие для случая @Ark.

Добавлю: что в предложенном appNote от Atmel к сигналу break добавлен еще байт синхронизации. Разве ж это проще. smile.gif

Так что где изврат — это еще вопрос. smile.gif
С уважением.

Сообщение отредактировал x736C - Aug 25 2009, 15:30
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 16:13
Сообщение #51


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(x736C @ Aug 25 2009, 17:17) *
Вы тоже налагаете ограничение в виде постоянной посылки break. Шило на мыло.

Это НЕ ограничение на протокол - протокол совершенно ничего не знает о калибровках. Совсем ничего.
Цитата
1. отделить от других данный (в том числе на стороне передатчика);

Это вообще-то не байт совсем. Это с точки зрения приемника битый фрейм, который отделяется, даже если у чипа нет поддержки детектирования break по ошибке фрейма
и выбрасывается.
Цитата
2. измерить тем же счетчиком.

Ну поскольку именно Вы а не я свалили в кучу две задачи и получали уравнение с двумя неизвестными, то для данного случая, да, надо менять.
Цитата
Ну и третье. Так как скорость передачи неизвестна, то как этот break не спутать с нулевым БИ или их комбинацией, следующей на пониженной скорости, мне не ясно.

Все очень просто - break по определению должен быть длиннее самого длинного байта
Цитата
Опять-таки, в кучу свалено две задачи, калибровка и автоподстройка.

Это не я так задачу за уши притянул. Для решения одной из двух задач никакие дополнительные таймера и почие извращения не нужны.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 17:06
Сообщение #52


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



«Break должен быть длиннее самого длинного байта».. Это ли не ограничение на протокол передачи? Длинный break, перекрывающий все возможное, решает проблему калибровки. Но остается необходимость реализовывать отдельно autobaud rate.
(То, что это существует аппаратно где-то и в чем-то отношения к теме не имеет).
Я ничего не сваливал в кучу, вы что-то напутали по ходу наших рассуждений, все было свалено до меня. smile.gif
«Для решения одной из двух задач..» Да кто ж с этим спорит? Только зачем навязывать «простое» решение для задачи, которая перед человеком не стояла. smile.gif
В общем бессмысленный спор, думаю, вы со мной согласитесь хотя бы в этом.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 17:59
Сообщение #53


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(x736C @ Aug 25 2009, 19:06) *
«Break должен быть длиннее самого длинного байта».. Это ли не ограничение на протокол передачи?

Повторяю третий и последний раз - протокол передачи НИКАК при этом не ограничивается - ему по барабану есть там break, нет его, и что он там делает или не делает. Break отрабатывает таймер c обработчиком - это исключительно его епархия.
Цитата
Длинный break, перекрывающий все возможное, решает проблему калибровки. Но остается необходимость реализовывать отдельно autobaud rate.

Длинна break и кроме всего прочего и задает baud - получили break, откалибровались по его длительности и вычислили по нему baud на которой с нами хочет общаться master.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 18:55
Сообщение #54


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Мы уже пошли по кругу.
Если вам надо в линию что-то передавать кроме данных, то это уже ограничение.
Если нужно передавать брейк, который длиннее одного байта (300 бод), то это почти в 400 раза длиннее байта минимально возможной длинны.
То есть протокол должен учитывать тот факт, что на 3,3 мс передача ему будет недоступна.
Передавать брейк на той же скорости, на которой вы планируете передачу, занятие бессмысленное, если приемник не будет ее (эту скорость) знать.
Я вроде понятно излагаю.

«Длинна break и кроме всего прочего и задает baud - получили break, откалибровались по его длительности и вычислили по нему baud на которой с нами хочет общаться master».
Тут я вижу ошибку.
См. выше. Если брейк передается на скорости передатчика, а именно это вы имеете в виду, раз предлагаете по нему подстраивать скорость, то не получится так просто отличить его от данных. Ваша схема может не отличить комбинацию нулей на одной скорости, от сигнала брейк на другой.

Например break на скорости 115200 просто удивительно точно совпадает с 1 нулем на скорости 9600.
То есть байт синхронизации или брейк делиметер тут необходим со всем вытекающим.
Я же говорю, это шило на мыло.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 19:20
Сообщение #55


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(x736C @ Aug 25 2009, 20:55) *
Я вроде понятно излагаю.

Разумеется нет - ведомое устройство просто должно изначально ожидать соединения на МАКСИМАЛЬНОЙ скорости. Соответсвенно брейк должен только длиннее предлагаемой "новой" скорости. Посему все Ваши последующие рассуждения ложны.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 25 2009, 19:28
Сообщение #56





Guests






Во, дискуссия развернулась... smile.gif
Цитата
Не валите в кучу две разных задачи...

Да, я бы рад не валить, но реале они, часто, уже находятся в одной куче... И почему бы это не использовать?
Связать процедуры автоопределения скорости и протокол обмена. Например, предложенная мною методика, достаточно просто и логично вписывается в общеизвестный протокол MODBUS (правда, пока устройство одно на линии). После определения скорости, проверяем контрольную сумму запроса. Если все совпало, то с очень хорошей достоверностью скорость определена правильно. Иначе - не отвечаем и ждем следующего запроса...
Аналогично поступаем в случае сбоев (возможно из-за "ухода" текущего значения частоты RC)...
Самое главное, что абсолютно никаких дополнительных "усилий" со стороны Мастера для реализации автокалибровки в этом случае не требуется. Он даже "не знает" об этом...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 25 2009, 19:33
Сообщение #57


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(x736C @ Aug 25 2009, 16:55) *
«Восстанавливается инфа включая первый байт с вероятностью 98%».
Странно, что вы указываете вероятность успешного приема первого байта, хотя не известна вероятность получения конкретных байт.
Вероятность успешного приема первого байта, имхо, сильно зависит от того, какой это будет байт. Поэтому откуда взята цифра 98% ? smile.gif

Честно говоря так по памяти выдал. Немного ошибся. Сейчас посчитал примерно 95% получается.
Нельзя по первому байту (моим алгоритмом) восстановить следующие байты ff,fe,fc,f8,..,80,00. Короче байты с одним перепадом после старта. Ну и ещё наверное пару байт с 2 перепадами равноширинными. Если модифицировать алгоритм, то можно уменьшить число "неверно детектируемых" байт ещё вдвое. Останутся только ff,fe,f8,80. Если обрабатывать поток непрерывно, либо анализировать возможность ошибки, то можно гарантированно востанавливать поток полностью.

Цитата
Вероятность появления неблагоприятного байта при «случайном» обмене, конечно, можно посчитать, но не думаю, что вы это делали.
@Ark этот вопрос решил просто, сделал её единицей (около того), пожертвовав первым байтом.
И потом, по моему мнению, вы сильно усложнили. Проверять одно, второе, прогнозировать третье. В погоне за этим первым байтом что ли?

Наоборот. Немного упростил. Поленился. Посмотрел, что US Robotics Courier даёт примерно аналогичный результат и успокоился. Но проанализировал, что можно лучше. Зато получил P&P / диагностику под виндой. А народ даже и не догадывается что работает не аппаратный UART. Сбоев никогда не наблюдал. Выпускали несколько лет. smile.gif
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 19:52
Сообщение #58


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Как правило наименьший БИ двигает скорость в сторону увеличения, а у вас специальный символ брейк двигает скорость в сторону уменьшения. Это конечно «проще», это конечно «эффективнее».
Обратно как собираетесь скорость возвращать, если она изменится?
Вы с таким упорством пытаетесь доказать, что предложили нечто лучшее, чем реализовал @Ark для тех элементарных требований, которые у него были.
Проще вы это не сделаете так, как описываете. Я вам попытался доказать, но у меня не получилось.

SasaVitebsk, сложно, не значит плохо и я лишь предположил. Я рад за вас, что все работает успешно.
У вас, опять же, видимо была своя задача. Немного не понимаю, почему вы говорите о восстановлении потока. Что-то связано с модем.
95% это очень мало. Скорее всего мы о разном тут говорим.
Если скорость определяется верно, а петля автоподстройки охватывает вероятность появления «неудачных» байт в случайном потоке, то схема автоподстройки должна гарантировать попадание близкое к единице.
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 20:03
Сообщение #59


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(x736C @ Aug 25 2009, 21:40) *
реализовал @Ark для тех элементарных требований, которые у него были.

Элементарные частные требования были озвучены только в прошлом посте. Я рассуждал и рассуждаю о максимально универсальном независимом и отвязанном от протокола варианте. Частные случаи на то они и частные, что бы позволять применять частные заточенные решения.
Цитата
Проще вы это не сделаете так, как описываете.

Сделаю, легко и просто, ибо максимально тупой алгоритм. Проблем нет и даже из пальца они не высасываются smile.gif.
Цитата
Обратно как собираетесь скорость возвращать, если она изменится?

Что значит "она изменится"? Сама smile.gif Вы вдуг зачем-то захотите прыгнуть по бодовым скоростям вверх процессе работы? Неведомо зачем, но для этого можно, например, подать брейк многократно превыщающий текущюю байтовую длительность и по этом признаку уйти на максимальную, или использовать длительности break не в сетке бодовых скоростей.


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 20:04
Сообщение #60


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Ой, да, мы о разном. smile.gif
Вы о первом байте, а я вообще.
Все понял, пересчитывать за вами не буду. smile.gif
Go to the top of the page
 
+Quote Post
zltigo
сообщение Aug 25 2009, 20:11
Сообщение #61


Гуру
******

Группа: Свой
Сообщений: 13 372
Регистрация: 27-11-04
Из: Riga, Latvia
Пользователь №: 1 244



Цитата(x736C @ Aug 25 2009, 22:04) *
Вы о первом байте, а я вообще.

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


--------------------
Feci, quod potui, faciant meliora potentes
Go to the top of the page
 
+Quote Post
x736C
сообщение Aug 25 2009, 20:16
Сообщение #62


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Цитата(zltigo @ Aug 26 2009, 00:03) *
Элементарные частные требования были озвучены только в прошлом посте. Я рассуждал и рассуждаю о максимально универсальном [/b]независимом и отвязанном от протокола[/b] варианте. Частные случаи на то они и частные, что бы позволять применять частные заточенные решения.

Сделаю, легко и просто, ибо максимально тупой алгоритм. Проблем нет и даже из пальца они не высасываются smile.gif.

Что значит "она изменится"? Сама smile.gif Вы вдуг зачем-то захотите прыгнуть по бодовым скоростям вверх процессе работы? Неведомо зачем, но для этого можно, например, подать брейк многократно превыщающий текущюю байтовую длительность и по этом признаку уйти на максимальную, или использовать длительности break не в сетке бодовых скоростей.

С одной стороны говорите об универсализме, с другой стороны начинаете «высасывать из пальца» алгоритм универсальной автоподстройки.
Брейк — это усложнение, неужели не очевидно? В случае калибровки — да, я с вами согласился.
Скорость может меняться по разным причинам, не будем об этом.
Ладно, всем удачи. Спасибо за общение.

Цитата(zltigo @ Aug 26 2009, 00:11) *
Ой, да я вообще о байтах не говорю - ни о первых, ни о вторых, и не о последующих.

Я писал не вам, а отвечал SasaVitebsk. Просто вы успели написать сообщение между.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 26 2009, 16:30
Сообщение #63


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Наверное просто надо расставить все точки над i. Точнее говоря систематизировать понятия и знания. Кстати, недавно был удивлён. Оказывается основным достижением Менделеева во всём мире считается не таблица элементов, а то что он заложил основы систематизации как таковой. И, как мне кажется, это очень показательно что мы это его изобретение незаметили. Уж очень восточные славяне сумбурны и слабо поддаются причёсыванию. smile.gif Не то что немцы. У тех даже в концлагерях шёл чёткий учёт выбитых зубов.

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

Я бы всётаки тоже постарался не сваливать всё в кучу и сделал бы максимально независимыми задачи.
Давайте сначала их выделим.

1) Подстройка частоты проца.
2) Автоопределение скорости передачи
3) Приём байта
4) Приём пакета (инфы).

Автоопределение скорости, на мой взгляд, должно работать уже при гарантированной частоте кварца. Так как при любом алгоритме вы не получите точной величины. Например при частоте МК AVR в 8МГц, без применения специальных мер (типа завести Rx на две ноги), полингом вы получите точность измерения импульса 4 такта. При скорости 115200 точность измерения длительности составит ~6%. То есть совершенно очевидно, что для подстройки частоты кварца необходимо выбирать больший интервал. Один из вариантов вам предлогал zltigo. Кто-то на форуме предлогал по часовому кварцу калиброваться. Это уже другой вопрос как.

А если калибровка присутствует, то само автоопределение скорости может быть сделано и мастером. Например он посылает пакеты на разных скоростях и ждёт ответа. С момента установки соединения посылает команду перестройки частоты. Если идут ошибки в линии слэйв переходит на более низкую скорость. Это я как пример привёл.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 26 2009, 17:35
Сообщение #64





Guests






Цитата
Автоопределение скорости, на мой взгляд, должно работать уже при гарантированной частоте кварца.

Тоже как пример. Камень из серии PIC12 - простенький MK c 8-ю ногами. Две ноги - питание и земля. Занимать еще две кварцем - слишком расточительно (хотя и возможно). Обычно используется встроенный генератор 4МГц. Имеется возможность программно откалибровать, но не вижу в этом особого смысла. Все равно частота немного будет плыть от питания и температуры.
Аппаратный UART не предусмотрен, поэтому - только программный. Калибрую по своей методе, получаю значение БИ с точностью в 1 команду (номинально 1мкс) - лучше, в данном случае, не бывает. При скорости 9600 (длительность БИ 104мкс) имею погрешность порядка 1%. Для нормальной работы UART вполне достаточно. Все всегда работает.

Цитата
А если калибровка присутствует, то само автоопределение скорости может быть сделано и мастером.

Мастера, предпочитаю, не нагружать дополнительными задачами (у него своих хватает). Мастер выбирает скорость сам, из собственных соображений, а я под него подстраиваюсь (если это возможно).
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 27 2009, 09:16
Сообщение #65


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Вот ниграмма не возражаю и даже поддерживаю. Если вы внимательно читали, то в моём посте от 25.08 я оговариваюсь "Если обрабатывать поток непрерывно...". Это как раз данный случай.
Если реализовывать совтовый UART, то вы полностью контролируете всё: последовательность бит/байт/пакет. Это даёт вам возможность гарантировано востанавливать инфу (с момента однозначности), а также контролировать любые интервалы. То есть подстраивать кварц можно не побитно, а побайтно или 1 раз в 4 байта. Иными словами к моменту завершения приёма пакета вы имеете откалиброванный RC и выдаёте ответ с откалиброванным генератором.

Но я писал про другой вариант (думаю zltigo тоже). Думаю что вы не возражаете, против того, что совтовый UART с автободом и автокалибровкой отнимает значительное количество ресурсов? Кроме того, бывают ситуации, когда требуется реальное время и по другим задачам. То есть есть ещё источники прерываний. Поэтому приходится принять первый байт, а потом перейти в аппаратный режим чтобы иметь возможность отрабатывать параллельно другую задачу. В этом случае ваш вариант непролазит. Так как:

1) С момента переключения на аппаратный UART - автокалибровка и приём - совершенно разные задачи
2) По первому байту нет возможности гарантировать точную калибровку.
Go to the top of the page
 
+Quote Post
Guest_@Ark_*
сообщение Aug 27 2009, 10:10
Сообщение #66





Guests






Вы знаете, я когда-то тоже был "фанатом" универсальных решений, а сейчас все больше склоняюсь к прямо противоположной позиции. Все надо применять к месту, в зависимости от поставленной задачи. И универсальность решений - не исключение, imho.
Программный UART имеет свои преимущества и недостатки. Про недостатки Вы уже написали - съедает много ресурсов, накладывает ограничения на использование прерываний, плохо работает на высоких скоростях...
Но есть и неоспоримые преимущества перед аппаратным UART-ом: во-первых - на многих простых МК аппаратного UART-та просто нет (а он нужен), во-вторых - нет необходимости калибровать тактовый генератор (используем как есть), в третьих - можно использовать встроенный генератор и сэкономить на кварце. Кроме того, в некоторых случаях, кварц вообще нельзя использовать, например в случае сильных ударных вибраций. Много случаев, когда программному UART-у просто нет альтернативы...
К процедуре автоопределения скорости (автокалибровке) - у меня аналогичный подход... Конечно, общение с единичным устройством по MODBUS - частный случай. Тем не менее - достаточно широко распространенный, чтобы специально под него сделать процедуру автоопределения скорости. Причем, не налагая каких-либо дополнительных ограничений на сам протокол...
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Aug 27 2009, 19:20
Сообщение #67


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Ещё раз повторюсь. Я ничуть не оспариваю принятое вами решение. Считаю его правильным и обоснованным. Поддерживаю вас и в плане универсальности. Программа на МК уже сама по себе неуниверсальна.
Вместе с тем данное решение задачи не везде применимо - вот она неуниверсальность. smile.gif

А к универсальности мы всётаки двигаемся. И это заметно. Кто раньше на 20 ногом МК планировал применить вытесняющую ОС и писал на С++?
Go to the top of the page
 
+Quote Post

5 страниц V   1 2 3 > » 
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:23
Рейтинг@Mail.ru


Страница сгенерированна за 0.0201 секунд с 7
ELECTRONIX ©2004-2016