Прием команд RC5

В этой статье я расскажу, как принимать команды с пульта (ПДУ) с кодировкой RC5. Подробное описание протокола не имеет смысла так как этого в интернете предостаточно.

Схема:

Микроконтроллер Atmega8 (тактирование 1 МГц от внутреннего генератора), ИК-приемник TSOP1736
подключен к входу захвата ICP, на порту D висят светодиоды.
Итак, сейчас мы сделаем чтобы при нажатии на цифровую кнопку на ПДУ зажигался соответствующий светодиод (от 0 до 7).

Код, ну очень простой:

#include "rc5.h"
#include "main.h"  


int main (void) 

{

   PORTB = 0b00000000; DDRB = 0b00000000; PORTC = 0b00000000; DDRC = 0b00000000;

   PORTD = 0b00000000; DDRD = 0b11111111; // тут светодиоды

   Rc5_SetRx(); // инициализируем таймер 1

   sei(); // глобально разрешаем прерывания

while(1) 
{

   if (rc5.dataOK) 
   { // если получены данные с ПДУ

      PORTD = 0; // тушим все светодиоды sbi(PORTD, rc5.command);// зажигаем светодиод, соответствующий комманде с ПДУ

      rc5.dataOK = 0; // сбрасываем флаг

   }

}

}

После инициализации таймера и разрешения прерываний включается захват, и микроконтроллер начинает обрабатывать данные, принятые с пульта. Если получен пакет данных, то активируется флаг rc5.dataOK, а принятая команда записывается с переменную структуры rc5.command.
Стоит иметь ввиду, что пульт отправляет не только команду, а и номер системы, если 0, то это команда для телевизора.
rc5.h содержит функции, для работы с RC5 и структуру rc5:

struct 
{
unsigned char control_bit; 
unsigned char system; 
unsigned char command; 
unsigned char flag; 
unsigned char dataOK; 
unsigned char error; 
} rc5;

После приема пакета с пульта поднимается флаг dataOK, в system записывается номер системы, в command — номер команды, если в пакете была ошибка, то поднимается  флаг error.

Видео работы устройства: http://youtu.be/Dqghjc3oivY

Скачать:  Проект AVRS6

Скачать:  Коментарии

Ваш комментарий