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

 
 
4 страниц V  < 1 2 3 4 >  
Reply to this topicStart new topic
> Вопрос по алгоритму
Laksus
сообщение May 31 2006, 19:41
Сообщение #16


Частый гость
**

Группа: Участник
Сообщений: 146
Регистрация: 16-05-05
Пользователь №: 5 069



И еще забыл спросить.
-А какая нестабильность по времени скорости каждого датчика?
То есть замерив скорость один раз можно ли ее использовать
через секунду, час, сутки?
Если меняется, то медленно, или скачками?
______________
Александр
2006 05 31
Go to the top of the page
 
+Quote Post
defunct
сообщение May 31 2006, 20:34
Сообщение #17


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(_4afc_ @ May 31 2006, 17:20) *
2. Считывать весь порт сразу с частотой в 3 раза выше скорости передачи.


В три раза получается нестабильно. Пробовал.
Наилучший результат без ущерба допуску 2% - пятикратная скорость.
Пример софтового уарта в реализации на T13 выложил в "исходники программ и библиотек", при желании пример можно доработать напильником под нужды автора, тем паче скорости у него значительно меньше..
Go to the top of the page
 
+Quote Post
bbill
сообщение May 31 2006, 20:58
Сообщение #18


Частый гость
**

Группа: Участник
Сообщений: 76
Регистрация: 21-10-05
Пользователь №: 9 941



От датчика посылки поступают по одному байту, минимально возможный интервал примерно от 0,5 сек и до нескольких минут. Возможны ситуации и до суток. Между байтами тишина.
Нестабильность частоты по времени-мала, изменяется медленно, без скачков. Основное это разброс частот по датчикам порядка ±10%.
Основная задача программы - прием данных от датчиков, декодирование принятого и выдача управляющих сигналов через регистровый буфер, так что основная загрузка- это прием.
И очень прав ksv198: основная проблема это непредсказуемость начала посылок и для полного счастья отклонение частоты.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 31 2006, 21:04
Сообщение #19


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(bbill @ May 31 2006, 23:58) *
И очень прав ksv198: основная проблема это непредсказуемость начала посылок и для полного счастья отклонение частоты.

Непредсказуемость это совсем не проблема, на то и были придуманы UART'ы. А вот отклонение частоты проблема, но незначительная - рашается с помощью наименьшего общего кратного, после чего обеспечиваются пропуски отсчетов для получения требуемых bitrate'ов.
Go to the top of the page
 
+Quote Post
defunct
сообщение May 31 2006, 21:21
Сообщение #20


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(redjin @ Jun 1 2006, 00:08) *
похоже действительно полинг нужен от 4 раз за время бода по прерыванию таймера и по мажоритарному принципу определять 1 или 0. Вроде все равно будет как сигналы расположены относительно друг друга.

Сбоить будет "нипадецки". дело в том что четырех-кратный Polling вносит ошибку 25%, что само по себе уже неприемлемо, пятикратный - 20%. Если решать задачу с помощью поллинга, то необходимо обеспечить ошибку не более 2%, что возможно только при 50-ти кратной частоте поллинга по сравнению с требуемым бод-rate'ом. А это IMHO уже накладно для AVR'ки.
Go to the top of the page
 
+Quote Post
mse
сообщение Jun 1 2006, 07:40
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693



Цитата
Если решать задачу с помощью поллинга, то необходимо обеспечить ошибку не более 2%, что возможно только при 50-ти кратной частоте поллинга по сравнению с требуемым бод-rate'ом. А это IMHO уже накладно для AVR'ки.

Ужас!!! ;О) Четырёхкратная выборка даст только отклонение от центра "бода" на 25% "вдаль". Кого это волнует? Тем более, если озвучена разница частот 2%. Правильно реализованая процедура непринуждённо принимает поток в 8 дудок по 9600 с тройной выборкой. Асинхронно, ессно.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 1 2006, 11:06
Сообщение #22


Гуру
******

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



