Рубрики
Схемы на AVR

Машина для голосования на радиочастотной идентификации и микроконтроллере AVR ATmega32

Мы знаем, что сейчас в офисах, торговых центрах и многих других местах требуется авторизация людей, которые входят/выходят из этих мест. Часто для этих целей используется радиочастотная идентификация (RFID — Radio Frequency Identification). В частности, радиочастотная идентификация используется в торговых центрах для защиты от воров – все товары в них снабжены специальными радиочастотными метками и если кто то пытается вынести из торгового центра товар с такой меткой, то сразу включается сигнализация. Радиочастотные метки представляют собой очень маленькие устройства – их размер сравним с песчинками. Системы радиочастотной идентификации просты в разработке и дешевы в производстве, что и обусловило их широкое распространение по всему миру.

В этой статье мы рассмотрим машину для голосования которая подсчитывает только авторизованные голоса. Делать мы это будем с помощью радиометок RFID. Рассматриваемая нами схема и программа к ней будет разрешать голосовать только авторизованным пользователям. Простую машину для голосования (без авторизации) мы рассмотрели в этой статье на нашем сайте.

Необходимые компоненты

Аппаратное обеспечение

  1. Микроконтроллер ATmega32 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. Жидкокристаллический дисплей JHD_162ALCD (16x2LCD) (купить на AliExpress).
  4. Конденсатор 100 мкФ (соединенный по питанию) (купить на AliExpress).
  5. Кнопка (5 шт.).
  6. Резистор 10 кОм (5 шт.) (купить на AliExpress).
  7. Конденсатор 100 нФ (5 шт.) (купить на AliExpress).
  8. Светодиод (2 шт.) (купить на AliExpress).
  9. EM-18 (модуль чтения RFID меток) (купить на AliExpress).
  10. Источник питания с напряжением 5 Вольт.

Реклама: ООО «АЛИБАБА.КОМ (РУ)» ИНН: 7703380158

Программное обеспечение

  1. Atmel Studio версии 6.1 (или выше).
  2. Progisp или flash magic (необязательно).

Работа схемы

Схема устройства приведена на следующем рисунке.

В представленной схеме PORTA микроконтроллера ATmega32 соединен с портом данным жидкокристаллического (ЖК) дисплея. При этом следует помнить о том, что необходимо деактивировать JTAG интерфейс микроконтроллера на порту PORTC при помощи изменения фьюзов (fuse bytes) чтобы использовать PORTC как обычный порт ввода/вывода. В ЖК дисплее (если мы не хотим использовать черный цвет) можно задействовать только 14 его контактов: 8 контактов для передачи данных (7-14 или D0-D7), 2 контакта для подачи питания (1&2 или VSS&VDD или gnd&+5v), 3-й контакт для управления контарстностью, 3 контакта для управления (RS&RW&E).

В представленной схеме мы использовали только 2 контакта управления ЖК дисплея для лучшего понимания работы схемы. Бит контраста и READ/WRITE используются нечасто, поэтому они могут быть замкнуты на землю. Это обеспечивает ЖК дисплею максимальную контрастность и переводит его в режим чтения. Теперь нам всего лишь нужно контролировать контакты ENABLE и RS чтобы передавать на ЖК дисплей символы и данные. Также на нашем сайте вы можете прочитать более подробную статью о подключении ЖК дисплея к микроконтроллеру ATmega32.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
PIN1 или VSS — земля
PIN2 или VDD или VCC — +5v питание
PIN3 или VEE — земля (обеспечивает максимальный контраст ЖК дисплею)
PIN4 или RS (Register Selection) – контакт PD6 микроконтроллера
PIN5 или RW (Read/Write) — земля (переводит ЖК дисплей в режим чтения что упрощает взаимодействие с ним для начинающих)
PIN6 или E (Enable) — контакт PD5 микроконтроллера
PIN7 или D0 — контакт PA0 микроконтроллера
PIN8 или D1 — контакт PA1 микроконтроллера
PIN9 или D2 — контакт PA2 микроконтроллера
PIN10 или D3 — контакт PA3 микроконтроллера
PIN11 или D4 — контакт PA4 микроконтроллера
PIN12 или D5 — контакт PA5 микроконтроллера
PIN13 или D6 — контакт PA6 микроконтроллера
PIN14 или D7 — контакт PA7 микроконтроллера

В схеме мы использовали 8-битную связь (D0-D7) ЖК дисплея с микроконтроллером, хотя можно было ограничиться и 4-битной – но в этом случае код программы стал бы немного сложнее.

Таким образом, мы использовали 10 контактов ЖК дисплея, 8 из которых будут использоваться для передачи данных и 2 для управления.

