Ревич, Ю.В. Программирование микроконтроллеров AVR: от Arduino к ассемблеру
Глава 1б. Некоторые Аrdиiпо-задачи на ассемблере 423 ключиться ночью из-за того, что его включили в коридоре, или включиться днем от того, что мимо окна по улице проехала машина, отбросив на потолок солнечный зайчик от лобового стекла. Потому все такие приемники предполагают подключение к контроллеру с декоди рованием команд. Опять же Сеть полнится кучей описаний разных протоколов пе редачи ИК-команд, как более или менее стандартных (RC4/5/6), так и всякой раз ной экзоти.ки. По большому счету тут никто никому ничем не обязан, единых при нятых стандартов не существует, и любая фирма может применять тот протокол и способ кодирования, который ей больше нравится . А нам надо в это вникать? Со вершенно нет: задача точного декодирования и повторения команды (как это, по вторим, сделано в библиотеке IRremote . h) возникает при желании построить свой пульт управления в пику уже готовым фирменным устройствам. Для нас актуальна совершенно иная задача- нам надо точно различать одну или несколько команд, посланных с конкретного пульта, чтобы они выполняли требуемое нам действие, и при этом устройство должно быть по максимуму защищено от ложных срабатыва ний. Причем требуемое число команд обычно невелико и не превышает десятка - скажем, для роботизированной тележки или катера с дистанционным управлением в базовом варианте их всего пять : движение вперед-назад, поворот вправо-влево, экстренный стоп. «Настоящий» код команды нас при этом совершенно не волнует - главное, чтобы команды четко различались, потому заниматься муторной расшифровкой «офици альных» протоколов нецелесообразно (их к тому же достаточно много разных, и не всегда точно известно, какой именно задействован в том или ином случае) . Мы применим простой в повторении и достаточно универсальный способ декодирова ния команд, который основан на использовании UART в качестве приемника по следовательности битов. В большинстве протоколов биты (или в случае манчестер ского кодирования - полубиты) имеют длительность порядка 400-600 мкс, и под них очень хорошо подходит стандартная скорость приема UART, равная 2400 бит/с. При этом полученные последовательности байтов окажутся далеки от «настоящих» кодов, но обязательно будут различаться для разных команд и точно воспроизводиться от раза к разу. Чем мы и воспользуемся для наших целей - 2400 бит/с можно воспроизвести на контроллере с любой частотой от 1 МГц и вы ше. Единственное требование здесь такое же, как при любом использовании UART, - «кварцованная» тактовая частота. Но и оно в нашем случае не является абсолютным, если определить возможные отклонения и учесть их в программе (пример вы увидите далее) . Или, что еще проще, просто пропускать ошибочно при нятые команды: если вы потренируетесь с программой распознавания кодов, то увидите, что ситуации, когда от двух разных кнопок возникает одинаковый код, не бывает, а какое-то количество несрабатываний можно допустить. Мы рассмотрим пример с двумя командами с помощью пульта от китайского мас сажера - я намеренно выбрал простейший пульт не от известных брендов. Пульт имеет всего три кнопки, из которых нам понадобится две : «Тimer» и «On/Off», и работает на частоте 3 8 кГц. Выбираем достаточно большой и чувствительный при емник TSOP I 73 8, но можно применить любой другой на эту частоту. Подключение
Made with FlippingBook
RkJQdWJsaXNoZXIy MTExODQxMg==