69 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

TM1637 7-сегментный светодиодный модуль-дисплей

Светодиодный LED дисплей на базе драйвера TM1637

Товары

Обзор светодиодного индикаторного дисплея на базе драйвера TM1637

Одним из широко используемых устройств для отображения информации в любительских проектах Arduino являются 7-сегментные светодиодные индикаторы, которые используют в сборках из 4 или 8 штук. На данные дисплеи уже можно выводить какие-то осмысленные данные, например текущее время или курс валюты. Но еще совсем недавно это требовало использования очень большого количества контактов Arduino. С появлением дисплеев на светодиодных индикаторов на микросхеме TM1637 (рис. 1) для подключения используется всего 2 цифровых контакта Arduino, плюс питание и земля. TM1637 полностью берет на себя организацию динамической индикации индикаторов.

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

Технические характеристики дисплея TM1637

Напряжение питания – 3.3 – 5.5 В;

Ток потребления – 0.2 – 80 мА;

Количество сегментов – 4 с десятичной точкой в каждом разряде;

Размер индикаторов – 0.36″ или 0.56″;

Наличие разделительных точек;

Интерфейс – двухпроводной последовательный;

Цвета – красный, синий, желтый, белый, зеленый;

Регулируемая яркость – 7 уровней.

Подключение 4-Digit LED дисплея к плате Arduino

Для подключения дисплея к микроконтороллеру используют два контакта дисплея:

DIO –отправка данных;

которые подключаем к двум любым цифровым контактам Arduino (рис. 2).

Для работы с данным дисплеем существует несколько библиотек, например TM1637, DigitalTube, GyverTm1637. Установим в Arduino IDE библиотеку, позволяющую выводить цифры, буквы, время, бегущую строку и имеющую интересные визуальные эффекты. Посмотреть возможности библиотеки можно, запустив пример GyverTm1637_Demo (Примеры → GyverTm1637 → GyverTm1637_Demo).

Пример использования светодиодного LED дисплея vTM1637

Создадим проект отображения на дисплее TM1637 времени, текущей даты, года, дня недели с различными эффектами.

Для проекта нам понадобятся:

Плата Arduino Nano – 1 шт;

Дисплей TM1637 – 1 шт;

RTC DS3231 – 1 шт;

Схема соединений нашего проекта на рис. 4.

Порядок показа даты и времени, получаемых с модуля RTC DS3231:

_ _ : s s – показ секунд с миганием двоеточия;

h h : m m – часы и минуты с миганием двоеточия;

d d m m – день месяц;

Загружаем на плату Arduino скетч из листинга 1.

И проверяем работу часов (рис. 5,6).

Часто задаваемые вопросы

1. Не выводится изображение на дисплей

Проверьте правильность подключения модуля к плате Arduino.

ПОДКЛЮЧЕНИЕ ДИСПЛЕЯ НА TM1637 К ARDUINO

БИБЛИОТЕКА GYVER TM1637

GyverTM1637 v1.4

Библиотека GyverTM1637.h основана на Grove_4Digital_Display, дописана куча удобных методов. Что умеет:

  • Вывод цифр массивом или прицельно
  • Вывод букв из списка доступных (листай ниже) массивом или прицельно
  • Отдельная функция вывода часов и минут (часы без нуля слева, минуты с нулём) 3 разных эффекта
  • Вывод числа от -999 до 9999 с учётом знака
  • Готовая функция бегущей строки
  • Функции смены яркости и состояния двоеточия автоматически обновляют дисплей
  • Функция обновления значения с эффектом вертикальной прокрутки
  • Функция обновления значения с эффектом скручивания (лучше один раз увидеть)

Поддерживаемые платформы: все платы на AVR и ESP

ДОКУМЕНТАЦИЯ

Список функций и методов библиотеки из файла .h

ПРИМЕРЫ

Демка со всеми возможностями

Пример вывода на дисплей

КАК ВЫВЕСТИ БУКВЫ?
В файле TM1637.h есть список букв, которые я добавил для удобного вывода, чтобы вывести, нужно использовать один из вариантов с функцией displayByte(). Следующий код выведет букву a в самый левый порт дисплея

Читать еще:  Отражатель-радиатор конической формы для сверхяркого светодиода

КАК ВЫВЕСТИ СТРОЧКУ?
Давайте выведем строчку HELL. Для вывода слов удобнее использовать следующий вариант:

