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 мкс) и думаю это многовато, но для эксперимента оставил. И нижний предел длинны паузы не проверил. Вот тут конеш ошибка явная. Факт. Если паузы будут всегда короткими, то примется все что угодно |
Автор: | 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/ |