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

Счетчик 0-99 на микроконтроллере AVR ATmega32

В этой статье мы рассмотрим счетчик 0-99 на двух символьном семисегментном дисплее под управлением микроконтроллера ATmega32 (семейство AVR). Мы будем подсчитывать число событий основываясь на числе нажатий кнопки.

Принцип работы семисегментного дисплея

Но прежде чем идти дальше, кратко остановимся на том, что такое семисегментный дисплей. Этот дисплей получил свое название исходя из того факта, что он имеет семь светящихся сегментов. Каждый из этих сегментов содержит светодиод. Диаграмма контактов семисегментного дисплея показана на рисунке ниже.

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

Как мы можем видеть, в катодном режиме (Common Cathode) отрицательные выводы светодиодов соединены вместе и названы «землей (GND)». В анодном режиме (Common Anode) положительные выводы светодиодов соединены вместе и названы «напряжением постоянного тока (VCC)». Эти режимы имеют значение (то есть их надо учитывать) когда мы объединяем несколько семи сегментных дисплеев в одно целое.

Чтобы человеческий глаз не замечал мерцания светодиодов семисегментного индикатора их необходимо переключать с частотой не менее 50 Гц.

Более подробно подключение семисегментного дисплея к микроконтроллеру AVR вы можете изучить в следующих статьях на нашем сайте:

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

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

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

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

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

Работа схемы

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

Соединения, которые необходимо сделать для семи сегментного дисплея, следующие:
PIN1 или e to PIN (A, 4)
PIN2 или d to PIN (A, 3)
PIN4 или c to PIN (A, 2)
PIN5 или h или DP to PIN (A, 7) /// не обязательно поскольку мы не используем десятичную запятую
PIN6 или b to PIN (A, 1)
PIN7 или a to PIN (A, 0)
PIN9 или f to PIN (A, 5)
PIN10 или g to PIN (A, 6)
PIN3 или PIN8 или CC к коллектору транзистора

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

На схеме у нас есть два транзистора, на каждый из которых подается управляющий ток с дисплеев. Мы будем включать и выключать оба дисплея попеременно с интервалом времени 10 мс. Таким образом, сначала первый дисплей будет включен на 10 мс, а второй в это время будет выключен, потом второй дисплей будет включен на 10 мс, а первый в это время будет выключен и т.д. При этом частота переключения дисплеев будет достаточна для того чтобы человеческий воспринимал их как непрерывно горящими, хотя на самом деле это не так.

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

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

Объяснение работы программы

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

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

6 ответов к “Счетчик 0-99 на микроконтроллере AVR ATmega32”

К сожалению, по этому поводу не могу ничего дельного подсказать, слишком маленький опыт работы в протеусе

при продолжительном нажатии на кнопку счет идет, а как сделать чтобы счет шел только от количества нажатий?

Да по идее ничего больше не нужно делать, представленная программа должна корректно обрабатывать одиночные нажатия кнопок

Здравствуйте, добавить третий семисегментный дисплей по аналогии и третий транзистор для него. И распространить описанный в статье принцип мультиплексирования для трех дисплеев

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

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