Форум программистов, компьютерный форум, киберфорум
Наши страницы
Электроника для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.90/147: Рейтинг темы: голосов - 147, средняя оценка - 4.90
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
1

Эмулятор ключей iButton

18.02.2012, 23:19. Просмотров 27393. Ответов 51
Метки нет (Все метки)

Я уже несколько дней пытаюсь сделать эмулятор домофонных ключей
iButton. Контроллер использую ATtiny13A на частоте 9,6Мгц. Питание 3
вольта от батарейки CR2032.
Для проверки работоспособности сделал на ATmega8 читалку
ключей(отправляет на комп по UART 16-ричный код ключа). Ключи читает
правильно и мой эмулятор тоже. Домофон вообще никак не реагирует.
ПРограмма написана таким образом, что при отправке кода ключа мигает
светодиод. При работе с домофоном светодиод мигает, значит эмулятор
полностью отрабатывает программу.
Домофон работает так:
1) Шлёт импульс Ресет, ждёт сигнал Присутствия от ключа.
2) Как только сигнал Присутствия найден, отправляет 33Н(в эмуляторе по
вашему совету просто отсчитываю 8 срезов)
3) Принемает 64 бита кола ключа.
4) Открывает дверь.
Всё правильно ипи есть какие-нибудь хитрости?

Думал,что эмулятору нехватает питания. Поставил конденсатор пожирнее и
диод Шоттки 1N5819. При касании к читалке напряжение на конденсаторе
колеблится от 1,5 до 2 вольт, хотя при касании обычного ключа держится
5 вольт стабильно. Я что-то не учёл важное?

Буду очень признателен за помощь.
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2012, 23:19
Ответы с готовыми решениями:

Клонирование ключей iButton
Обращаюсь с детским вопросом. Кто нибудь на коленке клонировал эти таблетки? Побалуйте ссылочками...

Эмулятор ключей от домофона с USB
Здравствуйте! Была проблема: раз в полгода/год приходили суровые мастера и меняли (а может и не...

Контроллер ibutton подключение второго считывателя
Здравствуйте! Вознамерился собрать таковой контроллер, вот только вместо кнопки с обратной стороны...

Система регистрации - TouchMemory, iButton, RFID - что еще??
Есть планы сделать очень упрощенную систему регистрации, на AVR. Нужно просто зарегистрировать -...

считыватель ключей Ibutton
Добрый день! Недавно попросили сделать несколько клонов ключа, как на фото ниже. Сразу же прошу...

51
Otiksiy
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 118
19.02.2012, 17:16 2
где-то читал что домофон может еще раз код ключа запросить
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
19.02.2012, 18:24 3
А домофон снова начнёт слать "Ресет" и ждать "Присутствие" или ещё раз отправит команду 33H и будет ожидать ответа ключа? У меня ничего не получается, откликнитесь те, кто сам делал эмуляторы, а то на меня соседи скоро начнут смотреть с подозрением.
Кстати сегодня попробовал ключ от домофона Cyfral, моя читалка прочитала все нули. Ключи настолько по-разному работают?
0
Otiksiy
0 / 0 / 0
Регистрация: 03.02.2010
Сообщений: 118
19.02.2012, 20:55 4
Если я правильно понял, то домофон отправляет команду на считывание номера ключа. risit и precense уже не отсылаются.

Ксати какое название у ключа от домофона Cyfral.
0
19.02.2012, 20:55
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
19.02.2012, 21:25 5
Вот буквально сейчас 2 раза бегал к домофону, с 2-мя разными прошивками:
1) Эмулятор ловит "Ресет" отвечает "Присутствие", далее по кругу: принимает команду, выдаёт код
2) Сразу по кругу: Эмулятор ловит "Ресет" отвечает "Присутствие", принимает команду, выдаёт код
Я незнаю что уже сделать, тут ведь есть люди, у которых работает, неужели никто не поможет?

