Брелок 433 своими руками

Обучаемый 433МГц пультик для клонирования статичного кода.


Эта статья является небольшим логическим продолжением статьи «Кодграббер статичного кода».
На пробу были приобретены «обучаемые брелки для копирования», чтобы посмотреть как это сделано.
Стоимость примерно 120 и 140 рублей за штуку.
Заявлено, что эти брелки позволяют записать посылку из существующего устройства и воспроизвести по нажатию кнопки. Ограничены протоколом посылок SC2262 и подобных.
Далее мы посмотрим что у них там внутри и попробуем настроить под себя.

Первым сюрпризом было то, что в одном из брелков используется элемент А27, который тоньше А23. Пришлось дозаказывать ещё и батарейки.

Пробуем обучить.
Перед обучением стираем все запомненные ранее коды, для этого одновременно нажимаем две верхние кнопки и удерживаем какое-то время.
Светодиод загорится, потом заморгает.

Для обучения нажимаем и удерживаем обучаемую кнопку. Вплотную подносим копируемого и включаем на передачу.
Светодиод заморгает, значит сигнал пойман и записан.
После этого обученная кнопка при нажатии и удержании будет выдавать в эфир запомненный код.
Перезаписать отдельную кнопку нельзя. Сначала стираем всё, затем программируем каждую кнопку.

Всё работает как и описано, но возникают трудности с копированием слабых сигналов.
Чувствительность приёмника в копировщике «никакая», подносить приходится антенна к антенне.
К тому же, хочется записывать коды просто «из головы», не копировать, а самостоятельно составлять и воспроизводить.


Немного реверс-инжиниринга.
Внутри пультика видим различную мелкую рассыпуху, четырнадцатиногую микросхему без маркировки и EEPROM с I2C интерфейсом AT24C02.
Вполне очевидно, что все данные хранятся внутри внешней EEPROM, осталось только понять что и как там хранится.
Впоследствии оказалось, что при внешней схожести микросхем основного контроллера в брелках, они всё-таки разные. Используют разные адреса, по разному запоминают данные.

Начнём с брелка с антеннкой.
Подключаем логический анализатор «USBEE» к пинам SDA и SCL микросхемы EEPROM.
Стираем, обучаем, воспроизводим и при этом смотрим, какие адреса и данные EEPROM используются.

В процессе выяснилась непонятная особенность работы логического анализатора.
Это недорогая китайская поделка на CY7C68013, которая может притворяться и USBEE и Logic-U.
Оказалось Logic-U почему-то не распознаёт часть посылки.
На картинках видно, что не рашифровывается считываемый байт.

Logic-U

USBEE

Разбираться я не стал, воспользовался USBEE софтом, хотя Logic-U удобнее.

После некоторых экспериментов с клонированием различных пультиков получаем:
базовый адрес в EEPROM для каждой кнопки:
Верхняя правая: 0x06
Нижняя правая: 0x10
Верхняя левая: 0x1A
Нижняя левая: 0x24

данные для каждой из четырёх кнопок
base_addr+0x00 — признак что кнопка запрограммирована (0 — запрограммирована)
base_addr+0x01 — записывается 0, при чтении не используется
base_addr+0x02 — тайминг 1t, ориентировочно 340 ед/мс (для расчёта значения необходимо время 1t в мс умножить на 340)
base_addr+0x03 — младшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x04 — средние 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x05 — старшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x06 — записывается 0, чтается при воспроизведении
base_addr+0x07 — записывается 0x18, может быть количество байт в посылке
base_addr+0x08 — тайминг 1t, дублируется base_addr+0x02

Формируем свою посылку.
Теперь попробуем заставить брелок воспроизводить любой код в формате SC2262 и подобных.
Например, для управления радиоуправляемой розеткой из статьи на хабре ««Заводим» радиоуправляемые розетки без пульта».

Переключателем розетка может быть настроена на один из восьми каналов.
Запрограммируем наш пультик так, чтобы управлять на четвёртом и пятом каналах.

4 канал, код включения «000100001000»
в формате HS2272
«0» — соответствует «короткий + короткий импульс»
«1» — соответствует «длинный + длинный импульс»
«F» — соответствует «короткий + длинный импульс»

