www.open-tager.ru
http://www.open-tager.ru/forum/

Проект - точка доминирования с таймером (старт)
http://www.open-tager.ru/forum/viewtopic.php?f=5&t=2204
Страница 3 из 4

Автор:  Pacifist [ 08 дек 2013, 11:08 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

ИМХО должна быть проверка импульсов на соответствие по мин. и макс. длине, как то так:
Стартовый импульс 2300 - 2500 мкс
Пауза между битами 550 - 650 мкс
И в декодировании проверять:
Бит "0" - 550-650 мкс,
бит "1" - 1150 - 1250 мкс.

Всего-то надо добавить в проверки еще несколько условий, компактности не повредит.
Сделать для заголовка проверку так:
Код:
if (RX_START == 0 && CCP1M0 == 0 && CCP_buf > 4400 && CCP_buf < 5000)

И для паузы:
Код:
 if (CCP1M0 && (CCP_buf > 1300 or CCP_buf < 1100))       // if bit too long, then error

Автор:  mail_robot [ 08 дек 2013, 11:08 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

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

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

Автор:  mail_robot [ 08 дек 2013, 11:15 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

есть правда одно но, которое пришлось допустить наобум - максимальная длинна паузы. Я сделал ее 1800 (900 мкс) и думаю это многовато, но для эксперимента оставил. И нижний предел длинны паузы не проверил. Вот тут конеш ошибка явная. Факт. Если паузы будут всегда короткими, то примется все что угодно :oops:

Автор:  Pacifist [ 08 дек 2013, 11:18 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

mail_robot писал(а):
а зачем проверять это при приеме пакета?
чтобы отработать ошибку и тут же принять новую? Проводить проверку при приеме можно только для пауз. Все остальное не имеет особого смысла. Ибо известна заранее точно только длина пауз и их положение в посылке. Даже проверка длинны стартового импульса помоему не имеет смысла. Пусть он будет к примеру длиннее, ну и что? Может это наоборот даст лучшую чувствительность к приему. Слишком жесткие условия тоже же не айс

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

Проверять придется затем, что-бы не засчитать засветку от солнца как начало пакета, чтоб люминесцентные лампе не "нагенерировали" выстрелов.
И паузы проверять не только на макс длинну, но и на минимальную. Иначе любой самый кратковременный перерыв импульса во время приема засчитается как коректная пауза.

Автор:  mail_robot [ 08 дек 2013, 11:18 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

Код:
if (CCP1M0 && CCP_buf > 1300 && CCP_buf <1100)       // if bit too long or too short, then error


так наверное правильнее будет
но опять же, только для пауз. Остальное целесообразнее делать в обработчике пакета уже в основной проге, чтобы не загружать этой работой прерывание. Их итак хватает

Автор:  Pacifist [ 08 дек 2013, 11:21 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

Про допуски в длительностях импульсов - из практиик приемники ТСОП имеют свойство уменьшать принимаемые сигналы на 10-20мкс (наверное АРУ так отраьбатывает). Так что в допусках коректный диапазон для импульсов желательно расширять "вниз", а для пауз - "вверх".

ЗЫ
Код:
CCP_buf > 1300 && CCP_buf <1100
- такое условие никогда не сработает ;), логическое ИЛИ надо вместо И

Автор:  mail_robot [ 08 дек 2013, 11:23 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

Pacifist писал(а):
mail_robot писал(а):
а зачем проверять это при приеме пакета?
чтобы отработать ошибку и тут же принять новую? Проводить проверку при приеме можно только для пауз. Все остальное не имеет особого смысла. Ибо известна заранее точно только длина пауз и их положение в посылке. Даже проверка длинны стартового импульса помоему не имеет смысла. Пусть он будет к примеру длиннее, ну и что? Может это наоборот даст лучшую чувствительность к приему. Слишком жесткие условия тоже же не айс

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

Проверять придется затем, что-бы не засчитать засветку от солнца как начало пакета, чтоб люминесцентные лампе не "нагенерировали" выстрелов.
И паузы проверять не только на макс длинну, но и на минимальную. Иначе любой самый кратковременный перерыв импульса во время приема засчитается как коректная пауза.


про старт подумаю. Может и правда стоит сделать. Потому как неизвестно заранее в какой момент посылки шумового пакета будет принят именно он. Он просто может оказаться в середине где нибудь.
да, надо проверять. Спасибо за настойчивый пинок )))
при или второпях затупил. конечно ИЛИ

Автор:  mail_robot [ 08 дек 2013, 11:27 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

поправил код

Автор:  Pacifist [ 08 дек 2013, 11:31 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

Правильное использование "железа" контроллеров позволяет писать весьма компактный и быстрый код. За что люблю ПИКи - что у них можно подобрать для себя почти любую нужную конфигурацию по ресурсам, хоть 7 ССР модулей :).
Берем PIC16F737 - имеем 3 ССР модуля, на один вешаем прием от ТСОР, на другой - ШИМ выстрела ИК, на третий - ШИМ звука. Чем не бюджетное решение?

Автор:  mail_robot [ 08 дек 2013, 11:33 ]
Заголовок сообщения:  Re: Проект - точка доминирования с таймером (старт)

Код:
CCP_buf = CCPR1;                // save CCPR1


эту строчку наверное можно даже убрать и читать значения прямо из буфера чтобы избавиться от переменной. Хотя есть вероятность что импульс будет очень короткий и успеет за несколько тактов процессора обновить буфер приема. Но тогда по идее не успеет переключиться детектор фронта/среза и 2 импульса примутся как один с общей длинной.... хм. Над подумать
вроде ничего особенно плохого случиться не должно

Страница 3 из 4 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB® Forum Software © phpBB Group
http://www.phpbb.com/