|
|
  |
Вопрос по алгоритму |
|
|
|
Jun 1 2006, 07:40
|
Знающий
   
Группа: Свой
Сообщений: 709
Регистрация: 3-05-05
Пользователь №: 4 693

|
Цитата Если решать задачу с помощью поллинга, то необходимо обеспечить ошибку не более 2%, что возможно только при 50-ти кратной частоте поллинга по сравнению с требуемым бод-rate'ом. А это IMHO уже накладно для AVR'ки. Ужас!!! ;О) Четырёхкратная выборка даст только отклонение от центра "бода" на 25% "вдаль". Кого это волнует? Тем более, если озвучена разница частот 2%. Правильно реализованая процедура непринуждённо принимает поток в 8 дудок по 9600 с тройной выборкой. Асинхронно, ессно.
|
|
|
|
|
Jun 1 2006, 11:06
|
Гуру
     
Группа: Свой
Сообщений: 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) Я не навязываю своё мнение, - я просто предлагаю решение, которое скорее всего выбрал бы я.
|
|
|
|
|
Jun 1 2006, 11:16
|
Гуру
     
Группа: Свой
Сообщений: 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 бит выборки будут ложиться очень точно одна относительно одной! Что тут непонятного?
|
|
|
|
|
Jun 1 2006, 11:45
|

кекс
     
Группа: Свой
Сообщений: 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 бит, а это уже фактически один бит точно потерян. Вот и глюк.
|
|
|
|
|
Jun 1 2006, 12:29
|
Гуру
     
Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521

|
Цитата(defunct @ Jun 1 2006, 14:45)  Помоему вы заблуждаетесь. Выборок в аппаратных портах - 16. А что тут непонятного - реализуйте и увидите. Уважаемый 'defunct'.  Вы как всегда почти правы и я не берусь спорить. Смотрел я это давно по книге. Может и заблуждаюсь. Если же верить PDF (а не верить ему сложно), то в AVR ядре действительно 16 выборок на бит, но решение принимается по трём 8-9-10 (возможно это и ввело меня в заблуждение). Если же смотреть PDF на at89c51 (книгу на неё я смотрел когда-то), то на рисунке изображено три выборки. Хотя, конечно, рисунок достаточно схематичный. Но всё-таки это АБСОЛЮТНО не меняет написанного. Если брать суть проблемы, то точность определяется кварцем. Начало импульса не нужно определять (т.е. нужно определять с точностью до выборки). Насчёт реализуйте - увидите. Давайте не опускаться, до банального. У меня нет сейчас такой задачи. Если будет - реализую. Возможно отойду в сторону от своего алгоритма. Но я его предложил! Предложил человеку! Так в чём меня упрекают? Что-то не понимаю? Если у Вас есть свой выложите! Если есть претензии к моему - напишите! А пустых фраз "знающего человека" - не надо! Просто не красиво это. По поводу второй части поста: Погрешность кварца составляет 0.25% и ей явно можно пренебречь. Ещё раз отмечаю не имеет значение положение относительно центра. Посмотрите PDF. Имеет значение погрешность выборок одна относительно другой - своей. Эта погрешность определяется кварцем и "плаванием прерывания" При правильно написанной проге "плавание" составит 1 максимум 2 такта. И ни какой длины кода!!! Погрешность не будет накапливаться! Подумайте сами. Погрешность кварца только накопительная!
Сообщение отредактировал SasaVitebsk - Jun 1 2006, 12:37
|
|
|
|
|
Jun 1 2006, 13:10
|
Гуру
     
Группа: Свой
Сообщений: 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%? Или Вам нарисовать?
|
|
|
|
|
Jun 1 2006, 14:25
|

кекс
     
Группа: Свой
Сообщений: 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 бит выборки будут ложиться очень точно одна относительно одной! Что тут непонятного? Точности здесь нет: хотя выборки и будут ложиться с одинаковым интервалом, но интервал может приводить к тому, что момент выборки будет плыть относительно передатчика. Насколько там понятного и непонятного вопрос спорный, просто предложил проверить Вам реализацией. И необязательно сейчас, может когда-то потом когда у Вас будет время и интерес ;>
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|