Реле Tianbo - ресурс 10 млн переключений

Универсальный RFID ключ. Часть 3 - Программное обеспечение, прошивка микроконтроллера, режимы работы RFID ключа

Часть 1 - Технология RFID, передача данных, RFID метки (ключи)
Часть 2 - Схема и печатная плата

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

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Самой трудной задачей при написании программы было вычисление четности и контрольной суммы данных «на лету». Контрольный бит передается в конце каждого полубайта (4 бита) – это проверка четности – означает, что передатчик добавляет 1 к каждому полубайту, если количество единиц в нем нечетное количество. К примеру, возьмем последовательность данных, которая будет передана: 2C 0077 55A2 (HEX). К первому полубайту «2» (0010) будет добавлен контрольный бит равный 1, т.к. система проверки четности определит, что количество единиц нечетное. К следующему полубайту «C» (1100) будет добавлен контрольный бит 0, т.к. количество единиц четное.

BIN
HEX
00101
2
11000
C
00000
0
00000
0
01111
7
01111
7
01010
5
01010
5
10100
A
00101
2
Контрольная
сумма
0110
 

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

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

При подаче питания универсальный RFID ключ переходит в режим ожидания нажатия кнопки «Mode» (SW10). Текущий режим индицируется 4 светодиодами, установленными на плате. Каждое нажатие на кнопку переключает режим, подтверждение выбора режима осуществляется кнопкой «Enter» (SW15).

  • Режим 1 – перевод ключа в режим пониженного энергопотребления «Sleep». При выборе этого режима микроконтроллер переходит в режим с малым потреблением, кнопка «Reset» (Сброс) выводит микроконтроллер из этого режима.
     
  • Режим 2 – Ввод идентификатора RFID системы. После нажатия кнопки «Enter» наш универсальный ключ ожидает ввода двух цифр в шестнадцатеричном формате. В нашем случае это значение 2C, которое
  • используется по умолчанию, поэтому вводить его сразу нет необходимости.
     
  • Режим 3 – Ввод в десятичном формате идентификационного номера карты, которую будет эмулировать наш ключ. После выбора это режима ключ ожидает ввода 8 цифр в десятичном формате, в нашем случае это 07820706 – длинное число которое напечатано на обратной стороне карты (см. часть 1).
     
  • Режим 4 – индикация текущего идентификационного номера карты и идентификатора RFID системы (2C). После подтверждения режима пользователь получает информацию в шестнадцатеричном формате о текущих идентификаторах при помощи 4 светодиодов.
     
  • Режим 5 – Эмуляция ключа. Режим для эмуляции карты с заданными параметрами, все четыре светодиода выключены. Выход из этого режима осуществляется по нажатию кнопки сброса.

Все данные вводятся с помощью клавиатуры. Для работы с клавиатурой использовалась готовая библиотека (в среде Aduino).

После программирования микроконтроллера проводились эксперименты со стандартным считывающим устройством RFID.

Универсальный RFID ключ

Загрузки