в формате обучаемого брелка каждый импульс кодируется одним битом
0 — короткий импульс
1 — длинный имульс

значит «000100001000» преобразуется в 000000110000000011000000 = 0x0300C0 (в память оно ляжет младшим байтом вперёд).

Аналогично:
4 канал, код выключения «000100000000» преобразуется в 0x030000
5 канал, код включения «011000001000» преобразуется в 0x3С00С0
5 канал, код выключения «011000000000» преобразуется в 0x3С0000

Настройка таймингов.
Вскроем наш приёмник сигналов, и посмотрим какой резистор Rosc установлен у микросхемы HS2272.
По цветовой маркировке получается 390К, тестер показывает 394К.
По графику из pdf пытаемся прикинуть частоту OSC, но в разных pdf по разному рисуют графики зависимости.
Поэтому, напрямую осциллографом смотрим частоту на OSC2 ножке микросхемы.
У меня получилась частота около 70 КГц.
В pdf написано что при приёме в импульс должно помещаться от 2,5 до 8 клоков OSC.
Расчётное значение 1t получается 0,114 мс, но с таким таймингом приёма нет.
На практике получилось, что работает с таймингами 1t = 0,150-0,350 мс. Всё что быстрее или медленнее не принимается.

Читайте также:  Индезит iwb 5083 замена подшипника своими руками

Почему так — не понимаю, если больше поэкспериментировать с разными приёмниками, то может чего и прояснилось бы.

Выберем значение «с потолка» 0,25 мс * 340 = 85 (0x55).

Запрограммируем любым доступным I2C программатором (CH341 например), подключившись к SDA, SCL, GND, VCC ножкам EEPROM.

левая верхняя кнопка — включение канала 4
с адреса 0x1A запишем данные 0x00 0x00 0x55 0xC0 0x00 0x03 0x00 0x18 0x55
левая нижняя кнопка — выключение канала 4
с адреса 0x24 запишем данные 0x00 0x00 0x55 0x00 0x00 0x03 0x00 0x18 0x55
правая верхняя кнопка — включение канала 5
с адреса 0x06 запишем данные 0x00 0x00 0x55 0xC0 0x00 0x3C 0x00 0x18 0x55
правая нижняя кнопка — выключение канала 5
с адреса 0x10 запишем данные 0x00 0x00 0x55 0x00 0x00 0x3C 0x00 0x18 0x55

Перед заливкой данных через программатор, необходимо нажать и удерживать любую кнопку на пультике, иначе линии SDA и SCL притянуты к земле.

Проверяем, работает.
Дополнительно можно защитить от стирания, подняв 7 ножку EEPROM и посадив её на 8 ногу.

Второй брелок, без антенны с А27 батарейкой имеет другую «карту памяти».
Базовый адрес:
Нижняя правая: 0x0A
Нижняя левая: 0x14
Верхняя правая: 0x1E
Верхняя левая: 0x28

Данные:
base_addr+0x00 — признак что кнопка запрограммирована (см. примечание *)
base_addr+0x01 — младшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x02 — средние 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x03 — старшие 8 бит кода (0 — короткий импульс, 1 — длинный имульс)
base_addr+0x04 — тайминг 1t

*примечание — если у предыдущего брелка признак запрограммированности кнопки — значение 0 по соответствующему адресу (остальные значения воспринимаются как «кнопка не запрограммирована»), то здесь для каждой кнопки индивидуальные значения.
При стирании:
по адресу 0x0A пишется значение 0x30,
по адресу 0x14 пишется 0x3A,
по адресу 0x1E пишется 0x44,
по адресу 0x28 пишется 0x4E.
При запоминании:
по адресу 0x0A пишется значение 0x0A,
по адресу 0x14 пишется 0x14,
по адресу 0x1E пишется 0x1E,
по адресу 0x28 пишется 0x28.

Кроме того, при стирании по адресу 0x6E пишется 0x6E, при запоминании любой кнопки туда пишется 0x00.

Дополнительную сложность представляет то, что контроллер после окончания обмена с EEPROM не освобождает линию SCL, и мне не удалось записать EEPROM программатором не выпаивая микросхему.