Цитата(GetSmart @ May 31 2006, 15:24) *
Я вас умаляю!
При желании всё это можно сделать на асме. И почти на любом АВРе. Было бы желание.
Но тут похоже одни нытики и пессимисты.


Делал (выпускается серийно) модем. Там сделан автобод и P&P. Правда автобод грамотно работает до 230к. Частота 7372800 и однокристалка занята по самое немогу на ASM. А пишу я на ASMе с 1986 года. И проектов было ... не перечесть.

Сделать тяп/ляп - пара пустяков. Но если требуется стабильность и безошибочность, то это совсем другое. Человек говорит - датчики. Т.е. там не будет повторной передачи, запросов и CRC. Поэтому я исходил из стабильности работы изделия. В связи с этим я предлагаю - пусть будут разные скорости, но ПРИВЯЗАННЫЕ к каналам. Ну например 1,2 - 2400; 3 - 1200; 5-7 - 2400; Прога пишется таким образом что любой датчик вешается на любой канал, а потом каким-то образом осущ. конфигурация каналов. Алгоритм работы я уже предлогал. Конечно надо прислушится к мнению тех, кто уже осуществлял такие проекты. (имею ввиду увеличение числа выборок до 10-16)

Я не навязываю своё мнение, - я просто предлагаю решение, которое скорее всего выбрал бы я.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 1 2006, 11:16
Сообщение #23


Гуру
******

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



Цитата(mse @ Jun 1 2006, 10:40) *
Цитата
Если решать задачу с помощью поллинга, то необходимо обеспечить ошибку не более 2%, что возможно только при 50-ти кратной частоте поллинга по сравнению с требуемым бод-rate'ом. А это IMHO уже накладно для AVR'ки.

Ужас!!! ;О) Четырёхкратная выборка даст только отклонение от центра "бода" на 25% "вдаль". Кого это волнует? Тем более, если озвучена разница частот 2%. Правильно реализованая процедура непринуждённо принимает поток в 8 дудок по 9600 с тройной выборкой. Асинхронно, ессно.


По поводу 2%. Чёто Вы мешаете всё в одну кучу Уважаемые. 2% Вам обеспечит кварц (внимательно пост читайте) А выборок достаточно 3 как это делает аппаратно однокристалка 8051 да и любой др. послед. порт. (3-5). Увеличение числа выборок, я лично могу обосновать только дрожанием прерывания на один-два такта. И "ловить" начало стартового импульса, - абсолютно не надо! Это лишнее. За 10 бит выборки будут ложиться очень точно одна относительно одной! Что тут непонятного?
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 1 2006, 11:45
Сообщение #24


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ Jun 1 2006, 14:16) *
А выборок достаточно 3 как это делает аппаратно однокристалка 8051 да и любой др. послед. порт. (3-5). Увеличение числа выборок, я лично могу обосновать только дрожанием прерывания на один-два такта. И "ловить" начало стартового импульса, - абсолютно не надо! Это лишнее. За 10 бит выборки будут ложиться очень точно одна относительно одной! Что тут непонятного?

Помоему вы заблуждаетесь. Выборок в аппаратных портах - 16.
А что тут непонятного - реализуйте и увидите.

Цитата(mse @ Jun 1 2006, 10:40) *
Четырёхкратная выборка даст только отклонение от центра "бода" на 25% "вдаль". Кого это волнует?

Все верно, вносим сюда еще погрешность кварца 8Mhz для четырех выборок и погрешность вносимую длиной кода и получим еще 2-3% на бит (для 4800), что в итоге приведет к сумманой погрешности 25% + (20..30%) = 45%-55% на 10 бит, а это уже фактически один бит точно потерян. Вот и глюк.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 1 2006, 12:29
Сообщение #25


Гуру
******

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



Цитата(defunct @ Jun 1 2006, 14:45) *
Помоему вы заблуждаетесь. Выборок в аппаратных портах - 16.
А что тут непонятного - реализуйте и увидите.


