Предлагаемый ПДУ формирует команды в соответствии с распространенным протоколом RC-5, на прием которых рассчитаны многие устройства бытовой электроники. Особенность его в том, что соответствие между нажимаемыми кнопками и подаваемыми ИК командами можно установить или изменить по собственному желанию, приспособив таким образом пульт для управления любым устройством. Более того, можно задать три разных "раскладки" клавиатуры, переключая их по необходимости. Имеется возможность задать и такую "раскладку", при которой нажатия на разные кнопки ПДУ будут адресованы разным устройствам.
В конструкции использован МК ATtiny28, специально предназначенный для работы в ПДУ В отличие от других, в нем предусмотрен запрос прерывания установкой низкого логического уровня на любом из входов одного из портов. Это позволяет без дополнительных аппаратных затрат "разбудить" МК, находящийся в "спящем" режиме, нажатием на любую кнопку пульта. Сделать это, используя МК большинства других типов, значительно сложнее. Кроме того, в ATtiny28 имеется встроенный модулятор импульсов, что также упрощает схему ПДУ.
Рисунок 1
Схема ПДУ показана на рис. 1. Указанный на ней вариант микросхемы МК (ATtiny28V-1AC) в миниатюрном корпусе TQFP-32 выбран по той причине, что способен работать при напряжении питания, пониженном до 1,8 В. Можно использовать и микросхему в корпусе PDIP-28 (индекс Р вместо А в обозначении), учтя иную нумерацию выводов (табл. 1). Если же в ПДУ будет установлена микросхема с индексом L вместо V, он сможет работать при напряжении не менее 2,7 В. Максимальное напряжение в обоих случаях — 5,5 В.
Вывод | Назначение в корпусе | |
TQFP-32 | PDIP-28 | |
1 | PD3 | RESET |
2 | PD4 | PD0 |
3 | Не подключен | PD1 |
4 | VCC | PD2 |
5 | GND | PD3 |
6 | Не подключен | PD4 |
7 | XTAL1 | VCC |
8 | XTAL2 | GND |
9 | PD5 | XTAL1 |
10 | PD6 | XTAL2 |
11 | PD7 | PD5 |
12 | PB0 | PD6 |
13 | PB1 | PD7 |
14 | PB2 | PB0 |
15 | PB3 | PB1 |
16 | PB4 | PB2 |
17 | PB5 | PB3 |
18 | VCC | PB4 |
19 | Не подключен | PB5 |
20 | Не подключен | VCC |
21 | GND | Не подключен |
22 | Не подключен | GND |
23 | PB6 | PB6 |
24 | PB7 | PB7 |
25 | PA2 | PA2 |
26 | PA3 | PA3 |
27 | PA1 | PA1 |
28 | PA0 | PA0 |
29 | RESET | Отсутствует |
30 | PD0 | Отсутствует |
31 | PD1 | Отсутствует |
32 | PD2 | Отсутствует |
Вывод начальной установки МК для большей помехоустойчивости соединен через резистор R1 с плюсом источника питания (батареи GB1), хотя аналогичный резистор имеется и внутри микросхемы. Частоту керамического резонатора ZQ1 (455 кГц) изменять нельзя, так как все реализованные программно длительности импульсов и периоды их повторения будут иметь правильные значения только при такой тактовой частоте. Конденсаторы, обычно устанавливаемые между выводами резонатора и общим проводом, в данном случае не нужны — в МК имеются внутренние.
В промежутках между нажатиями на кнопки программа переводит МК в "спящий" режим с минимальным энергопотреблением. При этом на выводах PD2—PD7 (выходах) установлены низкие логические уровни, а на выводах РВ2—РВ7 (входах) — высокие, благодаря внутренним резисторам, соединяющим их с плюсом питания. При нажатии на любую из кнопок SB 1 —SB36 уровень на соответствующем входе становится низким, что "будит" МК, заставляя его продолжить выполнение программы.
Прежде всего, она определяет, какая кнопка нажата, затем формирует на выходе РА2 МК кодовую последовательность соответствующей команды. Если кнопка не отпущена, через 114 мс программа повторит команду, в противном случае МК "заснет" до следующего нажатия на какую-либо кнопку.
Узел на транзисторе VT1 и излучающем диоде VD1 преобразует сигнал с выхода РА2 в ИК излучение. Конденсатор СЗ форсирует перепады напряжения, подаваемого на базу транзистора VT1, ускоряя его открывание и закрывание. Резистор R6 ограничивает амплитуду импульсов тока через излучающий диод до 0,15 А. При необходимости увеличить дальность действия ПДУ можно увеличить их амплитуду до 0,5 А, если примененный ИК диод такое допускает. Для этого достаточно установить резистор R6 меньшего номинала. Необходимо также заменить конденсатор С4 другим, большей емкости.
Светодиод HL1 вспыхивает на время передачи команды, а также при переключении раскладок команд по кнопкам. Цвет его свечения (красный, желтый или зеленый) указывает какая "раскладка" включена. Ограничительные резисторы R3 и R4 подобраны такими, чтобы субъективно яркость свечения "красного" и "зеленого" кристаллов светодиода была одинаковой.
Батарея питания GB1 — два соединенных последовательно гальванических элемента типоразмера АА. Так как большую часть времени МК "спит", потребляя очень маленький ток, выключатель питания не предусмотрен. Блокировочные конденсаторы С1 и С2 должны быть смонтированы как можно ближе к выводам питания и общего провода МК, а конденсатор С4 — к транзистору VT1 и излучающему диоду VD1.
Коды программы, которую необходимо занести во FLASH-память МК можно скачать в нашем архиве. Она разработана на базе программы [1], в которую внесены существенные изменения, коснувшиеся в основном порядка опроса состояния кнопок и их числа. Кроме того, таблица команд перенесена из начала занимаемого программой блока памяти в его конец. Теперь она состоит из трех (по числу "раскладок") отдельных таблиц, а из кодов команд удалены стартовые разряды, подпрограмма передачи команд формирует их автоматически. Предусмотрено переключение "раскладок" нажатиями на одну из кнопок, а также блокировка неиспользуемых кнопок (в оригинале при нажатии на такую кнопку передавался "мусор")
Начальный адрес строки |
Код (позиционное обозначение) нажатой кнопки при низком уровне на входе |
И низком уровне на выходе |
|||||||
| | | | PB2 | PB3 | PB4 | PB5 | PB6 | PB7 | ||
6C0 | 00 |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
--------- |
6C8 |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
FF (нет) |
--------- |
6D0 |
FF (нет) |
FF (нет) |
23 (SB36) |
1D (SB30) |
17 (SB24) |
11 (SB18) |
0B (SB12) |
05 (SB6) |
PD2 |
6D8 |
FF (нет) |
FF (нет) |
20 (SB33) |
1A (SB27) |
14 (SB21) |
0E (SB15) |
08 (SB9) |
02 (SB3) |
PD3 |
6E0 |
FF (нет) |
FF (нет) |
22 (SB35) |
1C (SB29) |
16 (SB23) |
10 (SB17) |
0A (SB11) |
04 (SB5) |
PD4 |
6E8 |
FF (нет) |
FF (нет) |
1F (SB32) |
19 (SB26) |
13 (SB20) |
0D (SB14) |
07 (SB8) |
01 (SB2) |
PD5 |
6F0 |
FF (нет) |
FF (нет) |
21 (SB34) |
1B (SB28) |
15 (SB22) |
0F (SB16) |
09 (SB10) |
03 (SB4) |
PD6 |
6F8 |
FF (нет) |
FF (нет) |
1E (SB31) |
18 (SB25) |
12 (SB19) |
0C (SB13) |
06 (SB7) |
00 (SB1) |
PD7 |
Таблица №3
Обнаружив, что кнопка нажата, программа определяет ее условный код К по таблице, занимающей в памяти МК область 6С0Н—6FFH. Ее организацию иллюстрирует табл. 3, адреса и коды в которой — шестнадцатиричные. Например, при нажатой кнопке SB21 программа определит, что низкий логический уровень присутствует на входе РВ4, если он установлен на выходе PD3 (именно они соединены замкнутыми контактами кнопки), и выдаст для дальнейшей обработки код 14Н (20 дес).
Обратите внимание, что значения кодов кнопок в таблице на единицу меньше их позиционных номеров на схеме. Но это вовсе не обязательно, каждой кнопке по желанию программиста может быть присвоен любой код в интервале 0—23Н (0—35 дес). Это удобно, если для изготовления ПДУ применяется готовая кнопочная панель, в которой кнопки соединены не так, как показано на рис. 1 (это соединение использовано в ПДУ от телевизоpa "Горизонт"). Если какая-либо кнопка отсутствует или ее требуется заблокировать, в соответствующей ячейке памяти можно записать код 0FFH. Обнаружив его, программа проигнорирует нажатие и не станет формировать команду. Нулевой код в начальной ячейке таблицы необходим для правильной работы программы и не соответствует никакой кнопке.
Определив код нажатой кнопки К, программа вычисляет адрес соответствующей ей двухбайтной группы ячеек в таблице "раскладки" команд по кнопкам, пользуясь для этого формулой
А1 = Анач + 2К,
где Анач — начальный адрес таблицы "раскладки"; А1 — адрес первого байта группы, адрес второго байта на единицу больше. В первом байте записан код системы (устройства, которому адресована команда), во втором — код собственно команды. Принятые в протоколе RC-5 коды систем и команд приведены соответственно в табл. 4 и табл. 5. Это — сборные таблицы, составленные по данным из различной литературы, Интернета и исходя из собственного опыта. К сожалению, разработчик протокола RC-5 (фирма Philips) предпочитает не публиковать подобную информацию. Подробнее с протоколом RC-5 можно ознакомиться, например, в [2].
Код (HEX) | Система |
0 | Телевизор 1 |
1 | Телевизор 2 |
2 | Телетекст |
3 | Видеоданные |
4 | Видеопроигрыватель (VLP) |
5 | Кассетный видеомагнитофон 1 |
6 | Кассетный видеомагнитофон 2 |
8 | Спутниковый видеотюнер 1 |
9 |
Видеокамера, в том числе для видеонаблюдения |
0A | Спутниковый видеотюнер 2 |
0C |
Проигрыватель VIDEO-CD |
0D |
Видеокамера с записывающим устройством |
10 | Усилитель ЗЧ 1 |
11 | tv-тюнер для ноутбуков |
12 | Магнитофон |
13 | Усилитель ЗЧ 2 |
14 | Проигрыватель AUDIO-CD |
15 | Проигрыватель (LP) |
17 | Цифровой магнитофон |
1D | Освещение 1 |
1E | Освещение 2 |
1F | Телефон |
Таблица №4
Пример таблицы "раскладки" с начальным адресом 7В0Н показан в табл. 6 (адреса и коды — шестнадцатиричные). Именно она действует по умолчанию после включения питания ПДУ. Для большинства кнопок указан код системы 14 — проигрывателя аудио-CD, неиспользуемые кнопки отмечены кодом системы 0FFH, а кнопка с условным кодом 21Н (SB34 согласно табл. 3) — кодом системы 0AAH. Последнее означает, что нажатиями на эту кнопку переключают "раскладки". Коды команд в этих случаях не требуются, соответствующие им байты могут иметь произвольные значения.
Всего в программе предусмотрены три разные таблицы "раскладок": для управления проигрывателем аудио-CD (начальный адрес 7В0Н, цвет свечения светодиода HL1 — зеленый), для управления телевизором (начальный адрес 760Н, цвет — красный) и для управления кассетным видеомагнитофоном (начальный адрес 71 ОН, цвет — желтый). Нужно сказать, что в любой "раскладке" разные кнопки могут быть запрограммированы на управление разными системами. Для этого достаточно занести в соответствующие байты необходимые коды систем. Но для перехода от одной таблицы к другой (по кольцу) во всех трех случаях должна быть отведена одна и та же кнопка. Это — обязательное условие, иначе программа нормально работать не будет.
Таблицы можно откорректировать, загрузив коды программы (см. табл. 2) в какую-либо программу управления программатором. Она может быть и не рассчитанной на работу с МК ATtiny28, достаточно указать любой с объемом FLASH-памяти не менее 2 КБайт. Годится, например, программа PonyProg.
Изменяя коды в таблицах, исполняемую программу МК, хранящуюся в области 0—162Н, трогать нельзя. Отредактированный образ FLASH-памяти МК записывают в НЕХ-файл, который в дальнейшем используют для программирования микросхемы. Владеющим простейшими приемами работы с ассемблером будет удобнее внести изменения в исходный текст программы, а затем повторить ее трансляцию.
Для загрузки в память МК ATtiny28 программных кодов обычные "последовательные" программаторы (AVRISP, STK200, STK300), к сожалению, не подходят. Необходим "параллельный", например, описанный в [3]. EEPROM в данном МК отсутствует, а в конфигурационный байт следует занести значение 0BH или 0CH, если используются кнопки с продолжительным дребезгом, либо 0DH или 0EH, если кнопки хорошего качества.
Адрес | Система | Команда | Адрес | Система | Команда |
7B0 | 14 | 0C | 7D8 | 14 | 10 |
7B2 | FF | 00 | 7DA | FF | 00 |
7B4 | 14 | 2D | 7DC | 14 | 21 |
7B6 | 14 | 01 | 7DE | FF | 00 |
7B8 | 14 | 02 | 7E0 | 14 | 33 |
7BA | 14 | 03 | 7E2 | FF | 00 |
7BC | 14 | 04 | 7E4 | 14 | 32 |
7BE | 14 | 05 | 7E6 | 14 | 30 |
7C0 | 14 | 06 | 7E8 | 14 | 36 |
7C2 | 14 | 07 | 7EA | 14 | 35 |
7C4 | 14 | 08 | 7EC | 14 | 0F |
7C6 | 14 | 09 | 7EE | FF | 00 |
7C8 | 14 | 00 | 7F0 | 14 | 0B |
7CA | FF | 00 | 7F2 | AA | 00 |
7CC | 14 | 0A | 7F4 | FF | 00 |
7CE | FF | 00 | 7F6 | FF | 00 |
7D0 | 14 | 20 | 7F8 | FF | FF |
7D2 | FF | 00 | 7FA | FF | FF |
7D4 | 14 | 11 | 7FC | FF | FF |
7D6 | 14 | 35 | 7FE | FF | FF |
Таблица №6
ПДУ собран в корпусе аналогичного пульта для телевизора "Горизонт". Декоративная накладка распечатана на принтере, ламинирована с двух сторон и приклеена к верхней панели корпуса клеем "Момент". Упругость накладки позволяет нажимать на кнопки сквозь нее.
Безошибочно собранный ПДУ начинает работать сразу же после установки элементов питания. Но иногда, обычно после замены элементов, этого не происходит. Дело в том, что за короткое время замены оксидные конденсаторы С1, С4 не успевают в достаточной мере разрядиться, в результате чего не формируется сигнал установки МК в исходное состояние. Применять для гарантированного формирования этого сигнала какие-либо дополнительные цепи я считаю нецелесообразным — это может ухудшить экономичность прибора. Достаточно после извлечения отработавших свое гальванических элементов кратковременно замкнуть пинцетом контакты, к которым они были подключены. Этого достаточно для разрядки конденсаторов. Теперь можно устанавливать свежие элементы.
ЛИТЕРАТУРА
1. AVR415: RC5 IR Remote Control Transmitter. http://www.atmel.com/dyn/resources/prod_documents/doc2534.pdf
2. Ридико Л. Применение кода RC-5.
3. Лузянин В. Простой "параллельный" программатор для AVR. — Радио, 2007, № 4, с. 27-30.
Источник: Радио№10, 2007 г., автор В. Лузянин, г. Кирово-Чепецк, Кировской обл.
Архив для статьи "Универсальный переключаемый пульт ДУ с протоколом RC-5" | |
Описание: | |
Размер файла: 8.31 KB Количество загрузок: 1 964 | Скачать |
Комментарии