Цитата(Pyku_He_oTTyda @ Jan 31 2007, 19:21)

Имеется некая последовательность, одну посылку из нее нарисовал (вкладка)
Тайминги расписал, то, как я понимаю назначение посылок тоже...
Подскажите, как правильно декодировать посылку, так как никогда этим не занимался...теории нет.
Может есть вероятность, что она похожа на какую нибудь стандартную последовательность.
В общем буду благодарен за любую информацию!
Заранее спасибо!
З.Ы. пока думаю настроить прерывание на изменение уровня, и между возникновениями флагов считать длительность. Правильно ли?
Сигнал всегда такой чистый, или может быть зашумлен между посылками?
Стабильность тактовых частот источника и контроллера декодера?
Если тактухи источника и контроллера ползают, и сигнал зашумлен, я не генерю по нему прерывания, а анализирую изменение сигнала в таймерных прерываниях с частотой 2/te (te - длительность минимального элемента в посылке; в Вашем случае - 1 мс).
В привязке к приведенной картинке: удобно отслеживать перепады 0/1, по ним подстраивать таймер, получать по таймеру 16 (8, если перестроить таймер на te) отсчетов для хидера посылки и по 8 (4) отсчетов для каждого бита. Как их обрабатывать - сравнивать ли с образцом, счетчиком ли (н-р, при выборке sample? cnt++: cnt--; по окончании бита if(cnt == ..)...), зависит от зашумленности сигнала. При наличии шума очень рекомендую не иcпользовать счетчик, а последнюю выборку для бита проверять на == 0.
Если шума нет, то можно по перепаду 0/1 генерить прерывание и запускать таймер на длительность 1.5*te для второй выборки (считаем, что первая уже была, и она = 1; 1.5*te - чтобы попадать выборкой на середину следующего элемента), и на длительность te для последующих в течение приема одного бита или хидера. Дальше также.
Если и тактухи не плавают, то можно обойтись одной синхронизацией таймера на всю посылку.
ЗЫЖ PWM 3:1/1:3 - не совсем обычно (н-р, в кодерах сигналок обычно 2:1/1:2) и более жестко по допускам на разброс тактух, но в плане обработки - просто PWM.