Чтобы двигаться дальше нам необходимо остановиться на принципах работы последовательного порта микроконтроллера потому что модуль чтения радиочастотных меток будет посылать данные микроконтроллеру именно по этому порту. Можно задействовать и другой режим связи модуля чтения радиочастотных меток с микроконтроллером (RFID), но в целях упрощения мы в данной статье остановимся на их связи через порт RS232. Таким образом, контакт RS232 модуля RFID необходимо соединить с контактом RXD микроконтроллера ATmega32.

Данные, передаваемые модулем RFID, выглядят следующим образом:

Чтобы осуществить успешный их прием и обработку, необходимо выполнить следующие действия:

  1. Контакт RXD микроконтроллера должен быть доступен (активирован).
  2. Поскольку мы используем последовательную передачу данных, то мы должны знать момент окончания приема всего байта данных. То есть мы должны приостановить работу программы до тех пор, пока мы не примем весь байт. Это достигается при помощи использования соответствующего прерывания.
  3. Модуль RFID передает данные микроконтроллеру в 8 битном режиме, поэтому одновременно будут передаваться два символа.
  4. Биты четности не используются, но однако один стоповый бит посылается модулем RFID.

Регистры, используемые для управления последовательным портом микроконтроллера, представлены на следующем рисунке.

Кратко поясним данный рисунок.

RED (красный, RXEN): этот бит представляет особенности принимаемых данных. Он должен быть установлен для данных, которые передаются от модуля RFID к микроконтроллеру. Он также производит активацию (запускает в работу) контакт RXD микроконтроллера.

BROWN (коричневый, RXCIE): этот бит должен быть установлен для обработки прерывания после окончания успешного приема данных. Активируя этот бит мы знаем что произвели успешный прием 8 бит.

PINK (розовый, URSEL): этот бит должен быть установлен перед активацией других битов UCSRC. После его установки, другие биты UCSRC, URSEL должны быть деактивированы или установлены в 0.

YELLOW (желтый, UCSZ0,UCSZ1,UCSZ2): эти три бита используются для выбора номеров битов данных, которые мы передаем или принимаем при односторонней передаче. Поскольку данные от модуля RFID передаются в 8 битном формате мы должны установить биты UCSZ0 и UCSZ1 в единицу, а бит UCSZ2 – в ноль.

ORANGE (оранжевый, UMSEL): этот бит определяет используется ли асинхронный режим передачи между устройствами (используются различные часы) или синхронный (используются одни и те же часы). Поскольку модуль RFID и микроконтроллер ATmega32 используют разные часы, то этот бит должен быть установлен в ноль.

GREEN (зеленый, UPM1, UPM0): эти два бита корректируются на основе бита четности, который мы используем в процессе связи.

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

BLUE (синий, USBS): этот бит используется для выбора числа стоповых битов которые мы используем в процессе связи.

Поскольку модуль RFID передает данные с одним стоповым битом, мы должны установить бит USBS в ноль.

После установки всех рассмотренных битов мы должны установить техническую (в бодах) скорость передачи по последовательному порту. Модуль RFID передает данные по этому порту со скоростью 9600 бод/с, поэтому такую же скорость мы должны выставить и у последовательного порта микроконтроллера при помощи установки соответствующего значения UBRRH.

Значение байта UBRRH должно выбираться из необходимой скорости передачи данных и используемой частоты работы микроконтроллера. Исходя из нижеприведенной таблицы мы видим, что нам необходимо записать в этот байт значение ‘6’.

В схеме присутствуют 5 кнопок, четыре – для подсчета голосов кандидатов и пятая для сброса числа голосов кандидатов в ноль. Конденсаторы на схеме предназначены для устранения эффектов биений, возникающих при нажатии кнопок. Если их убрать, то микроконтроллер в некоторых случаях будет фиксировать более одного нажатия кнопки, хотя кнопка была нажата всего один раз.

Резисторы, подсоединенные к контактам микроконтроллера, служат для ограничения тока во время нажатий на кнопки. Во время нажатия кнопки на соответствующий контакт микроконтроллера подается «земля» и таким образом микроконтроллер распознает что кнопка была нажата и выполняет в связи с этим определенное действие: увеличивает число голосов кандидата или сбрасывает все голоса (в зависимости от того какая кнопка была нажата).

При нажатии кнопки, соответствующей какому-нибудь человеку, микроконтроллер распознает это и увеличивает соответствующую переменную в своей памяти, затем передает значение этой переменной на ЖК дисплей 16×2.

Исходный код программы на языке С (Си) с пояснениями

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

Текст программы без комментариев

Видео, демонстрирующее работу схемы

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *