Views: 1570
Использование модуля ССР для декодирования команд
ИК пульта – 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
Использование модуля ССР для декодирования...Это может быть интересно
Development Boards PIC18F47Q84Views: 7819 Microchip тішить новими мікроконтролерами. Особливістю цього MCU – це багата інтелектуальна периферія, що дозволяє вирішувати такі завдання на 8 бітних MCU, які неможливо реалізувати на деяких навіть 32 …
Стабилизатор тока для светодиодов SN3350Views: 2750 SN3350 ближайший аналог ZXLD1350 Как собрать готовый вариант, читайте во второй части – http://catcatcat.d-lan.dp.ua/stabilizator-toka-na-sn3350-chast-2/ 40V драйвер светодиодов с внутренним ключом SN3350 – импульсный понижающий преобразователь, разработанный для того, чтобы эффективно управлять одним или …
CCP модуль для декодирования ИК-кодов пультов ДУViews: 1142 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
Четырех канальный терморегулятор ch-4000Views: 3404 Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
Development of temperature control and management systemsViews: 233 Catcatcat Electronics Пошта для контакту e-mail: catcatcat.electronics@gmail.com
Инфракрасный датчик движения, PIR-sensorViews: 3294 Домашняя автоматика предполагает наличие датчиков движения, которые способны контролировать движения человека. Самым простым и доступным устройством позволяющие контролировать изменения ИК-излучения, это ПИР-сенсоры. На текущий момент доступны не дорогие модели D203B, D204B, D205B. Все …
Altium Designer – создание рисунков на печатной платеViews: 3532 Для создание рисунков на печатной платы в Altium Designer можно использовать возможность использовать в Altium Designer сторонних скриптов. Мне возможность эта очень понравилась и я решил её расшарить …
MPLAB® Harmony – или как это просто! Часть 2.Views: 2925 Часть вторая – Первая программа на PIC32. Музыкальная тема к статье, слушаем: Для начала изучения PIC32 надо иметь или демоплату или самому её изготовить имея микроконтроллер. Начнем из …
Просто о внешних переменныхViews: 937 Часто возникает задача когда необходимо предавать данные между модулями программы. Например, передать данные между файлами, или управлять работой модулей. Для этого создаем заголовочный файл и описываем наши переменные как …
Altium Designer my Libraries, Project templates, System settings by Catcatcat V24.0 PROViews: 523 Назвемо цей варіант поновлення для професіоналів і не тільки. Що нового? 1. Повністю змінено структуру параметрів бази даних компонента. Це дозволило повноцінної роботи Актив ВОМ. Ви відразу отримуєте …
