
Views: 1549
Использование модуля ССР для декодирования команд
ИК пульта – APA1616.
Для управление домашней автоматикой удобно использовать недорогие пульты дистанционного управления на ИК-лучах.
Пульт простой, компактный, экономичный питание одна батарейка 3,3 V CR2025. Рассмотрим передачу пульта:
Начитается передача с формирования синхро импульса, длительность его 13 мс, длительность передачи 0 – 1,14 мс, 1 – 2,23 мс. Кодируется просто начало бита (или синхроимпульса) это отрицательный перепад. Для декодирования необходимо синхронизироваться от отрицательного перепада и измерять длительность. В передачи три байта (24 бита). Информационный последний байт. После передачи команды передается код автоповтора – бит длительностью 11 мс.
Логика декодирования проста. Ждем отрицательный перепад, измеряем длительность, далее проверяем если длительность больше 13 мс. Это синхробайт. Если больше 10 мс – это автоповтор. Если больше 1,9 мс – передача бита 1. Если больше 0,9 мс – передача – 0.
Декодирование выполним при помощи модуля CCP работающего в режиме ЗАХВАТА.
Настройка модуля, для измерения выберем CCP4:
T1CON=0b00110001; // настройка таймера T1CON // |||||| | // |||||| +-- TMR1ON таймер включить // |||||+---- T1SYNC синхронизация отключена // ||||+----- T1OSCEN генератор отключен // ||++------ T1CKPS настройка предделителя 00 - 1:1 // ++-------- TMR1CS выбор тактовой частоты FOSC CCP4CON=0b00000100; // вход RB0 // ++++-- CCPxM<3:0>: режим работы - Capture mode: every falling edge
По каждому отрицательному перепаду формируется прерывание, в этот все необходимые измерения и вычисления.
void interrupt my_isr(void) // высоко приоритетное прерывание { if(CCP4IF)// { CCP4IF=0; // сброс вектора прерывания. pwm_reg=TMR1L; pwm_reg += TMR1H << 8; TMR1L=0; TMR1H=0; if(pwm_reg>12000&&TMR1IF)// передача синхроимпульса должна сопровождаться переполнением таймера { chetchic=24;//счетчик бит (3 байта 8*3=24) TMR1IF=0; } else if (pwm_reg>10000)// передача "бита автоповтора" { AUTO=1; } else if (pwm_reg>1900&&chetchic>0) // передача "1" { bait01>>=1; bait01 |= 0b10000000; chetchic--;//подсчет принятых бит if(!chetchic&&bait01<24)PRIEM=1;// установить флаг команда принята если переданы все 24 бита и полученные данные меньше 24 } else if (pwm_reg>900&&chetchic>0)// передача "0" { bait01>>=1; chetchic--;//подсчет принятых бит if(!chetchic&&bait01<24)PRIEM=1;// установить флаг команда принята если переданы все 24 бита и полученные данные меньше 24 } } }//
При получении прерывания от CCP модуля, считываем значение с Таймера, сбрасываем его. Полученную длительность с модуля CCP сравниваем с заранее выбранными параметрами.
Для индикации принятой команды используется главный цикл программы.
while(1) { CLRWDT(); // сброс сторожевого таймера //----------------------------------------------------------- if(PRIEM) // если передача получена, вывести индикацию { PRIEM=0; bin_dec (bait01,0);// преобразование для индикации indic (dmil,miln,stys,dtys,tysc,sotn,dest,edin,0); // вывод значения на дисплей } if(AUTO) { AUTO=0; indic (cP,co,0,0,0,0,dest,edin,0); // вывод значения на дисплей передачи автоповтора __delay_ms(30); indic (dmil,miln,stys,dtys,tysc,sotn,dest,edin,0); // вывод значения на дисплей } __delay_ms (20);// это так для прикола }
Для демонстрации используется ИК порт платы ILLISSI-4С-01-secundo. На ней установлен ИК-приемник с несущей 36 кГц. Хотя пульт использует несущую в 38 кГц. прием вполне приемлемый и габаритах обычной квартиры до 10 метров в прямой видимости работает отлично. При расстоянии до 5 метров возможен уверенный прием и при отраженном сигнале. Если необходима большая чувствительность то рекомендуется применить приемник с несущей 38 кГц.
Для демо примера используются сборка из плат ILLISSI-4B-03-primum и ILLISSI-4С-01-secundo.
Кодировка пульта простая, в нем 24 клавиши, коды с 0 до 23. Соответствие кодов клавишам.
00 – 01 – 02 – 03
04 – 05 – 06 – 07
08 – 09 – 10 – 11
12 – 13 – 14 – 15
16 – 17 – 18 – 19
20 – 21 – 22 – 23
Фото проекта
Видео проекта
Файлы проекта
Версия – 1.1

Применение модуля ССР в режиме захвата - v1.1 29.14 KB 785 downloads
Использование модуля ССР для декодирования...
Применение модуля ССР в режиме захвата - v1.4 20.67 KB 896 downloads
Использование модуля ССР для декодирования...Это может быть интересно
Проект с использованием MCC часть 15
Views: 1662 EUSART – Универсальный асинхронный приёмопередатчик (УАПП, англ. Universal Asynchronous Receiver-Transmitter, UART) — узел вычислительных устройств, предназначенный для организации связи с другими цифровыми устройствами. … читать на вики. Внесем изменения в нашу схему, …Самый простой диммер для светодиодного освещения
Views: 3156 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …Контроллер управления светодиодным освещением с дистанционным управлением
Views: 2037 Все активнее светодиоды входят в нашу жизнь. Всё эффективнее становится светодиодное освещение. Всё ниже опускаются цены. Всё больше появляется возможностей получения сочных цветов, простоты в управлении. Всё чаще …MPLAB® Harmony – или как это просто! Часть 2.
Views: 2840 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …Kitchen timer with contactless gesture control
Views: 686 Кухонний таймер з безконтактним керуванням жестами дозволяє встановити необхідний період часу для приготування страв, не торкаючись пристрою. Дуже зручно під час приготування їжі, коли руки забрудниться. Усі …APA102 – светодиоды со встроенным драйвером и SPI интерфейсом
Views: 3414 APA102 В 2014 году фирма Shenzhen Led Color Optoelectronic Co., Ltd http://www.szledcolor.com/ начала производство светодиодов на драйвере APA102. Это серия так называемых светодиодов со встроенным драйвером. Основной особенностью этих …Проект с использованием MCC часть 04
Views: 1277 Теперь простого горения светиков нам не достаточно, заставим их мигать. Для начала используем первобытно простой способ, но достаточно простой. Используем функции delay, напрягаться откуда они берутся не будем, самое …Часы-кухонный таймер
Views: 2840 Каждая кухня должна иметь кухонный таймер, который позволяет напоминать хозяйке когда проходить определенный промежуток времени. Например, печем пирог, варим яйца… , чтобы не смотреть постоянно на часы, установим таймер и …Модуль CAN в микроконтроллерах PIC18
Views: 5887 Введение CAN последовательный интерфейс связи, который эффективно поддерживает распределенное управление в реальном масштабе времени с высокой помехозащищенностью. Протокол связи полностью определен Robert Bosch GmbH, в спецификации требований …Интерактивные Led
Views: 555 Тема проекта продолжение следует…. Это может быть интересно