RFID
|
|
mikhail09p |
Дата: Сб, 28.01.2017, 10:42 | Сообщение # 1 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Здравствуйте. Помогите прочитать ключ RFID 125кГц. Пробую делать с помощью компаратора на 628 пике. Может, кто поделится примером расшифровки кода? В смысле протокола RFID. Буду очень благодарен.
Сообщение отредактировал
mikhail09p - Сб, 28.01.2017, 12:16
|
|
|
|
Matrix252005 |
Дата: Пн, 30.01.2017, 10:02 | Сообщение # 2 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
636
Замечания:
±
На сайте с 12.10.2007
Статус:
Offline
|
Приятного времени суток!!!
Михаил, гляньте тут, может что и пойдет:
http://www.protonbasic.co.uk/showthread.php/57744-Rfid
THE TRUTH IS OUT THERE.
С уважением, Николай.
|
|
|
|
mikhail09p |
Дата: Пн, 30.01.2017, 18:55 | Сообщение # 3 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Спасибо, Николай, но там немного... Наверное, из местных никто этим не занимался...
|
|
|
|
anatol |
Дата: Пн, 30.01.2017, 19:12 | Сообщение # 4 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
там же http://www.protonbasic.co.uk/showthread.php/57682-Rfid-with-EM4095 Device 18F8520 XTAL = 10 Declare PLL_REQ = On Symbol CLK = PORTB.1 Symbol DTA = PORTB.0 Dim NB_CLK As Byte Dim VAR1[64] As Byte Dim INDEX As Byte Dim CNT As Byte Dim I As Byte Dim RESULT As Byte Dim row_count, row_bit, column_count As Byte Dim row_sum, column_sum As Byte Dim row_check[5] As Byte Dim column_check[11] As Byte TRISB = %00000011 TRISD = 0 PORTD = 0 PORTB = 0 INDEX = 0 ;================================================================ SERIAL_BAUD = 19200 RSOUT_PIN = PORTC.6 RSOUT_MODE = TRUE RSOUT_PACE = 1 RSIN_PIN = PORTC.7 RSIN_MODE = TRUE TRISC.6 = 0 TRISC.7 = 1 PORTC.6 = 1 DelayMS 100 RSOut "Initializing......",13 PORTB.2 = 1 DelayMS 1000 PORTB.2 = 0 RSOut "Ready......",13 ;================================================================ AGAIN: PORTB.2 = 1 DelayUS 100 PORTB.2 = 0 INDEX = 0 While DTA = 0 : Wend While DTA = 1 : Wend ; WAIT FOR FALLING EDGE ON DATA PIN
PORTB.2 = 1 DelayUS 100 PORTB.2 = 0
;---- Detecting the 9 consecutive logic one---------------------- INDEX = 0 For I = 0 To 63 NB_CLK = 64 : GoSub CLK_WAIT ; WAIT FOR 64 CLOCK PULSE RESULT = DTA ; GET A BIT EVERY 64 CLOCK PULSE If RESULT = 1 Then Inc INDEX Else INDEX = 0 EndIf If INDEX = 9 Then GoTo AAA Next AAA: If INDEX = 9 Then ; If Index = 9 then there is a valid data For I = 9 To 63 NB_CLK = 64 : GoSub CLK_WAIT ; WAIT FOR 64 CLOCK PULSE VAR1 = DTA ; GET A BIT EVERY 64 CLOCK PULSE Next For I = 0 To 8 VAR1 = 1 Next Else ; else : no card or just placed two card in reader GoTo AGAIN EndIf
;--- CRC Checking --------------------------------------------- GoSub CRC_Check If RESULT = 0 Then GoTo AGAIN Else RSOut "CRC Check ok",13 EndIf
;--- Display the result of data ------------------------------- For I = 0 To 63 RSOut Dec VAR1 Next RSOut 13 PORTB.4 = 1 DelayMS 5000 PORTB.4 = 0 GoTo AGAIN ;================================================================ CLK_WAIT: For CNT = 1 To NB_CLK While CLK = 0 : Wend While CLK = 1 : Wend Next Return ;================================================================ CRC_Check: ' row parity check: row_count = 9 ' count rows While row_count < 59 column_count = 0 ' count columns While column_count < 5 row_check[column_count] = VAR1[row_count+column_count] Inc column_count Wend row_bit = 0 ' count row bits row_sum = 0 While row_bit < 4 row_sum = row_sum + row_check[row_bit] Inc row_bit Wend I = row_check[4] If row_sum.0 <> I.0 Then RESULT = 0 Return End If row_count = row_count + 5 Wend ' end row parity check ' column parity check: column_count = 9 ' count columns While column_count < 13 row_bit = 0 ' count column bits row_count = 0 ' count rows While row_bit < 11 column_check[row_bit] = VAR1[column_count+row_count] Inc row_bit row_count = row_count + 5 Wend row_bit = 0 ' count column bits column_sum = 0 While row_bit < 10 column_sum = column_sum + column_check[row_bit] Inc row_bit Wend I = column_check[10] If column_sum.0 <> I.0 Then RESULT = 0 Return End If Inc column_count Wend ' end column parity check If VAR1[63] = 1 Then RESULT = 0 Return End If RESULT = 1 Return ;================================================================ End
Сообщение отредактировал
anatol - Пн, 30.01.2017, 19:13
|
|
|
|
mikhail09p |
Дата: Вт, 31.01.2017, 09:10 | Сообщение # 5 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Что-то никак не пойму без схемы. Тут, похоже, принимается с какого-то модуля...
|
|
|
|
anatol |
Дата: Вт, 31.01.2017, 11:38 | Сообщение # 6 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
mikhail09p, я ссылку исходную приводил. Похоже чел использует (или конвертировал под протон программу) с этой отладочной платы http://download.mikroe.com/documen....100.pdf а сам приемник отсюда http://www.advanide.com/wp-cont....095.pdf К сожалению не могу понять что используешь - RFID (безконтактный радио) или простой кодовый. Знаний по этой теме немного совсем. Одно знаю что для ответа метки сначала надо "зарядить" в ней конденсатор непрерывным излучением, а потом посылать код опроса.
|
|
|
|
MiXaS |
Дата: Вт, 31.01.2017, 16:22 | Сообщение # 7 |
Группа:
Проверенные
Ранг:
Разобрался
Сообщений:
549
Замечания:
±
На сайте с 02.10.2010
Статус:
Offline
|
mikhail09p, скажите, а готовый модуль не подходит? с выходом uart? Добавлено (31.01.2017, 16:22) --------------------------------------------- Я вот этот использовал. Скорость чтения так себе, но работает
|
|
|
|
mikhail09p |
Дата: Вт, 31.01.2017, 17:53 | Сообщение # 8 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Ого! На каком расстоянии считывает? И что значит - скорость считывания? 1 сек?
Хотя хотелось бы обойтись просто контроллером. У людей ведь работает.
|
|
|
|
anatol |
Дата: Вт, 31.01.2017, 21:05 | Сообщение # 9 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
mikhail09p, нарисуй схему твоего девайса. Можно не все. Нужна схема приемопередатчика (или готовый) и подключение к пику.
|
|
|
|
mikhail09p |
Дата: Вт, 31.01.2017, 21:46 | Сообщение # 10 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
Схема вот. Не моя, но такая же. В железе работает. Сигнал смотрю на PORTA.3. Программу тоже прикрепляю. Аппаратный шим генерит на 125 кГц. Ключ отзывается.
|
|
|
|
anatol |
Дата: Ср, 01.02.2017, 23:19 | Сообщение # 11 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Смотрел вкользь - домашние заботы. Не понял чем вы раскачиваете усилитель Порт B в программе не просматривается. Также вопрос по контуру L1-C1 - настроен он на 125 кГц? От его качества сильно зависит чувствительность приемного тракта. При наличии осциллографа запрос и ответ можно посмотреть на порте А1 (ваша схема).Принимаемый сигнал будет значительно отличаться по амплитуде.
|
|
|
|
mikhail09p |
Дата: Пт, 03.02.2017, 21:46 | Сообщение # 12 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
481
Замечания:
±
На сайте с 04.05.2010
Статус:
Offline
|
PortB.3 - это выход ШИМ. Про контур знаю. Осциллографом смотрю, сигнал есть. Вопрос по расшифровке.
|
|
|
|
anatol |
Дата: Пн, 06.02.2017, 20:21 | Сообщение # 13 |
Группа:
Проверенные
Ранг:
Помогаю всем
Сообщений:
471
Замечания:
±
На сайте с 10.02.2010
Статус:
Offline
|
Полистай kazus.ru/forums/attachment.php?attachmentid=49767&d=1374440757
|
|
|
|
Max_Ostin |
Дата: Вс, 07.10.2018, 17:17 | Сообщение # 14 |
Группа:
Пользователи
Ранг:
Новенький
Сообщений:
12
Замечания:
±
На сайте с 29.10.2017
Статус:
Offline
|
Здравствуйте уважаемые форумчане, подскажите в чём проблема. Заинтерисовала так называемая "открывашка", "таблетка" i-button, которая открывает почти все двери с домофоном всем известных фирм (Цифрал, Метаком и другие). Проштудировал ин-нет и узнал, что она эта "таблетка" (она же DS1990A, а может и нет?) осуществляет обмен по 1-проводной линии (протокола 1-Wire), изобретённой фирмой DALLAS.К этому же типу относится датчик температуры DS18S20 (есть ещё часы реального времени). Написал прогу, используя старую от датчика температуры, нарисовал в Протеусе схемку, немного поколдовал и в Протеусе заработала. Спаял в "железе" на монтажной плате, она должна считывать помежуточное ПЗУ (Read ROM [33h]) и сохранить его в EEPROM. Затем, я EEPROM считываю через программатор узнаю его. Но прога в "железе" работает не правильно, чип видит подключение "таблетки" к слоту, гаснет красный и загорается зелёный диод. Но при считывании EEPROM из чипа вижу восемь нулевых байтов. Про бывал изменять задержки в подпрограммах, в большую и в меньшую сторону - ничего не меняется. Из статьи о DS18S20, размерность задержек колеблется в два раза(!) и указанны только минимальные величины. А ведь помню, что кода-то давно собирал такой считыватель на базе 628А, и там в схеме присутствовал полевой транзистор (КП304А), и она нормально работала. Правда в EEPROM сохранялось (могу и ошибаться), вроде четыре байта (может и шесть) и среди них не было байта 01h. И не помню в каких дебрях ин-нета я её нашёл. Кто делал в "железе", такой считыватель может подскажет, где ошибка? И если чисто логически поразмыслить прочитав статью в дополнениях, домофон не использует для идентификации это самый серийный номер "таблетки".Потому, что он является уникальным и при потери его нельзя восстановить. А "таблетку" дубликат могут сделать в компании которая обслуживает домофоны. Значить в "таблетке" есть какое-то одноразовое ПЗУ или електрически стираемое ПЗУ (как в DS18S20) которое есть в списке домофона для ключей которые открывают дверь? Кто знает больше, скажите! И ещё маленький вопрос, а как эту CRC вычислять? Из материала про датчики DS1820 - ни чего не понял!
|
|
|
|
Aleksey_174 |
Дата: Пн, 08.10.2018, 05:44 | Сообщение # 15 |
Группа:
Проверенные
Ранг:
Новенький
Сообщений:
17
Замечания:
±
На сайте с 22.01.2017
Статус:
Offline
|
Max_Ostin, Не понял ничего толком в вашем коде, вы пытаетесь прочитать ключ в побитовом режиме не подав на него команду чтения. Обычный ключ ibutton содержит 8 байт информации, где 1 байт содержит идентификатор ключа обычно используется (01), 6 байт код ключа и один 1 CRC код. CRC код используется для проверки целостности кода ключа. Для того чтоб прочитать ключ с начала на него необходимо подать команду для чтения $33 или старые ключи $F0. Для чтения и опроса ключа используй операторы QWrite и QRead DS1990: OWrite Key, 1, [$33]' 'Процедура чтения кода ключа ORead Key, 0, [Str ID\8] 'в переменную ID Return А для вычисления CRC '--Процедура определения правильности кода ключа Calculating_crc: crc = 0 I = 0 TestBit = 0 Crcdata = ID[0] GoSub CRC8 Crcdata = ID[1] GoSub CRC8 Crcdata = ID[2] GoSub CRC8 Crcdata = ID[3] GoSub CRC8 Crcdata = ID[4] GoSub CRC8 Crcdata = ID[5] GoSub CRC8 Crcdata = ID[6] GoSub CRC8 Return CRC8: For I = 0 To 7 ' для всех 8ми битов TestBit = crc.0 ^ Crcdata.0 Crcdata = Crcdata >> 1 If TestBit = 0 Then Shift crc = crc ^ $18 Shift: crc = crc >> 1 crc.7 = TestBit Next Переменные для них Dim crc As Byte 'CRC Dim Crcdata As Byte 'CRC Dim TestBit As Bit 'CRC Dim ID[8] As Byte 'буфер записи ключей программа gosub DS1990 'проверяем сунул ли кто нить ключ 'проверяем идентификатор ключа I-Button If ID[0] = $1 Or ID[0] = $2 Then ') GoSub Calculating_crc 'ключ есть проверяем на ошибки If crc=ID[7] Then 'ошибок нет \\\\\\\\\\\\\\\\\\\\\\\\\\\ Сам раньше баловался пока у нас домофоны не поменяли.
|
|
|
|