Ну и конечно, можно задать массив букв из библиотеки и пользоваться им:

КАК СДЕЛАТЬ БЕГУЩУЮ СТРОКУ?

Очень просто, есть готовая функция runningString(). В качестве аргументов передаётся массив символов, длина строки и пауза-задержка вывода, то есть скорость бега бегущей строки. Для начала задаём массив, используя буквы из библиотеки или коды символов вида _буква:

Далее скармливаем его функции runningString(). Длина выводимой строки определяется функцией sizeof, по другому не получилось. Здесь 300 – время в миллисекундах между обновлениями экрана, т.е. скорость движения строки.

КАК ЗАДАТЬ СВОЙ СИМВОЛ?

На картинке справа показано, каким образом строится “код” символа: то есть в каком порядке расположены биты индикаторов и как они включаются и выключаются. Поняв закономерность, вы сможете задать любую конфигурацию светящихся индикаторов в одном порте. Вывести символ можно одним из вариантов функции displayByte.

ОНЛАЙН-ГЕНЕРАТОР СИМВОЛОВ

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

Обзор дисплея на базе драйвера TM1637

Опубликовано: 11.03.2017 10:36

Продолжаем обозревать модули от нашего любимого магазина RobotDyn, в этот раз у нас на обзоре 4-х разрядный семисегментный дисплей на базе драйвера TM1637. В этой статье мы рассмотрим как стандартный дисплей с разделителем типа «двоеточие» между вторым и третьим разрядом, так и дисплей с десятичными точками в разрядах. На изображениях ниже видно, какие типы модулей мы рассмотрим в этой статье. Первый модуль — обычный китайчик от магазина Catalex, размер 0.38″, по качеству пайки изготовлен так себе на уровне. Второй — от магазина RobotDyn, тут даже и придраться не к чему — качество на высоте, отличная пайка и прочие прелести, размер 0.56″.

Существует хорошая в общем то библиотека для подключения этого модуля к платам Arduino, это TM1637.h. Она позволяет выводить в основном как отдельные цифры(и даже в шестнадцатиричном формате), так и время, но к сожалению в ней не продумано как выводить пользовательские сгенерированые символы. Решение этой проблемы в общем то скрывается в самой библиотеке. Но, обо всём по порядку.

  • Подключение модуля TM1637 — дисплей с разделителем типа «двоеточие»

Оба типа этих модулей, подключаются к платам Arduino по двум проводам. Мы начнем пожалуй с модуля у которого есть разделитель «двоеточие». Подключать модуль можно к любым пинам на плате Arduino , кроме тех что являются аналоговыми(помеченные как А0..А7 ), мы же подключим модуль по следующей таблице:

  • Arduino Nano [PIN 5V] — TM1637 Module[PIN 5V]
  • Arduino Nano [PIN GND] — TM1637 Module[PIN GND]
  • Arduino Nano [PIN 3] — TM1637 Module[PIN CLK]
  • Arduino Nano [PIN 2] — TM1637 Module[PIN DIO]

Библиотека TM1637.h содержит три примера работы с модулем, поэтому можно кое что почерпнуть оттуда для обзора, но не обязательно заливать примеры скетчей сразу в плату. Для начала — просто возьмем необходимые куски кода что бы испытать модуль. Простой скетч, показывающий числа от 1-го до 4-х поразрядно, и включение/выключение часового разделителя через каждую секунду:

Результат работы скетча можно видеть на двух фото ниже:

В самом начале скетча, объявляется переменная DispMSG[], представляющая собой массив из 4-х элементов типа uint8_t. Функция display() класса tm1637 выводит каждый элемент массива DispMSG[] на дисплей, при чем вывод значений осуществляется поразрядно начиная с крайнего левого и заканчивая крайним правым разрядом. Чтобы было легче понять как работает функция display(), можно изменить код в функции loop() на следующий:

Как видно из листинга скетча, такая запись кода программы делает его более доступным для понимания, но в то же время код сильно разрастается. Для рассматриваемого нами дисплея с разделителем типа двоеточие всё же подойдет предыдущий вариант( Скетч №1 ), потому что в нём отсутствует разделитель десятичная точка в каждом разряде( по умолчанию является сегментом DP ). Функция point() управляет зажиганием сегмента DP , в рассматриваемом нами варианте дисплея сегмент DP это и есть разделитель двоеточие между вторым и третьим разрядом. В качестве параметра, функция point( ) принимает значение типа booltrue включает сегмент, false выключает. Что же. Идем дальше.

  • Подключение модуля TM1637 — дисплей с десятичной точкой в каждом разряде.
