Субота, 27.04.2024, 23:57
Приветствую Вас Гість | RSS

Radiomanoff+

Меню сайта
Форма входа
Календарь
«  Квітень 2024  »
ПнВтСрЧтПтСбНд
1234567
891011121314
15161718192021
22232425262728
2930

Дистанционное управление на Atmega8 (протокол RC-5)



Как-то сидя в мастерской,ковыряясь в интернете "надыбал" на интересную статью Прием команд с пульта дистанционного управления .Алгоритм включения - нажатие на кнопку пульта,загорается соответствующий светодиод;при каждом новом нажатии менялся на другой светодиод.
Мне же хотелось 

-при нажатии кнопки включался светодиод, по нажатии этой же клавиши второй раз, он выключался.И естественно возможность включения всех светодиодов вместе.

Двумя словами - "дистанционное управление нагрузками"

Схема девайса:

Исходник:

#include <avr/io.h>
#include <avr/interrupt.h> 
#include <util/delay.h>
#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) // если получены данные с ПДУ
  {
     if (rc5.command==1)  // если это кнопка 1
 {
          if (CheckBit(PIND, 0)) cbi(PORTD, 0);  //если канал 1 включен, выключаем
          else sbi(PORTD, 0);  // если канал 1 выключен, включаем
          }

          if (rc5.command==2)  // если это кнопка 2
 {
          if (CheckBit(PIND, 1)) cbi(PORTD, 1);  //если канал 2 включен, выключаем
          else sbi(PORTD, 1);  // если канал 2 выключен, включаем
          }

          if (rc5.command==3)  // если это кнопка 3
 {
          if (CheckBit(PIND, 2)) cbi(PORTD, 2);  //если канал 3 включен, выключаем
          else sbi(PORTD, 2);  // если канал 3 выключен, включаем
          }

          if (rc5.command==4)  // если это кнопка 4
 {
          if (CheckBit(PIND, 3)) cbi(PORTD, 3);  //если канал 4 включен, выключаем
          else sbi(PORTD, 3);  // если канал 4 выключен, включаем
          }
          _delay_ms(700);  //задержка 700 мс
          rc5.dataOK = 0;  // сбрасываем флаг
       }
       
}


}

И так далее до восьми каналов.
Проект AVR_Studio для 4-ех каналов здесь .


Проверено - работает!








Архив записей
Статистика

Онлайн всього: 1
Гостей: 1
Користувачів: 0