В этом проекте выделяются такие свойства как:
- управление одной кнопкой(включить / выключить) или двумя (дополнительно выключить после обратного отсчета таймера),
- использование любого пульта стандарта RC5,
- один пульт дистанционного управления может обрабатывать до десятка приемников (это зависит только от количества доступных кнопок),
- возможность запоминать команды, поэтому не придется перепрограммировать микроконтроллер после смены пульта дистанционного управления,
- источник питания с использованием бестрансформаторного источника питания, благодаря которому система легко помещается в корпус Z-27.
Работа схемы
На рисунке 1 представлена схема. Как видите, система управляется микроконтроллером ATtiny13 ATMEL. Он оснащен флэш-памятью объемом 1 КБ, энергонезависимой памятью EEPROM емкостью 64B и памятью SRAM 64 Б. Памяти программы очень мало, но удалось уместить все функции, которые были запланированы. Блок питания собран по бестрансформаторной схеме. Конденсатор С1 емкостью 330 нФ должен обеспечивать ток более 15 мА даже при пониженном сетевом напряжении. Из-за низкого КПД такого простого источника питания были использован оптотриак MOC3043, в котором ток открытия составляет всего 5 мА, поэтому его не следует заменять на MOC3042 или MOC3041.
TFMS5360 или его аналог TSOP1736 работает как приемник сигнала ПДУ. Цепочка R6C5 обеспечивает сигнал на вывод сброса. Хотя микроконтроллеры AVR имеют встроенные схемы, которые обеспечивают сброс после включения питания, но при тестировании прототипа оказалось, что он чувствителен к помехам, возникающим в сети при включении и выключении галогенной ночной лампы. Источником помех, вероятно, был встроенный в лампу трансформатор. Помехи незначительны из-за использования оптотриака с переходом фазового перехода через ноль. Однако ручное переключение выключателя света часто приводило к сбросу микроконтроллера. После добавления этих элементов проблема была решена.
Программа управления микроконтроллером была написана на C .
В начале основного цикла находятся процедуры синхронизации и алгоритм декодирования для команд RC5. Время для алгоритма декодирования заключается в чтении содержимого регистра состояния TCNTO Timer0. Таймер синхронизируется с прескалером, запрограммированным для деления системной тактовой частоты на 16, так что приращение происходит каждые 53,3 uc (микросекунд).
Для простоты жестко установлены времена RCSREF1 и RCSREF2, хотя в примечании AVR410 они рассчитываются на основе длины начального бита.
Декодирование сигнала RC5 основано на дискретизации входного состояния PB2.
Сначала мы ожидаем стабилизации интервала RC5REF0 (около 3,5 мс). При правильной связи интервал между пакетами составляет несколько десятков миллисекунд, а длина в битах составляет прибл. 1,8 мс, поэтому ожидание 3,5 мс должно избежать ошибок, вызванных попыткой интерпретировать помехи или «пойманный» кадр в середине передачи.
После того как линия стабилизируется, мы ждем низкого состояния, которое будет означать начало кадра, в частности, первый из двух начальных битов. Timer0 будет сброшен, и начнется обратный отсчет RC5REFI. Приблизительно после 3/4 длины в битах будет считано состояние линии, что обозначено пунктирной линией на рисунке 2. Мы интерпретируем высокое состояние как бит со значением «1» (потому что через мгновение будет спад, который кодирует один), мы интерпретируем низкое состояние как бит со значением «0» (потому что через мгновение появится нарастающий фронт, который кодирует ноль).
Постоянная времени RC5REF2 составляет около 5/4 бит. Если наклон не возникает между концом RC5REF1 и концом RC5REF2 (между зеленой и синей пунктирной линией), это будет считаться ошибкой передачи, и алгоритм начнется с начала. Если ошибок не возникнет, декодирование прекратится после получения 13 битов, первый из которых должен быть «1» - это второй из двух начальных битов (первый игнорируется алгоритмом, как показано на рисунке).
Измерение более длительных периодов времени проводилось другим, необычным способом.
Поскольку AFtinyl3 не имеет двух таймеров, был использован сторожевой таймер, который был запрограммирован для генерации прерывания WDT каждые 125 мс. В обработчике прерываний установлен только флаг с именем tik. Другие операции выполняются в основном цикле.
Переменная minutnik обратного отсчета систематически уменьшается, и в то время, когда его значение изменяется с 1 на 0, лампа выключена.
Время, измеренное таймером, зависит от состояния входов PB3 и PB4 (SWO и SW1 в программном коде). В прототипе к этим входам подключен DIP-переключатель; также можно использовать перемычки или установить нужное значение прямо в коде.
Переменная opozniacz не позволяет слишком часто включать и выключать устройство. Поскольку алгоритм декодирования игнорирует бит «четности» в кадре RC5, в результате
удерживая кнопку на пульте дистанционного управления, лампа будет постоянно включаться и выключаться (поскольку одна и та же команда отвечает за обе эти операции).
Чтобы избежать этого, была добавлена упомянутая переменная,которая блокирует состояние контролируемого устройства на 1с. Другими словами, невозможно включать лампу чаще, чем раз в секунду. Это простое, но эффективное решение, которое также может быть адаптировано к другим стандартам инфракрасных ПДУ, в частности, к тем, которые не имеют бита «четности».
Переменная sygnal отвечает за управление зуммером. Она включается во время программирования и при запуске таймера, благодаря чему мы знаем, что контроллер правильно принял "заказ", и лампа автоматически выключится на указанное время.
Процедура программирования контролируется используя переменную uczenie (обучение).
Эта процедура начинается после подключения контроллера к источнику питания.
Если команда «Switch» уже закодирована в памяти EEPROM, она будет считана через 4 секунды, если пользователь предварительно не перезаписал ее нажатием выбранной кнопки. Если этого заказа нет в памяти, система будет ждать бесконечно.
После программирования команды „Przelacz”(Переключатель) мы имеем
еще 4 секунды для программирования команды „Minutnik” (Таймер обратного отсчета). Если мы откажемся от этой функции, будет запомнена только команда„Przelacz”(Переключатель), и мы сможем управлять лампой одной кнопкой.
Изготовление устройства
На рисунке 3 показана монтажная плата. Печатная плата в формате Sprint-Layout находится в архиве.
Переключатель SW1 можно не ставить, если не надо изменять время таймера.Его можно заменить перемычкой, которая будет полезна при запуске драйвера. Конечно,если появится необходимость менять время, один или два переключателя могут быть выведены наружу.
Надо помнить, чтобы это были выключатели, рассчитанные на 230В. Здесь используется бестрансформаторный источник питания и надо помнить,что в случае повреждения источника питания опасное напряжение может быть и на этих переключателях.
Микроконтроллер работает с внутренними тактовыми импульсами 1,2 МГц, и нет необходимости менять фьюзы или подключать резонатор.Конденсатор С1 должен быть полипропиленовым (МКП или КФПМ) с номинальным напряжением 400В или конденсатор полиэстер (MKT или MKSE) с напряжением 630В.
В качестве зуммера B1 мы можем использовать зуммер на 6 В или даже более высокого напряжения. Если мембрана будет защищены защитной наклейкой, мы не сможем ее удалить, благодаря чему уменьшим громкость звука. Если только после всего звук был слишком громким, мы можем попробовать включить резистор с экспериментально выбранным сопротивлением.
После проверки монтажа установите SW1 в положение, обеспечивающее самое короткое пятисекундное время таймера, то есть оба переключателя разомкнуты. Теперь подключите устройство в сеть. На клавиатуре дистанционного управления нажмите кнопку, выбранную нами в качестве команды «Переключить». Контроллер подтвердит прием одним звуковым сигналом. Если мы используем таймер, нажмите кнопку, которая будет действовать как «Таймер». Контроллер снова подтвердит получение одним сигналом или дважды позвонит, если в течение 4 секунд мы не выберем вторую команду.
Теперь, нажав кнопку «Переключить», вы должны поочередно включить и выключить лампу.Если мы нажмем кнопку «Таймер» при включенном освещении, мы услышим сигнал, и через 5 секунд индикатор погаснет. Мы можем отключить устройство из сети и установить желаемое время таймера. После повторного подключения к источнику питания и через несколько секунд контроллер считывает заранее фиксированные команды из памяти EEPROM и просигнализирует тройным сигналом.
Материал взят из журнала Elektronika dla Wszystkich за 2010.01