Читать еще:  Стол со светодиодной информативной подсветкой + бинарные часы

Модуль с дисплеем такого типа подключается к плате Arduino таким же образом как и предыдущий, потому что пины подключения те же самые. Также выводятся на дисплей цифры, остаётся понять — как зажечь десятичную точку для каждого разряда? В этом нам может помочь вышеописанный вариант скетча( Скетч №2 ), нужно только немного его изменить. А именно — если мы хотим зажечь десятичную точ ку в определённом разряде, то придётся перед выводом каждого значения в свой разряд, вызывать функцию point() , тем самым явно задавать в каком из разрядов должна зажечься десятичная точка . Вот как это выглядит, изменяем код только в функции loop() :

Результат работы скетча можно видеть на следующем изображении:

Итак, как видно из скетча №3 зажиганием десятичной точки управляет функция point() , вызванная явно перед выводом значения в определённый разряд функцией display() . В общем то здесь нет ничего сложного, остаётся только разобраться — как генерировать пользовательские символы для модулей дисплея на базе драйвера TM1637 .

  • Модуль дисплея на базе драйвера TM1637 — вывод сгенерированных пользовательских символов на дисплей.

К сожалению, разработчик библиотеки TM1637.h не предоставил нам необходимых функций для кодирования пользовательских символов. Поэтому мы решили этот вопрос по своему, так сказать сами разработали один из вариантов решения. В библиотеке есть файл — TM1637.CPP , именно он нам и нужен. Сразу же предупреждаем — перед внесением изменений желательно создать резервную копию этого файла. Сам файл лежит по следующему пути:

C:Users*Имя вашего компьютера либо учетной записи*DocumentsArduinolibrariestm1637

Открываем файл TM1637.CPP текстовым редактором и ищем вот эту строку:

static int8_t TubeTab[] =

В этом массиве хранятся байты, в которых закодированы значения, зажигающие нужные сегменты в разрядах дисплея. Всего в массиве лежит 16 байт кодирующих 16 цифр в шестнадцатиричной системе счисления — от 0 до F . Массив не имеет фиксированного размера, мы можем добавить в этот массив свои значения( байты ) которыми будут закодированы наши символы. Итак, чтобы было нагляднее приведём ниже таблицу с закодированными значениями символов включая имеющийся массив TubeTab[] . Некоторые символы можно отобразить на дисплее используя имеющиеся байты кодирующие цифры шестнадцатиричной системы счисления, такие как 0, 1, 5, A, B, C, D, E, F . Но как говорится обо всём этом расскажет таблица:

После добавления элементов, массив TubeTab[] должен выглядеть примерно так:

Теперь используя дополненный массив TubeTab[], можно отображать нужные нам символы на дисплее. Чтобы использовать тот или иной символ из таблицы, достаточно всего лишь использовать индекс его элемента в массиве TubeTab[]. В качестве примера нам послужит скетч, который выводит несколько слов( SEGA, LEGO, HEAT, init, StOP ) по порядку через каждые 2 секунды. Изменим предыдущий скетч, добавив в него массивы со словами:

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

Если к примеру захочется закодировать свой символ, то можно использовать следующую таблицу:

После кодирования сегментов, установив нужные биты в байте, для сокращения записи можно перевести байт из двоичного в шестнадцатиричный формат, как — b00011110 -> 0x1E. Ну и в конце конечно мы предлагаем посмотреть видеоролик, с обзором работы вышеописанных скетчей на дисплеях с драйвером TM1637. Приятного просмотра .

Урок 23. Подключение сегментного дисплея TM1637 к Arduino.

Сегодня в уроке подключим семисегментный индикатор TM1637 к Arduino. Установим библиотеку TM1637.h и научимся выводить на дисплей цифры и некоторые символы.

Как устроен и из чего состоит модуль TM1637.

Характеристики Индикатора на TM1637:
• Напряжение питание: 5,5В
• Потребляемый ток 0.2 — 80мА (в зависимости от горящих сегментов)
• Градаций яркости индикаторов — 8
• Размеры платы: 42×24мм
• Двух проводной последовательный интерфейс (CLK, DIO).

Фото модуля от магазина RobotDyn фронтальный вид.