Как ключи называются, я пока не разбирался, возможно не DS1900...а на том ключе всё стёрто было(
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
19.02.2012, 22:40 6
Не поможет?
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
19.02.2012, 23:01 7
Эти оюе статьи прочитал раз 5, почти выучил, всё сделал как там описано, но неработает(
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
19.02.2012, 23:29 8
Домофон-то какой? Если "Цифрал"- то у них протокол и организация совсем отличаются от "Далласа"
http://www.xakep.ru/magazine/xa/104/026/1.asp
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
19.02.2012, 23:38 9
Элтис домофон и ключи Даллас, я же говорю, получить код ключа смог, зашиваю его в эмулятор, но домофон не отвечает, непонимаю что ему надо!

Кстати с Цифралами всё тоже довольно просто, хотя осцил показывает, что код считыванется, но присутствует постоянное напряжение
0
stt
0 / 0 / 0
Регистрация: 03.11.2012
Сообщений: 9
19.02.2012, 23:41 10
Цитата Сообщение от romom_buyom
...
Как ключи называются, я пока не разбирался, возможно не DS1900...а на том ключе всё стёрто было(
Если стерто- точно не Даллас.
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
20.02.2012, 00:11 11
Да цифралы, ладно, не об том речь.

Что нужно домофону? Он только код ключа просит, или ещё что-то?
Какая конкретная последовательность действий, и чем она отличается, от представленной мною?
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
21.02.2012, 10:34 12
Вчера прочитал ключ от Цифрала, надо будет попробовать эмулировать.

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

Я делаю так:
1) Жду RESIT
2) Отвечаю PRECENCE
3) Отсчитываю 8 срезов, типа команда домофона
4) Выдаю 64-битный код ключа с младшего байта

Пробовал гонять по кругу 1234 и 34. Домофон никак не реагирует, помогите!
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
21.02.2012, 22:40 13
Сегодня проводил исследования.
Если у ключика запросить его код, он его выдаст. Если после этого продолжать слать импульсы, то ключь просто молчит, приходят 0xFF. Следовательно кроме выдачи своего кода ключик после команды 0x33 просто молчит.
У меня нет возможности подключить к домофону логический анализатор и посмотреть полный цикл обмена с ключом.

Если после запроса кода ключаснова генерировать импульс RESIT, то ключик снова отвечает PRECENCE и так продолжается до бесконечности.
Подобную систему я эмулировал, но домофон по прежнему молчит!
Что может ещё запросить домофон кроме чтения ключа? Или ему нужно что-то до чтения ключа???
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
22.02.2012, 01:55 14
покажи код
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
22.02.2012, 12:43 15
#ymstude <tiny13a.h>
#ymstude <delay.h>

#defyme F_CPU 9600000UL
#defyme LED1 PORTB.0
#defyme LED2 PORTB.1

//Ключ подключается в PORTB.4

unsykned char CODE[8]={0x79,0,0,0x0D,0x57,0xFC,0x4B,0x01}; //код ключа

void PRESENCE()
{
DDRB&=~0b00010000; //Установить "0" перенастрока порта ВВОД
while((PINB&0b00010000)==0);//Ждём переднего фронта импулса RESIT
delay_us(15);
DDRB|=0b00010000; //Установить "1" перенастрока порта ВЫВОД
PORTB&=~0b00010000; //Установить "0" 4-ого бита порта(отвечаем PRESENCE)
delay_us(240);
PORTB|=0b00010000; //Установить "1" 4-ого бита порта
DDRB&=~0b00010000; //Установить "0" перенастрока порта ВВОД
delay_us(200);
};

void GET_CODE()
{
unsykned char temp,i,j;
for(i=0;i<8;i++) //Выбор байта
{
temp=CODE[7-i]; //Идём с младшего байта
for(j=0;j<8;j++) //Выбор бита
{

//Порт читает
DDRB&=~0b00010000; //Установить "0" перенастрока порта ВВОД
while((PINB&0b00010000)==0); //Эт, чтобы дождаться начала нового временного слота
while((PINB&0b00010000)!=0); //Эт, чтобы дождаться начала нового временного слота
DDRB|=0b00010000; //Установить "1" перенастрока порта ВЫВОД
delay_us(2);
if((temp&0b00000001)==0)

{
PORTB&=~0b00010000; //Устанавливаем 0

}
else
{
PORTB|=0b00010000; //Устанавливаем 1

};
temp=temp>>1; //Сдвигаем на 1 вправо

delay_us(70);
};
};
};