Исходный код программы микроконтроллера – скачать

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: A Universal RFID Key. Part 3 - The Software, Entering data into our card

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя
Фрагменты обсуждения (только последние 20 сообщений):Полный вариант обсуждения »
  • Вот и долгожданная 3 часть.
  • Для "Vadim по заказу РадиоЛоцман". По ссылке ("Исходный код программы микроконтроллера – скачать") находится файл: Universal_RFIDkey_source.pde Поясните что это такое и как из него получить исходник?
  • это и есть исходник, написан на Си компилируйте , получайте хекс и зашиваете МК
  • Universal_RFIDkey_source.pde, как правильно заметил [B]DmitriyVDN[/B] и есть исходник на Си, но добавлю, что это для Arduino IDE, так называемый скетч. [url]http://www.arduino.ru/Arduino_environment[/url]
  • Благодарю за ссылку!
  • При компиляции исходника вываливается сообщение об ошибке. Подскажите как исправить исходник чтобы откомпилировать?
  • Ошибка появляется видимо из-за отсутствия библиотеки функций для работы с клавиатурой keypad.h Данный файл должен быть в папке интегрированной среды разработки Arduino IDE, а точнее в папке "arduino\libraries". В архиве есть все что нужно...
  • Спасибо, эта ошибка исчезла, теперь другая, наверно не видит платы arduino, или нет ? Непонятно. Где hex файл прячет при компиляции?
  • А может кто нибудь хекс файл выложить?
  • По поводу второй ошибки компиляции - скорее всего нужно в компиляторе включить опцию оптимизации по коду (это в настройках Arduino IDE нужно смотреть или в make-файле для проекта).
  • А какие фьюзы выставлять и какая частота кварца?
  • Кварцевый резонатор на 16 МГц. Fuse-биты посмотрите в исходнике, может там о них говориться. Если нет, то я думаю, что нужно только выставить микроконтроллер на работу от внешнего HS кварца.
  • make-файла для данного проекта нет есть только скетч опции оптимизации по коду в ардуино нет , есть она в спец. программах компиляторах но до них ещё надо правильно донести этот проект. Компиляция в ардуино проходит нормально , но на платах НЕ с атмега8,что наводит на простой вывод-либо этот проект не работо способен вобще, либо не на этом процессоре. Мог бы и хекс выложить здесь но он всё равно не влезет в атмегу8
  • [B]moonytor[/B], спасибо конечно. Но... Во-первых, что касается меня и моих ответов в теме, то я не в курсе всего по работе Arduino IDE, и подсказывал только возможные решения проблем в силу своей осведомленности. (Это по make-файлу, оптимизации) Во-вторых, раз вы больше знаете об Arduino и среде разработки и вы, видимо, разобрались с этим проектом и увидели, что скетч не компилируется под Atmega8, то почему-бы без "грубых ноток" указать на это в своем сообщении. В-третьих, статья на сайте это перевод англоязычной статьи, которую можно легко найти в сети, и этот оригинал, между прочим, так и остался со схемой на mega8. И вот благодаря вам, я начал копать дальше и выяснять в чем проблема... и пришлось установить Arduino IDE и проверять... В тексте своей стаьти автор статьи лишь единожды упоминает, что установил на плату mega168 (и то видимо недавно вставил раздел описания установки элементов на пату) , а вот на фотографиях установлен микроконтроллер mega328 (Arduino Uno). На что я и указал автору оригинальной статьи в комментариях. Компиляция под mega328 и mega168 проходит успешно, поэтому далее [B]для всех[/B]: [U][CENTER]на схеме нарисован МК ATmega8, но [B]реально установлен[/B] [B]mega328[/B].[/CENTER][/U] Выкладываю файл прошивки (hex) по просьбе [B]moonytor[/B], но в железе не проверял,надеюсь кто-то со временем проверит в железе. Статью на нашем сайте поправят.
  • Я в курсе что это иностранный проект(всё вокруг облазил), и не в коем случае не в претензии к нашим авторам(спасибо хотя бы за внятный перевод). Из моего первого сообщения ясно что я компилировал в ардуино на платах мощнее чем с атмега8(физически плат не имею) и всегда получал размер хекса слишком большой для неё. "Мог бы выложить" следует понимать что я хекс уже получил сам, но мне он не нужен как и другим у кого есть только атмега8, поэтому мне интересно воплотит ли кто-то эту схему в жизнь, тогда можно и купить 16-ую. Я пытался усечь программу выкидывая излишние функции, но все равно это было чуть больше чем можно.
  • Конструкция в принципе интересная, но ввод-вывод по моему вообще упоротый (20! кнопок Карл!)... Я бы так модифицировал: берем комплект считывателя на Али - он там копеечный, получаем катушку с драйвером. Добавляем ардуинку нано/мини и дисплей 128*128 1.44 цветной (только нокии не берите, был 5110, выкинул это глючное китайское г) - ввод данных 3 кнопками. Получим то же самое, но возни в разы меньше - нет секса с фьюзами, по цене не дороже - учитывая цены в наших магазинах. Можно и уно\мега взять с лсд-шилдом 2*16, тут 2 строк за глаза хватит и кнопок там завались. Правда габариты в разы увеличатся.
  • Возможно автор статьи и как и многие любители Arduino демонстрирует пример конструкторомании. Следующим шагом надо ставить Intel Galileo :). Ранее была статья [URL="http://www.rlocman.ru/shem/schematics.html?di=112268"]Самый простой RFID эмулятор[/URL] с простейшей эмуляцией [URL="https://ru.wikipedia.org/wiki/EM-4100"]EM-4100[/URL] на PIC12F683 - просто, дешево, без кнопок и без питания, хорошо раскрывает принцип действия RFID меток EM-Marin. Для интереса собрал - работает.
  • Спасибо за ссылку, почитал. На пике - да, дешевле, но ни разу не проще для новичка - как минимум проггер нужен и печатку травить...Ардуино тем и лучше - на макетке все собрал за вечер, мгтф проводом распаял - и все! Надоело - пересобрал в другой конфигурации. В итоге дешевле. Если устройство серийное - другое дело. А для профи - не нравится кривая ide - так AVR есть.
  • пики, авиры, стмы, дурины , прогеры какие-то .... обычная логика и джамперы и никаких микроконтроллеров: [url]https://geektimes.ru/post/257560/[/url] :)
  • самые первые устройства . если и делались на отладочных платах. то это был basic-stamp [url]https://www.parallax.com/catalog/microcontrollers/basic-stamp[/url] и что раньше, что и сейчас PIC был дешевле. а про ARDUINO слышали и в конкурсах участвовали по разработке ... плата для прототипирования для AVR . по моему так назвался. и серьезно этот конструктор никто не воспринимал.
Полный вариант обсуждения »