Тайминги у контроллеров также отличаются. В первом брелке мы записывали 0x55, во втором оно сохраняется как 0x43.

P.S.
Хорошо бы сравнить дальнобойность этих брелков с какими-нибудь другими, необучаемыми.
Да и живучесть батарейки также может отличаться, потребление в режиме сна разное.
Но, мне кажется, что эти параметры будут примерно одинаковые.

Схему срисовывать не стал.
Вот фотографии с двух сторон, все дорожки навиду.

Комментарии ( 13 )

В процессе выяснилась непонятная особенность работы логического анализатора.
Это недорогая китайская поделка на CY7C68013, которая может притворяться и USBEE и Logic-U.
Оказалось Logic-U почему-то не распознаёт часть посылки.

то здесь для каждой кнопки индивидуальные значения.

Любопытно выглядят — на адреса похожи. А по адресам 30/3А/44/4Е какие-то данные есть?

Схему с брелков не снимал? Любопытно взглянуть на реализацию RF-части.

Полный дамп памяти у второго брелка не считывал.
Надо EEPROM выпаивать. Несложно вроде. Но «зачем»?

Схему, опять же, не снимал.
Мне не к чему, в RF я слабо разбираюсь, повторять самостоятельно не планирую.

Мне не к чему, в RF я слабо разбираюсь, повторять самостоятельно не планирую.

Ну, для меня сними, мне интересно

Источник

Радиотракт брелков автомобильных сигнализаций.

В последнее время, меняется парк автомобильных сигнализаций на новые, более совершенные и защищенные от взлома, с диалоговым кодом и расширенным функционалом. Старые, остаются не у дел, но их вполне можно использовать для других нужд. Рассмотрим схемотехнику их радиотракта, которые работают на частоте 433,920 МГц, выделенной для этого в России.

В самых ранних простых моделях, использовалась схема сверхрегенеративного приемника. Несмотря на простоту, у них есть недостатки: небольшая чувствительность, низкая избирательность, паразитное излучение радиосигнала в антенну (без соответствующих схемных решений) и т.п.
Типовая схема такого приемника:

Типовая схема простейшего передатчика для него:

Способность сверхрегенеративного приемника, одновременно излучать и принимать сигнал в подобной схеме, но без предварительного каскада усиления, и переводимого в режим работы автодина, используется на пользу в микроволновых датчиках объемах различных охранных сигнализаций, которые являются дальнейшей эволюцией радиолокационных взрывателей снарядов и бомб периода второй мировой войны:
Схема из патента (не по ГОСТу):

Читайте также:  Всякие хитрости своими руками

Краткое описание работы (секретно):

Стоит продолжать,(военного блога то нет)? А они, наверное, в свою очередь, черпали идею от терменвокса.
Хорошее описание работы такого приемника можно почерпнуть тут:
nenuda.ru/сверхрегенеративные-приемники.html
Про микроволновый датчик объема можно много найти в литературе и интернете. radiokot.ru/circuit/analog/receiv_transmit/27/
Как и про радиолокационный взрыватель, если кому не повезло в жизни учится и служить в соответствующих заведениях: ru.wikipedia.org/wiki/Радиовзрыватель

Потом перешли на более совершенные супергетеродинные приемники, как с одинарным, так и двойным преобразованием частот. Появление радиодеталей в миниатюрных корпусах для поверхностного монтажа, чьи размеры несоизмеримо меньше длинны волны на рабочей частоте, позволяют не заморачиваться таким способом монтажа высокочастотных схем, который приводил в трепет не одно поколение радиолюбителей:

Как правило, схема радиотракта, что в брелке сигнализации, что в модуле самой сигнализации, заметно не отличается. Используется как амплитудная модуляция, так и частотная.

Для примера, так выглядят плата трансивера с амплитудной модуляцией и одним преобразованием частоты:

А так с частотной, и двойным преобразованием частоты:

Так выглядит плата брелка, в котором есть только передатчик:

Другая сторона в заголовке.

Схема радиочастотной части трансивера примерно такая, как на картинке:

