ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Пятница
19 апреля
778802
Dingo (08.09.2017 09:40, просмотров: 5500)
А вот ещё хочу мнения спросить. Синхронизация с некоторыми неизвестными, вдруг тоже давно известное решение. Есть два контроллера, которые используют общий тактовый сигнал, при этом один из них, мастер, задаёт его форму. Чтобы можно было в некоторых рамках быть уверенным, что номера тактов совпадают, один из 2^N импульсов делается бОльшей ширины. Ведомый использует прерывания по обеим фронтам: на спаде зануляет свой таймер, на фронте, смотрит ширину импульса, которую сравнивает с порогом. Он должен подобрать такой порог для ширины импульса, чтобы отличать обычные врезки от маркерных, и с маркерными синхронизировать свой счётчик, когда X&(2^N-1)==0 Сейчас хочу использовать такой алгоритм с сохранением результат предыдущего сравнения: if ( импульс <= меньше порога) { if ( пред. сравнение истинно ) { № импульса 2 .. 2^N-1 } else { № импульса =1 } } else { if ( пред. сравнение истинно ) { № импульса =0 } else { Увеличить величину порога } } Вопрос к уважаемым донам и дуэньям: как оценить, за какое время алгоритм гарантированно синхронизирует счётчик? Для наглядности набросал графически. В какие из "четвертей" выставлять синхронизацию, а в какие сбрасывать(может точно утверждать, что сбились или ещё не ... )? Полагаю сравнивать свой счётчик с ожидаемым в случаях #2, #3. Проблема: пока мы не "набрали" ширину порога в #1 мы можем обычный импульс принять за маркерный. Сбрасывать синхронизацию или увеличить порог? А если это не 2..2^N-1 , а маркерный импульс? Первая мысль - интегратор на флаг синхронизации прикрутить.
image