|
Курс по ускорению работы Мозга на 100%
Универсальный ключ Ibuttons
| |
| Сб, 02.03.2013, 09:43 | Сообщение # 1
|
LED
Постов: 530
Друзья |
Эмулятор К счастью альтернатива оказалась, в буквальном смысле, под рукой. Маленький эмулятор ключей на базе ATTiny13V-10SSU. Сделан он был в начале лета, эксперимента ради. После пары испытаний, валялся без дела у меня в ящике, как инопланетное оружие в зоне 51. Главное его достоинство заключается в том, что ему не нужно внешнее питание. При работе эмулятор питается от домофона, что избавляет от возни с батарейками. По размеру вся конструкция не больше рублевой монетки. Можно прицепить к связке ключей. На верхней части разместился переключатель для выбора ключа из памяти. Это обычный тройной ДИП-переключатель.
Выбор ключа реализован довольно оригинально. Тут балом правит двоичная система. Три переключателя. Каждый из них может быть в двух состояниях: включен (1) и выключен (0). Всего получается 8 комбинаций — 8 ключей. Если повернуть ключик так, чтобы диод (на фотке не видно) находитля слева, то переключатели будут идти в обычном порядке — «старший >> младший». Да, на первый взгляд это кажется какой-то неоправданно сложной фигней, но на деле, очень быстро запоминается.
В качестве альтернативного управляющего элемента можно заюзать крутилку, подключенную к АЦП. Сделать шкалу с номерами ключей «1 — 8″ и какой-нибудь компактный переменный резистор. Но такая конструкция работает менее надежно. При испытаниях она не могла открыть два из трех домофонов, а ключик с переключателем нормально работал на всех.
Коды в память эмулятора можно запихивать двумя способами. Зашить в EEPROM память ещё на этапе прошивки, или собрать что-то типа док-станции для перенастройки девайса. Дело в том, что кроме того, что прикидываться Ай-батоном, этот эмулятор умеет еще одну штуку. По команде 0×00 он выдает компу всю свою EEPROM память — 64 байта. А по команде 0xFF принимает 64 байта и записывает их себе в EEPROM. Физически это обычный 1-Wire.
То есть, чтобы перезаписать EEPROM память новыми кодами нужно подать ресет, выкинуть на линию команду 0xFF, и скинуть 64 байта новой EEPROM. А для чтения памяти — ресет, 0×00 и прочитать 64 байта. Эти команды прописаны в самом начале кода, и их можно заменить на другие. 0 и FF были взяты просто для теста.
Аппаратная часть эмулятора проста до безобразия: Главная особенность схемы — питание. В этом плане эмулятор полностью повторяет настоящий iButton, питаясь во время работы от линии связи (Dq на схеме). Со стороны домофона нам обеспечена подтяжка в пару килоом (это в лучшем случае) от которой ключ питается. Это предъявляет очень важное требование к устройству — как можно более низкое потребление. При частоте 1.2 МГц и питании примерно 3V (очень примерно, т.к. зависит от мастера — домофона) получается потребление приблизительно 500 мкА.
С другой стороны, при передаче данных, линия прижимается к земле — нужно где-то запасать энергию. Для этого в схеме есть конденсатор C1 и диод D1, который не дает кондеру разряжаться, когда линия прижимается к земле.
На схеме указан диод Шоттки, и не спроста. Если поставить обычный диод, то из-за большого падения напряжения на нем (около 0.6В), напряжение на ножке PB0 будет слишком высоким. По даташиту оно не должно превышать Vcc+0.5V, а с простым диодом будет Vcc+0.6V или больше. Диод Шоттки, кроме маленького падения напряжения (0,1-0,2В) обладает другим полезным свойством — очень быстро закрывается и открывается.
Конденсатор выбирался чисто экспериментально. Пробовал разные варианты от 220nF до 10uF. Надежнее всего устройство работало с кондером в 1uF, его и оставил. При большей ёмкости тоже работало нормально, а вот меньше 1uF начинались глюки.
Алгоритм работы ключика, в переводе с ассемблера, выглядит примерно так: Инициализируем всю периферию. Отключаем, за ненадобностью, компаратор и вешаем подтяжку на те пины, куда подключен переключатель. Тупим 50мс. На всякий случай. За это время конденсатор должен полностью зарядиться, питание стабилизироваться, а подтяжка — подняться. Конечно, значение 50 мс взято с большим запасом. Читаем переключатель и соображаем, с какого адреса нам начинать чтение. В EEPROM хранятся полные коды ключей, т.е. все 8 байт. Читаем нужный код из EEPROM в оперативку. Ждем RESET импульса на линии 1-Wire. Как только ресет подан, отвечаем PRESENSE. После этого ловим с линии код команды, которую нам сообщает домофон. Если это команда 0×00 или 0xFF значит от нас что-то хотят (записать память или прочитать) — переходим к соответсвующим функциям. Если код другой, значит с нами хочет говорить домофон. Домофон настойчиво требует данные. Выдаём ему код из оперативки. Все 64 бита. Переходим к шагу 4. На тот случай, если домофон захочет прочитать ключ ещё раз. Для верности.
После основного алгоритма идут процедуры чтения и записи EEPROM. Там всё просто: при чтении сначала извлекается байт из EEPROM, потом эмулятор даёт его прочитать. А при записи принимается байт и записывается в EEPROM. И так, пока не будет записана/прочитана вся оперативка (64 байта).
|
|
| Сб, 02.03.2013, 17:15 | Сообщение # 2
|
SssaHeKkk
Постов: 2291
Друзья |
это что за фигня...домофонный ключ что ли?
|
|
| Сб, 02.03.2013, 17:30 | Сообщение # 3
|
MAXIMUS
Постов: 1378
Х |
SssaHeKkk, ага
|
|
| Сб, 02.03.2013, 18:24 | Сообщение # 4
|
SssaHeKkk
Постов: 2291
Друзья |
ну и как коды с домофонных ключей сдирать?
|
|
| Сб, 02.03.2013, 18:50 | Сообщение # 5
|
LED
Постов: 530
Друзья |
SssaHeKkk, чесно, хз)) а так ключ харош)))
|
|
| Сб, 02.03.2013, 21:11 | Сообщение # 6
|
skateman
Постов: 2201
Друзья |
Цитата (SssaHeKkk) ну и как коды с домофонных ключей сдирать? дак отдельный девайс нужен
|
|
| Сб, 02.03.2013, 21:22 | Сообщение # 7
|
SssaHeKkk
Постов: 2291
Друзья |
вообщем это хрень...
|
|
| Сб, 02.03.2013, 21:24 | Сообщение # 8
|
skateman
Постов: 2201
Друзья |
SssaHeKkk, просто LED немного не доглядел, на том сайте, откуда он стянул описание, есть подобные конструкции, которые и ключи считывать умеют
|
|
| Сб, 02.03.2013, 21:41 | Сообщение # 9
|
SssaHeKkk
Постов: 2291
Друзья |
skateman, а че там используется в качестве железяки той
|
|
| Сб, 02.03.2013, 21:45 | Сообщение # 10
|
skateman
Постов: 2201
Друзья |
SssaHeKkk, примерно все тоже самое
|
|
Внимание! Форум переехал на Tehnodium.ru
|
|