Уважаемый 'defunct'. smile.gif Вы как всегда почти правы и я не берусь спорить. Смотрел я это давно по книге. Может и заблуждаюсь. Если же верить PDF (а не верить ему сложно), то в AVR ядре действительно 16 выборок на бит, но решение принимается по трём 8-9-10 (возможно это и ввело меня в заблуждение). Если же смотреть PDF на at89c51 (книгу на неё я смотрел когда-то), то на рисунке изображено три выборки. Хотя, конечно, рисунок достаточно схематичный. Но всё-таки это АБСОЛЮТНО не меняет написанного. Если брать суть проблемы, то точность определяется кварцем. Начало импульса не нужно определять (т.е. нужно определять с точностью до выборки).

Насчёт реализуйте - увидите. Давайте не опускаться, до банального. У меня нет сейчас такой задачи. Если будет - реализую. Возможно отойду в сторону от своего алгоритма. Но я его предложил! Предложил человеку! Так в чём меня упрекают? Что-то не понимаю? Если у Вас есть свой выложите! Если есть претензии к моему - напишите! А пустых фраз "знающего человека" - не надо! Просто не красиво это.

По поводу второй части поста: Погрешность кварца составляет 0.25% и ей явно можно пренебречь. Ещё раз отмечаю не имеет значение положение относительно центра. Посмотрите PDF. Имеет значение погрешность выборок одна относительно другой - своей. Эта погрешность определяется кварцем и "плаванием прерывания" При правильно написанной проге "плавание" составит 1 максимум 2 такта. И ни какой длины кода!!! Погрешность не будет накапливаться! Подумайте сами. Погрешность кварца только накопительная!

Сообщение отредактировал SasaVitebsk - Jun 1 2006, 12:37
Go to the top of the page
 
+Quote Post
bodja74
сообщение Jun 1 2006, 12:45
Сообщение #26


Знающий
****

Группа: Свой
Сообщений: 543
Регистрация: 22-10-05
Пользователь №: 9 984



Три выборки на бит прекрасно подойдут для фиксированной скорости и для одного канала,
спору нет,но не для шести с произвольным сдвигом посылок и разной погрешностью +/- 10%.
Подумайте сами ,если мы прекрасно настроимся даже на один канал,у нас будет накапливаться ошибка на остальных,и достаточно не слабая.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Jun 1 2006, 13:10
Сообщение #27


Гуру
******

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



Цитата(bodja74 @ Jun 1 2006, 15:45) *
Три выборки на бит прекрасно подойдут для фиксированной скорости и для одного канала,
спору нет,но не для шести с произвольным сдвигом посылок и разной погрешностью +/- 10%.
Подумайте сами ,если мы прекрасно настроимся даже на один канал,у нас будет накапливаться ошибка на остальных,и достаточно не слабая.


Давай определимся. Я говорю об rs232. Это так?

Если так, то Вы так и не поняли принцип. Погрешность не зависит от числа каналов. Не надо ни на что настраиваться!

Идёт выборка с частотой в 16 раз превышающая. Ты начинаешь отсчёт. В ОДНОМ прерывании от таймера. Считываешь ВСЕ каналы. Я тебе про это писал и др. чел. тоже писал, просто уточнил что он вешил все каналы на 1 порт. Это чтобы одной командой читать. Теперь представь что первый канал попал на 10% от начала. А пятый на 70%. Ну и что. Значит следующий импульс попадёт на теже самые проценты и так пока на закончится посылка. Т.е все 10 бит!

Поскольку таймер у тебя привязан к кварцу, то погрешность вызыва прерываний не превысит погрешность кварца. Единственно что у тебя может прерывание быть задержано на 1-2 такта (если не использовать MUL и т.п.). Но эта погрешность не накапливается! Давай её посчитаем.
На частоте 14372800 такт сотавляет ~70нс. Два такта 140нс. На частоте 4800 1 бит составит 208333нс. Таким образом погрешность составит менее 1%.

Так где Вы обнаружили 25%?
Или Вам нарисовать?
Go to the top of the page
 
+Quote Post
bzx
сообщение Jun 1 2006, 13:21
Сообщение #28


Местный
***