В верхней части разрисованы компоненты передатчика и приемника до смесителя, сигнализации с амплитудной модуляцией, или как принято у «них» — манипуляцией (ASK — amplitude shift keying), а на нижней – с частотной модуляцией (FSK — frequency shift keying). Далее в узле, отвечающей за прием, следует, как правило, специализированная микросхема, в типовой схеме её включения. Вариантов много, приведу пару:
Продолжения схемы приемника от верхней части:

Продолжения схемы приемника от нижней части:

Немного о назначении некоторых компонентов: В качестве частотозадающей схемы передатчика и гетеродина приемника, используются ПАВ резонаторы. ПАВ (SAW) резонаторы используют эффект поверхностных акустических волн и в отличие от кварцевых резонаторов, использующих пьезоэлектрический эффект, имеют большую рабочую частоту (диапазон частот от 100МГц до 1.1ГГц), но меньшую стабильность (от 20 до 200кГц (30-250ppm)). SAW резонаторы выпускаются в корпусах для поверхностного монтажа и для монтажа в отверстия. И раз SAW резонаторы и фильтра, имеют больший разброс характеристик по частоте резонанса, полосе пропускания и т.д., чем кварцевые, зачастую требуется корректировка частоты генератора передатчика и гетеродина приемника с помощью переменного конденсатора. Маркировка керамических резонаторов на плате не всегда информативна, на корпусе резонатора передатчика и гетеродина, может быть указана одна частота, а частота резонатора гетеродина отличается от частоты резонатора передатчика на величину промежуточной частоты (10,7МГц, 21,400МГц и т.д.). Их разницу может указывать буква или цифра, к примеру, Т-передатчик, R-приемник. Антенна, в зависимости от режима работы трансивера, с помощью pin-диодов (обведены красным), переключается то на выход передатчика, то на вход приемника. Напомню, Pin – диод, обладает способностью пропускать высокочастотный сигнал сквозь себя (или шунтировать), при наличии небольшого прямого тока через себя. А диод, обведенный зеленым, внизу слева – варикап. Его емкость изменяется в зависимости от обратного напряжения, приложенному к нему. Что позволяет в определенных пределах перестраивать частоту генератора передатчика, построенного на SAW резонаторе. На этот диод подается напряжение модуляции от микроконтроллера. После детектирования, сигнал с микросхемы приемника, подается в микроконтроллер для декодирования.
Схема брелка, без «обратной связи», оснащенного только передатчиком:

Схемы в лучшем качестве приложены в pdf -> zip.

Так выглядят сигналы, подаваемые на варикап, и полученные после детектирование на выходе приемников, на данной картинке, сигнал с приемника инвертирован относительно сигнала модуляции:

Схема подключения современного цифрового трансивера, где почти все на одном кристалле, как правило, не отличается от типовой, рекомендуемой производителем:

Да и плата с ним гораздо компактнее:

Современные автомобильные сигнализации, на цифровых трансиверах, за счет помехоустойчивого кодирования, более совершенного метода модуляции, возможности оперативно менять рабочую частоту, довольно толерантно относятся к помехам, которые создают при работе передатчики старых сигнализаций. Практически их не замечая. Чего, к сожалению, не скажешь не только о старых систем сигнализации, но и некоторых штатных пультах центрального замка с дистанционным управлением современных автомобилей. И вполне может быть, что радио тракт уличного холодильника по продаже напитков имеет более совершенную схему.
Приведу простой пример использования оставшихся не у дел блоков сигнализации. Куда в современном мире, без китайской люстры, с пультом дистанционного управления, работающего на той же частоте 433.920 МГц. В интернете это довольно обширная тема, и не обошла моих знакомых. Дальность действия передатчика в один момент резко упала. Приходилось вставать на табуретку и вплотную подносить пульт, что бы включить или выключить люстру. А затем, и даже в таком режиме люстра работала только несколько минут после подачи на неё напряжения питания. В результате экспериментов, причина такого отказа оказалась в микросхеме управления в люстре, которая стала почему-то греться и отказывать.
Плата в люстре (страшно такую вешать под потолок, особенно если он деревянный):

Читайте также:  Как класть кирпичи своими руками

