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

Подключение 4-х символьного семисегментного индикатора TM1637 к Arduino

Если вы захотите в своем проекте использовать четыре обычных семисегментных индикатора, то для управления ими вам потребуется задействовать цифровых контактов микроконтроллера. Для платы Arduino – это почти все ее доступные цифровые контакты. Решить данную проблему с использованием большого количества контактов микроконтроллера можно за счет специализированных модулей семисегментных индикаторов, позволяющих управлять данными индикаторами с помощью относительно небольшого числа контактов. Одним из подобных модулей является модуль 4-х символьного семисегментного индикатора TM1637 (TM1637 Based 4 Bits Red Digital Tube LED Display Module). В данной статье мы рассмотрим принципы его работы и его подключение к плате Arduino.

Также на нашем сайте мы рассматривали и другие проекты с использованием 4-х символьных семисегментных индикаторов:

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

  1. Плата Arduino Uno (купить на AliExpress).
  2. Модуль TM1637 (купить на AliExpress).

Принципы работы модуля семисегментных индикаторов TM1637

Общие принципы работы модуля

TM1637 представляет собой разновидность контроллера светодиодных дисплеев. Также данная микросхема позволяет управлять яркостью подключенных дисплеев (индикаторов). Микросхема поставляется в корпусах типа DIP и SOIC и находит широкое применение в микроволновках, индукционных электроплитах и других бытовых электрических устройствах.

Также микросхема значительно упрощает написание программы управления семисегментными индикаторами с помощью микроконтроллера. В данном случае вам необходимо просто последовательно передать в нее данные, а все заботы по обновлению состояния индикаторов она берет на себя, что снижает нагрузку на микроконтроллер. Также, если присмотреться к модулю TM1637 внимательнее, то между 2-м и 3-м семисегментными индикаторами вы увидите «двоеточие», что делает его применение очень удобным в проектах, в которых требуется отображение времени.

Рабочее напряжение для модуля составляет от 3.3V до 5V, а для приема данных он использует двухпроводную шину (two-wire bus), а не интерфейс I2C как в большинстве ЖК и OLED дисплеях. Для получения более подробной информации по модулю TM1637 вы можете посмотреть даташит на него.

Распиновка модуля семисегментных дисплеев TM1637

Распиновка модуля TM1637 показана на рисунке ниже. Он содержит 4 контакта: CLK, DIO, VCC и GND. Все эти контакты являются цифровыми, за исключением контактов VCC и GND.

Назначение контактов:

CLK – входной контакт синхронизации. Необходимо подключить к любому цифровому контакту платы Arduino Uno.

DIO – контакт приема последовательных данных (Serial Data I/O pin). Необходимо подключить к любому цифровому контакту платы Arduino Uno.

VCC – контакт подачи питания на модуль. Можно подключить к источнику питания с напряжением от 3.3V до 5V.

GND – общий провод (земля).

Компоненты модуля семисегментных дисплеев TM1637

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

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

Наиболее часто задаваемые вопросы про модуль TM1637

Что представляет собой микросхема TM1637?
Она представляет собой разновидность схемы драйвера светодиодными дисплеями с интерфейсом сканера клавиатуры и внутренне интегрированная с цифровым интерфейсом микроконтроллера, триггером данных, драйвером светодиодов и сканером клавиатуры.

Использует ли модуль интерфейс I2C?
Нет, не использует. Он использует цифровой интерфейс, поэтому его можно подключать к любым цифровым контактам микроконтроллеров (плат).

Какие типы семисегментных индикаторов существуют и какой из них использует модуль TM1637?
Существует два типа семисегментных индикаторов: с общим катодом (CC) и общим анодом (CA). Разница между ними состоит лишь в том, что в дисплее с общим катодом все катоды семи сегментов соединены вместе, а в дисплее с общим анодом вместе соединены все аноды сегментов. Модуль TM1637 использует семисегментный индикатор с общим катодом.

