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

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

Наверное, вы в своей жизни на различных выборах видели специальные машины для голосования. В этой статье мы постараемся собрать упрощенную модель подобной машины на микроконтроллере ATmega32A (семейство AVR). На данном микроконтроллере можно собрать машину для голосования 32 людей, однако в целях упрощения мы в данной статье ограничимся схемой для голосования 4 людей. У нас будет 4 кнопки для 4 людей и всегда, когда кнопка будет нажата, голос от соответствующего человека будет засчитан и количество голосов от каждого человека будет показываться на жидкокристаллическом (ЖК) дисплее.

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

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

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

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

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

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

Работа схемы

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

Как видно из представленной схемы, PORTA микроконтроллера ATmega32 соединен с портом данных ЖК дисплея 16×2 (более подробно о подключении ЖК дисплея к микроконтроллеру ATmega32 можно прочитать в этой статье. Но следует помнить о том, что необходимо деактивировать интерфейс JTAG (отладки микроконтроллера) при помощи изменения фьюзов (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 чтобы передать на ЖК дисплей символы и данные.

В схеме необходимо сделать следующие соединения с ЖК дисплеем:
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 для управления. 4 кнопки на схеме используются для подсчета (увеличения) числа голосов кандидатов и пятая кнопка – для сброса числа голосов.

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

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

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

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

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

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

2 ответа к “Машина для голосования на микроконтроллере AVR ATmega32”

Здравствуйте. При попытке компиляции выдало несколько ошибок. Первый в строке 44, лишняя скобка с точкой запятой, вторая в конце кода лишняя закрывающая скобка и главное, ругается на строку send_a_string. Не явное объявление функции. Скрипт так и не смог запустить 🙁

Добрый вечер, да, к сожалению в строке 44 имелась лишняя скобка с запятой, сейчас исправлю. Код функции send_a_string сейчас тоже добавлю в код программы, почему то здесь она была пропущена

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

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