Да и приемник с передатчиком не внушал доверия, при попытке вместо штатной батарейки подключить внешний блок питания (с тем же напряжением) к пульту управления, сгорел транзистор передатчика, который был успешно заменен на КТ368А.

Но раз делать надо было хорошо, обойтись без каких либо покупных деталей, и заодно поэкспериментировать, решил вместо транзистора поставить передатчик от сигнализации, а в люстру – соответственно приемник (две одинаковые платы, только задействованы разные узлы, не задействованные удалены). Взамен неисправной микросхемы системы управления люстрой, принимать и декодировать радиосигнал, управлять люстрой поручил модулю на STM32. Удаляем с платы неисправные и ненужные компоненты (оставляем только реле и транзисторные ключи):

Устанавливаем блок питания с гальванической развязкой. Делаем соединения с модулем на STM32. Люстра работает по самому простому принципу, каждой кнопке соответствует свой код, который передается без какого либо шифрования и помехоустойчивой избыточности. Так выглядят осциллограммы этих 4 кодов:




Задача распознавания упрощается до примитивизма. Осталось организовать логику работы люстры по нажатиям соответствующих кнопок. Кнопки “A”, ”B”, ”C” – включают и выключают соответствующий ряд светильников. Кнопка ”D”- выключает все. По-моему, с таким примитивным подходом организации управления, даже детские игрушки делать нехорошо, владельца такой люстры легко довести до расстройства. Если же заменить микросхему и в пульте управления, то можно было бы реализовать кодирование с секретным блочным шифром, добавить исправление ошибок при приеме, перемежение бит. Но пока напишу, как был реализован простой вариант управления, так как микросхему, формирующую сигналы управления в пульте не меняли. Начинаем подключать и смотреть осциллограммы.
Проверяем как работает передатчик трансивера, сигнал модуляции на варикап подаем с тестового вывода осциллографа:

И смотрю, есть ли большая разница на выходе приемника с АМ и ЧМ:

Почти одно и тоже, но тогда проще и дешевле использовать приемник с АМ. Подаем сигнал на вход микроконтроллера с выхода приемника, а на другом выводе (с соответствующим кодом), проверим что получается.

Метод кодирования данных в пульте управления прост, это длительность положительного уровня сигнала на одном битовом интервале, при «1» — длительность равна примерно 0,76 миллисекунды, при «0» — 0.25 миллисекунды. Длительность одного битового (бодового) интервала 1 миллисекунда. Количество бит в сообщении — 25. При удержании нажатой кнопки на пульте, сообщения идут с периодичностью примерно 32 миллисекунды.
Основная идея программы для микроконтроллера такая: организуем в программе таймер, который будет периодически опрашивать сигнал от приемника, с частотой, большей, чем поступающие биты данных. К примеру, чтобы на один битовый интервал, могли брать 36 отсчетов таймера.
Стробы (прерывания) таймера на фоне поступающих данных:

Тогда определять, приняли мы «1» или «0» будем по количеству отсчетов, при положительном сигнале на выходе приемника. Если примерно 28 таких отсчетов — то решаем что это «1», а если 11, то это «0». Но и проверяем, что весь битовый интервал уложился в требуемое количество отсчетов таймера. Иначе решаем что это помеха. Все подсчеты начинаем вести по одному из фронтов, в зависимости от типа приемника. Если принимаемый бит, соответствуют требуемым параметрам, кладем его в сдвиговый регистр, сдвигаем влево на один разряд для приема следующего. Считаем количество принятых правильных бит в счетчике (если приняли неправильный — все сбрасываем). Если приняли все 25, то сверяем полученное число в регистре с заданным заранее значением кода кнопки, у меня такие значения были определены:

Процедура определения бит:

Тестовый фронт по окончанию проверки приема правильного бита:

Проверяем на допустимые интервалы бит:

Тестовый фронт завершения принятия всех 25 бит:

И сама логика принятия решения в зависимости от принятой команды с пульта:

Такие переменные были определены заранее:

Проверяем, упаковываем и сдаем заказчику:

Извиняюсь за качество картинок, немного провокационно, чуть лишнего, но это для общего развития. Если что надо поправить или изменить — пишите.

Источник

Оцените статью