Схема модуля семисегментных дисплеев TM1637

Схема модуля семисегментных дисплеев TM1637 представлена на рисунке ниже. Кроме микросхемы TM1637 она содержит также 4 конденсатора и 2 резистора.

Схема проекта

Схема подключения 4-х символьного семисегментного индикатора TM1637 к плате Arduino представлена на следующем рисунке.

Как видите, его подключение к плате Arduino достаточно просто. Необходимо всего лишь подключить контакты питания модуля к контакту 3.3V или 5V платы Arduino Uno, а его линии данных подключить к цифровым контактам 3 и 4 платы Arduino Uno.

Внешний вид собранной конструкции проекта представлен на следующем рисунке.

Объяснение программы для Arduino

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

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

Первым делом в коде программы мы подключим используемые библиотеки и зададим контакты CLK и DIO. Также укажем задержку между демонстрациями работы дисплея.

Затем зададим массив, в нем будет храниться слово dOnE – оно будет отображаться на нашем дисплее.

Далее создадим объект для работы с ЖК дисплеем и передадим в него номера контактов CLK и DIO.

После этого в функции setup() инициализируем объект для работы с дисплеем, установим ему яркость и очистим его экран.

В функции void loop() мы будем последовательно отображать на экране дисплея набор символов. Начнем функцию loop() мы с объявления переменной, которая далее будет использоваться как счетчик цикла. Потом объявим два массива. Первый массив будет использоваться для того, чтобы зажечь все сегменты во всех индикаторах, а второй массив – чтобы их потушить. Функция setBrightness() будет использоваться для установки яркости дисплея.

Затем включим все сегменты на время, определяемое указанной ранее величиной задержки.

В следующем фрагменте кода мы отобразим на семисегментных индикаторах цифры 0 1 2 3.

Далее отобразим число 23.

Затем отобразим цифры без ведущих нулей.

В следующем фрагменте кода мы будем управлять яркостью свечения наших семисегментных индикаторов.

Далее сделаем для дисплея ON/OFF тест.

И, наконец, отобразим на экране дисплея слово dOnE, которое мы задали с помощью массива в нашей программе.

Тестирование работы модуля дисплея TM1637

Тестирование работы нашего проекта показано на следующем видео. На дисплее мы последовательно будем отображать различные символы через определенные интервалы времени. Весь этот процесс займет примерно 20 секунд, после чего вы сможете наблюдать управление яркостью дисплея.

https://circuitdigest.com/sites/default/files/other/Arduino-TM1637-Display-Working.mp4

Возможные проблемы при работе с модулем TM1637

Если вы испытываете затруднения при работе с модулем TM1637, то первым делом необходимо проверить подаваемое на него питающее напряжение – оно должно быть в диапазоне от 3.3V до 5V. Если оно менее 3.3V, то модуль может работать неправильно. Если оно больше 5V – оно может повредить модуль.

Если линии питания и данных модуля работают корректно проверьте конденсаторы внизу модуля. Иногда из-за производственного брака вместо развязывающих конденсаторов нужного номинала вместо них ставят конденсаторы довольно большой емкости (1 или 10 мкФ). В этом случае удаление данных конденсаторов должно решить проблемы с работой модуля.

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

Источник статьи

4 ответа к “Подключение 4-х символьного семисегментного индикатора TM1637 к Arduino”

А разве TM1637 управляет индикаторами с общим катодом ? По даташит TM1637, выводы GRID1-6 — P-channel open drain, а выводы SG1-8 — N-channel open drain — при таком раскладе у 7-сегментного индикатора общий должен быть анод.

На сайте с источником статьи указано что TM1637 управляет индикаторами с общим катодом. Возможно, это опечатка. Информация требует уточнения

В даташите на первой странице:
The display mode (8 segments*6 bit) supports output by common anode LED.
т.е. с общим анодом.

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

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