Фото модуля от магазина RobotDyn вид с тыльной стороны.

Этот модуль собран на драйвере TM1637.
• Есть модули красного, синего, зелёного, белого цвета.
• Размеры 0,36” и 0,56”

В уроке будем использовать модуль TM1637 0,56”, зеленого цвета.


Возможности модуля TM1637:
• Зажигать сразу все знаки или по одному сегменту или символу,
• Выводить цифры от 0 до 9 и некоторые буквы. Смотри ниже.
• Цифры могут выводиться как с нулями слева, так и без них,
• 8 градаций изменения яркости.
• Вывод символа в определённую позицию (ячейку).

Отличие модуля индикатора на TM1637 от других – это его компактность, он не дорогой, и управление всего по двум проводам.

Подключение дисплея TM1637 к Arduino

Подключить дисплей можно к любым цифровым пинам Ардуино. В нашем случае будем подключать к Arduino NANO по схеме.

Arduino Nano [PIN 5V] — TM1637 Module[PIN 5V]

Arduino Nano [PIN GND] — TM1637 Module[PIN GND]

Arduino Nano [PIN 2] — TM1637 Module[PIN DIO]

Arduino Nano [PIN 3] — TM1637 Module[PIN CLK]

Установка и настройка библиотеки TM1637.h.

Установить библиотеку TM1637.h можно из менеджера библиотек. Для этого откроем Arduino IDE, перейдем в раздел Скетч-> Подключить библиотеку -> Управление библиотеками.

Затем в строке поиска наберем TM1637. И установим библиотеку Grove 4-Digit Display.

Вы также можете скачать библиотеку TM1637 внизу урока, в разделе «материалы для скачивания».

Настройка библиотеки TM1637 для вывода дополнительных символов.

Для реализации простых проектов, таких как часы, индикаторы и счетчики, этого набора символов достаточно. Я реализовывал часы с выводом температуры и влажности: Arduino часы. Видео 2. Подключаем к Arduino TM1637 и датчик DHT11.

Для отображения температуры использовал символ «С» номер для вывода на индикатор 12и для отображения влажности использовал символ «F» номер для вывода на дисплей 15.

Но для некоторых проектов на Arduino не достаточно данного набора символов. Расширить его достаточно легко, для этого в файле TM1637.cpp библиотеки находим массив TubeTab[] и добавляем нужные коды символов.

Список добавленных символов в файле TM1637.cpp, библиотеки TM1637.

После чего данные символы можно использовать в своих проектах.

Если захочется закодировать свой символ, то можно использовать следующую таблицу:

После кодирования сегментов, установив нужные биты в байте, для сокращения записи можно перевести байт из двоичного в шестнадцатиричный формат, как — b00011110 -> 0x1E.

Пример кода для вывода информации на семисегментный индикатор с драйвером TM1637.

Пример 1. Вывод времени с мигающим двоеточием.

В данном примере выведем 4 цифры на индикатор TM1637, и научимся мигать двоеточием каждую секунду. Данный пример поможет вывести любую цифровую информацию: время, счётчики, показания с датчиков.

Пример 2. Вывод слов на модуль TM1637.

Дополнительные символы добавили в библиотеку, сейчас осталось научиться их выводить. Создадим массивы необходимых слов, после чего по очереди выведем их на дисплей. Данные слова можно использовать при выводе статуса работы устройств. Это пример слов. Вы можете составлять свои слова в соответствии с вашей задачей.

Пример 3. Выводданных с датчиком с символами.

Мы научились выводить цифры и слова на дисплей. Как же сделать динамическое изменение значений на дисплее. При этом добавлять символы для индикации различных данных.

Тут поможет нам посимвольный вывод данных на дисплей. Например, запись tm1637.display(0, 5) выводит первый символ на дисплей 5. Аналогично выводятся остальные 3 символа.

Для разделения числа на десятки и единицы, для нахождения единиц нужно найти остаток от деления на 10, и для получения десяток нужно число делить на 10.

И после числового значения выведем символ, например, для температуры символ «С».

Пример применим при выводе даты, времени и показаний с датчиков.

Появились вопросы или предложения не стесняйся, пиши в комментарии!

Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

Всем Пока-Пока.

И до встречи в следующем уроке

Понравилась статья? Поделитесь ею с друзьями:

Ссылка на основную публикацию
Статьи c упоминанием слов:
Adblock
detector