KEROL писал(а):
А вот алгоритмы работы действительно бы не помешали. Для универсальности. А там кто какой чип будет брать - его дело.
Для начала нужен общий алгоритм. А потом можно и подъалгоритмы тоже написать (как например для анализа ошибок в пакетах). НО общий точно нужен. Пусть даже текстом, в блок-схему переделаем...
У меня алгоритм простой до безобразия.
Прием:
Настраиваем порт INT0 чтобы он вызывал прерывание по спаду.
Как только TSOP ловит несущую, образуется спад и вызывается прерывание.
В прерывании
- перенастраиваем INT0 чтобы следующее прерывание было уже по фронту,
- обнуляем счетчик длительности низкого уровня на входе INT0.
- проверяем счетчик длительности высокого уровня на входе INT0. Если он, с учетом погрешности, соответствует длительности паузы и старт-бит принят - выходим из прерывания. Если не соответствуе - фиксируем ошибку приема пакета.
выходим из прерывания
Когда TSOP перестанет фиксировать несущую ИК, получается фронт, вновь вызывается тот же обработчик.
В прерывании
- перенастраиваем INT0 чтобы следующее прерывание было по спаду,
- обнуляем счетчик длительности высокого уровня на входе INT0.
- проверяем длительность импулься - сравниваем его с эталоном (Старт бит, единичка или ноль переданы) с учетом погрешности, если не соответствует ни одному из этих эталонов - фиксируем ошибку. Если это старт бит - выставляем флаг "старт бит принят", если это единичка или ноль и старт-бит принял, ложим эту единичку или ноль в буфер приема.
Окончание приема фиксируется по тайм-ауту - нет прерываний INT0 определенное время.
Для измерения длительности пакетов используется прерывание таймера с частотой вдвое большей частоты несущей ИК - 72 кГц.
Кратко так, подробней - будет время, опишу.