Группа: Свой
Сообщений: 482
Регистрация: 5-07-05
Из: Санкт-Петербург
Пользователь №: 6 528



to bbill
Я могу Вам сделать за определённый интерес. Обращайтесь ко мне в привате.


--------------------
Для связи email: info собака qbit.su
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Jun 1 2006, 13:22
Сообщение #29


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



bbill
Скажите, у вас скорость связи датчиков стабильна? Как мне показалось скорость стабильна на уровне RC-генератора. То есть как мокроконтроллер, работающий от внутреннего генератора. Во времени он почти стабилен, но всё-таки скорость может отличаться на +-10% от номинальной (2400+-10%).


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
defunct
сообщение Jun 1 2006, 14:25
Сообщение #30


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(SasaVitebsk @ Jun 1 2006, 16:10) *
Так где Вы обнаружили 25%?
Или Вам нарисовать?


Вопрос вероятно ко мне был.
Если отрезок в 1м длиной разбить на 4 равные части. Очевидно, что длина каждого из получившихся 4-х отрезков будет равна 25см или 25% от целого ;>

Теперь если переложить все это на задачу приема данных. Имеется некий отрезок времени T удержания передатчиком одного бита. Передатчик имеет свой допуск на стабильность этого отрезка времени - 2%.

Мы же делаем приемник. Для того чтобы бит принимался достоверно нам надо его прочитать в любой момент времени отрезка времени T. Пусть начало отрезка T соответвует 0%, а конец - 100%.

Про непредсказуемость прихода старт бита уже говорили. Т.о. в лучшем случае старт бит придет в самом начале отрезка и ошибка начального сдвига составит 0% - байт примется без вопросов.

В худшем случае старт бит придется на конец четверти отрезка и ошибка начального сдвига составит 25% . Поскольку считывание бита присходит со сдвигом по времени на дополнительных 50% от общей длительности отрезка T, то с этим сдвигом в 25% мы будет читать данные на расстоянии 75% от начала отрезка. Добавляем допуск передатчика в 2% для 10-ти бит соответвенно 2%*10 = 20%, добавляем также и собственную систематическую ошибку приемника (кварц/код) еще 2-3% (для 10-ти бит - 20-30%), а теперь суммируем все это:
25% + 50% + 20% (передатчик) + 20%..30% (приемник) = 115..125%
что явно выходит за рамки отрезка T, следовательно читать мы будем уже другой бит.


почему вообще у УАРТа допуск по стандарту 2% на один бит.
для 10 бит надо принять во внимание, что приемник делает сдвиг в 50% относительно момента прихода старт бита (потому что неизвестно направление ошибки в "плюс" или в "минус"), а общая ошибка (сдвиг момента времени считывания бита относительно начала старт бита) по допуску может достигать:
50% + 2%*10 (передатчик) + 2%*10 (приемник) = 90% т.е. для последнего 10-го бита кадра момент считывания придется на 90% от T этого бита. Гарантированный устойчивый прием.


Цитата
Насчёт реализуйте - увидите. Давайте не опускаться, до банального. У меня нет сейчас такой задачи. Если будет - реализую. Возможно отойду в сторону от своего алгоритма. Но я его предложил! Предложил человеку! Так в чём меня упрекают? Что-то не понимаю? Если у Вас есть свой выложите! Если есть претензии к моему - напишите! А пустых фраз "знающего человека" - не надо! Просто не красиво это.


Свой, доведенный до практической реализации я уже выложил.

Насчет реализуйте - увидите, имелось в виду ответ на вопрос из вышеприведенного Вашего поста:
Цитата
За 10 бит выборки будут ложиться очень точно одна относительно одной! Что тут непонятного?

Точности здесь нет: хотя выборки и будут ложиться с одинаковым интервалом, но интервал может приводить к тому, что момент выборки будет плыть относительно передатчика. Насколько там понятного и непонятного вопрос спорный, просто предложил проверить Вам реализацией. И необязательно сейчас, может когда-то потом когда у Вас будет время и интерес ;>
Go to the top of the page
 
+Quote Post

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

 


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


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