Прием команд 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
Скачать: Коментарии
Ваш комментарий