Управління мікро контролером по nec протоколу

Але залишилася одна не вирішена проблема - відсутність камери. Звичайно, фотоапарат з осудною камерою є, але його гемморой з батарейками просто зводить все задоволення від зйомки нанівець. В результаті вилізло ще пару «за», тому в будинку виявився планшет. На початку ніхто навіть не здогадався для яких «брудних» цілей мені він знадобився

Але сьогодні не про це, як виявилося все набагато простіше. Зовсім випадково у мого девайса на борту виявився ІК вихід, я розплакався згадавши часи Qtek S200, у нас в універі стояли телевізори з навчальними каналами, а ми ходили і перемикали на спортивні канали. Треба було бачити сказ преподов

Крім того в комплекті йшла программуліна підтримує купу різних телевізорів, музичних центрів та ін. Отже завдання стала більш зрозумілою, так як вдома присутній телевізор samsung з пультиком, то в кінцевому рахунку завдання звелася до того, щоб управляти з пульта мікро контролером, бо планшет підтримує цей пульт.

Як вирішується це завдання? Рекомендую спочатку ознайомитися тут. Береться TSOP4836, подається харчування, а вихід підключається до осцилографа. «Заглянув я під кусточек що побачив там ... Маю на увазі бачимо ось таке

Управління мікро контролером по nec протоколу

Пишемо в гуглі: «протоколи інфрачервоних пультів», дивимося на що схожий наш сигнал. Шукати довго не довелося, бо зрозуміло що це NEC протокол.

Залишилося розібратися як це справа працює. Ще в минулий раз, коли розбирався з NRF24L01 запалив на сайті MCS Electronics AN # 157 - Implementation of IR NEC protocol. Основна ідея роботи взята трохи менше ніж повністю звідти.

Логіка роботи: чекаємо від зовнішнього переривання сигнал по спаду, якщо прийшов - значить запускаємо таймер. Наступної зовнішнє переривання вважаємо кількість тиків, які зробив таймер, якщо їх достатньо, то значить прийшов старт біт, виставляємо прапор, скидаємо таймер, чекаємо наступного переривання. Якщо тики в потрібному діапазоні, то записуємо дані, від нуля до 32 біт. Якщо ж дані в межах дії - зупиняємо таймер, обнуляє і чекаємо до наступного переривання.

Зверніть увагу дані 1 і 0 кодуються тривалістю імпульсу, короткий імпульс - нуль, довгий - одиниця. Спершу код не заробив, довелося потикатися осциллографом, дуже виручив недавно спечений uart terminal, в результаті виявилося що таймінги не відповідають моїм, зробив трохи поменше і все запрацювало.

Для бажаючих - прошивка