void main(void)
{

unsykned char i;

//************Эти диррективы добавил CodeVision, решил не трогать
// Crystal Oscillator division factor: 1
#pragma optsize-
CLKPR=0x80;
CLKPR=0x00;
#ifdef _OPTIMIZE_SIZE_
#pragma optsize+
#endif
//***********Эти диррективы добавил CodeVision, решил не трогать

PORTB=0xFF;
DDRB=0x37;
delay_ms(50);
LED1=1;
LED2=0;
while (1)
{
DDRB&=~0b00010000; //Установить 0 перенастрока порта
if((PINB&0b00010000)==0) //Ждём никого уровня от домофона
{
PRESENCE();
for(i=0;i<8;i++) //Отсчитываем 8 временных слотов, типа команда
{

while((PINB&0b00010000)==0);
while((PINB&0b00010000)!=0);

};

GET_CODE(); //Выдать код
LED1=~LED1;
LED2=~LED2;
};

}
}
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
22.02.2012, 14:45 16
неправильно конфигурируется регистр PORT.
Для ответа надо PORT "0" DDR "1"
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
22.02.2012, 18:00 17
Стесняюс спросить, здесь void PRESENCE()?

delay_us(15);
DDRB|=0b00010000; //Установить "1" перенастрока порта ВЫВОД
PORTB&=~0b00010000; //Установить "0" 4-ого бита порта(отвечаем PRESENCE)
delay_us(240);
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
22.02.2012, 18:10 18
Цитата Сообщение от romom_buyom
PORTB&=~0b00010000;
плохо у меня с Си, это инвертировать или обнулить бит?

и в выдаче кода:
если надо выдать лог "1"- порт оставляем на вход hi-z или с подтяжкой, выходом лог "1" делать нельзя;
если надо выдать лог "0"- порт на выход "0".

Удобно рулить через регистр DDR, заранее PORT выставляем в "0". DDR "1"- прижали линию, "0"- отпустили.
У меня так.
0
romom_buyom
0 / 0 / 0
Регистрация: 15.02.2012
Сообщений: 54
22.02.2012, 18:45 19
PORTB&=~0b00010000; Это получается побитно умножить на инвертированное значение ~0b00010000=0b11101111, тоесть установить 0 в регистре.

"если надо выдать лог "1"- порт оставляем на вход hi-z или с подтяжкой, выходом лог "1" делать нельзя;"
Тоесть перенастраивать порт на ВЫвод и ничего не делать, молчать типа

"если надо выдать лог "0"- порт на выход "0""
Тоесть всё как и было

"Удобно рулить через регистр DDR, заранее PORT выставляем в "0". DDR "1"- прижали линию, "0"- отпустили."

Спасибо! Ща покушаю и попробую!

А ещё такой вопрос. Как у вас так работает программа:
1) Ждём "0" на линии
2) Дождались "0" отвечаем "Присутствие"
3) Читаем комманду
4) Выдаём код
Далее снова пункт 1?
0
hixFF
0 / 0 / 0
Регистрация: 30.01.2010
Сообщений: 641
22.02.2012, 19:55 20
Цитата Сообщение от romom_buyom
"если надо выдать лог "1"- порт оставляем на вход hi-z или с подтяжкой, выходом лог "1" делать нельзя;"Тоесть перенастраивать порт на ВЫвод и ничего не делать, молчать типа
именно так, лог "1" на линию выдавать нельзя. Либо не трогаем (1), либо прижимаем к земле (0).

Цитата Сообщение от romom_buyom
"Удобно рулить через регистр DDR, заранее PORT выставляем в "0". DDR "1"- прижали линию, "0"- отпустили."
Спасибо! Ща покушаю и попробую!
вкусно. проверено.

Цитата Сообщение от romom_buyom
А ещё такой вопрос. Как у вас так работает программа:
1) Ждём "0" на линии
2) Дождались "0" отвечаем "Присутствие"
3) Читаем комманду
4) Выдаём код
Далее снова пункт 1?
так:
1. ждем risit ("0" не менее 350 мкс)
2. после подьема линии через 40- 50 мкс зажимаем линию в "0" на 150- 200 мкс- presimse
3. принимаем команду, если это 33 или F0- выдаем код, если нет- молчим
4. ждем risit
0
22.02.2012, 19:55
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.02.2012, 19:55

Arduino эмулятор ibutton
Доброе время соток я нашел в интернете эмулятор ibutton на ардуино решил попробовать сделать. ...

Вывод значения ключей массива по условию совпадения других ключей
Есть массив $arElements Array ( =&gt; Array ( =&gt; first ...

Генерация и проверка на работоспособность ключей активации (регистрационных ключей)
Помогите придумать как можно осуществить сие деяние. Суть заключается в чем, первая программа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.