Модуль клавиатуры и светодиодной индикации TM1638 LED&KEY

Код:00667
Артикул:TM1638-LED&KEY
В наличии:есть
450 руб
1
Модуль клавиатуры и светодиодной индикации TM1638 LED&KEY
 
Устройство ввода-вывода данных для совместной работы с микроконтроллером. Обмен данных происходит по оригинальной шине из трех сигнальных линий близкой по свойствам к шине SPI. Строка семисегментных индикаторов позволяет отображать числа, некоторые буквы и простые символы.
 

 

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

 
8 кнопок клавиатуры позволяют удовлетворить требования к управлению широким кругом приборов. Модуль клавиатуры и светодиодной индикации TM1638 LED&KEY определяет нажатие нескольких кнопок одновременно. Применение модуля позволяет достаточно просто решить конструкцию и электронику передней панели прибора. В отличии от ЖКИ индикаторов светодиодные нечувствительны к работе при температурах ниже +5 °C, что повышает надежность средства отображения. Светодиодные индикаторы особенно уместны при работе в плохо освещаемых помещениях и в ночное время. Использование датчика освещенности позволяет автоматически регулировать яркость свечения светодиодного индикатора.
Кроме непосредственного назначения модуль клавиатуры и светодиодной индикации TM1638 LED&KEY позволяет изучить работу микросхемы TM1638 для применения в собственных разработках. Уместно использование в качестве наглядного пособия при изучении принципов построения и работы индикаторов, клавиатур и освоении программирования МК.
 

 
Основные компоненты
 
Четырехразрядный семисегментный индикатор 3461AS.
 
Содержит в каждом разряде кроме сегментов отображения символа точку отделяющую целую часть числа от дробной. Отрицательные электроды светодиодов сегментов объединены отдельно в каждом разряде, выводы 6, 8, 9, 12.
 

 
Подключение нескольких разрядов семисегментного индикатора требует много соединений, что затруднительно. Если каждый сегмент потребляет ток 10 мА, то общее потребление становится заметным. Для удобства применения выводы одноименных сегментов всех разрядов объединяют как показано на схеме 3461AS и применяют управление индикатором получившее название динамическая индикация. Управление состоит в следующем. Быстро кратковременно поочередно с помощью коммутации общих электродов разрядов в нашем случае выводы 6, 8, 9, 12 включаются разряды индикатора. Одновременно с включением одного разряда включают сегменты соответствующие знаку, отображаемому в этом разряде. Инерционность зрения позволяет воспринимать переключающиеся разряды как одно изображение на всем индикаторе. В результате использования динамического принципа управления уменьшается требуемое количество проводников, происходит многократная экономия энергии, так как в один момент времени нужен ток для питания одного разряда. Динамическая индикация имеет недостатки – большой уровень помех, излучаемых проводниками индикатора и наводимый шум в цепях питания прибора. Если индикатор используется в радиоприемниках, измерительных приборах, то для преодоления указанных недостатков индикатор питают от отдельного блока питания небольшой мощности с гальванической развязкой от остальных цепей питания прибора. На шине данных также применяют цепи обеспечивающие гальваническую развязку.
 
Микросхема TM1638.
 
Расположение выводов микросхемы TM1638.
Управление индикаторами и определение нажатия кнопок выполняет микросхема TM1638 китайской фирмы Titan Micro Electronics. Составленное производителем описание микросхемы находится в архиве, ссылка на архив в конце страницы. TM1638 принимает от МК и передает данные по собственному последовательному интерфейсу из трех сигналов, близкому к интерфейсу SPI. Отличие от SPI состоит в объединении в одну линию двух линий приема и передачи. Названия сигналов отличные от принятых в SPI, но они хорошо узнаются.
 



Сигналы интерфейса TM1638.
 
STB – разрешение работы микросхемы при низком уровне сигнала. После переключения в активный уровень первый принимаемый байт воспринимается как команда. Часто для обозначения этого сигнала используют слова строб, стробирующий.
CLK – тактовый сигнал при передаче данных в микросхему. Данные фиксируются по фронту сигнала. Источником сигнала CLK служит внешнее устройство.
DIO – данные. Передача синхронизируется фронтом сигнала CLK.
Микросхема содержит внутренние регистры хранения состояния светодиодов и кнопок. Запись и чтение регистров происходит по командам приходящим по интерфейсу. После записи регистров микросхема автоматически формирует сигналы управления индикаторами и опроса кнопок.
 
Назначение выводов микросхемы TM1638.
Сигнал Назначение
К1 – К3 Входы для соединения с линиями клавиатуры. К каждой линии можно подключить до восьми кнопок.
SEG1/KS1 – SEG8/KS8 Выходы имеют две функции. Первая – подключение к сегментам индикаторов и к светодиодам. Вторая – подача сигналов опроса на кнопки клавиатуры. При нажатой кнопке соответствующий кнопке высокий уровень от одной из линий KS (Key Scan) передается на один из входов К и сохраняется в регистре состояния клавиатуры. Регистр читается микроконтроллером через интерфейс.
SEG9 – SEG10 Выходы управления дополнительными светодиодами.
GRID1 – GRID8 Выходы управления разрядами индикатора. GRID соединяется с общим электродом разряда индикатора. Возможно подключение к положительному общему выводу индикатора или к отрицательному.
VCC Питание.
GND Общий провод.
 

















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

 
К тем же линиям включения сегментов подсоединены кнопки S1 – S8. Микросхема учитывает на какой линии SEG/KS была сформирована лог. 1 и если в это время нажата кнопка, то на линии К обнаруживается высокий уровень сигнала. Результат сканирования записывается в регистр состояния клавиатуры.
Микросхема воспринимает в качестве команды первый переданный байт после перехода сигнала интерфейса на лини STB в низкий уровень. Байт команды содержит параметры, за ним могут передаваться аргументы. Байты передаются с младшего бита.
 

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


Сигналы интерфейса при записи и чтении.
 
Передача данных прерывается при лог. 1 на линии STB. Каждая отправленная команда должна начинаться с лог. 0 сигнала STB и заканчиваться переводом в лог. 1.
 
Микросхема TM1638 имеет 16 регистров индикатора – 16 байт, где каждый регистр отвечает за отображение одного символа. Есть доступный для чтения регистр клавиатуры 32 бит и регистр настроек.
 
TM1638 поддерживает три типа команд.
  1. Режим автоматического увеличения адреса – команда 0x4X.
  2. Набор команд управления дисплеем 0x8X – управление включением, выключением, яркостью. Младшие биты в команде – параметры.
  3. Установка адреса регистра символа происходит при передаче команды 0xCX + адрес от 0 до 15. Вторым байтом следуют данные.
 


Тип команды определяют биты B7 и B6 командного байта.
 
Запись в регистры символов проводится в двух режимах адресации. Один из режимов – режим фиксированного адреса. Для установки такого режима используется команда 0x44. При этом каждый раз сначала передается адрес ячейки памяти, потом байт данных. Режим автоматического увеличения адреса применяется для увеличения скорости работы – команда 0x40. Сначала передается адрес ячейки памяти, потом несколько байт данных до 16. Каждый следующий байт заносится в следующий регистр. Запись в память символов состоит минимум из двух байт. Первый байт – адрес записи или адрес начала записи. Для чтения состояния клавиатуры следует отправить в микросхему команду 0x42. После этого прочитать 32 бит данных.
 
Команды управления типа 0x8X используются для установки режима отображения информации путем записи в регистр состояния индикатора. Управление режимом работы индикатора производится с помощью команды 0x8X содержащей параметры указываемые младшими битами в байте команды.
 
Формат команд управления
 
Команда Описание
B7 B6 B5 B4 B3 B2 B1 B0
0 1 0     0 0 Запись данных в регистр состояния индикатора. Данные следуют за командой без сброса сигнала STB.
0 1     1 0 Команда чтения регистра состояния клавиатуры. Данные выдаются микросхемой по фронту сигнала CLK.
0 1   0     Включение режима автоувеличения адресов. При этом микросхема автоматически увеличивает адрес доступного регистра после обращения.
0 1   1     Включение режима фиксированных адресов. Адрес доступного регистра устанавливается по специальной команде и не изменяется.
0 1 0       Рабочий режим.
0 1 1       Тестовый режим.
1 0   x x x Установка ширины импульса яркости свечения. XXX – двоичный код яркости.
1 0 0       Выключение режима воспроизведения.
1 0 1       Включение режима воспроизведения.
1 1 x x x x Установка адреса регистра индикации. XXXX – двоичный код адреса (от 0x0 до 0xF). Регистры образуют 16-ти разрядные пары для хранения разрядов одного сегмента (0x0-0x1; 0x2-0x3 и т.д.), Например, регистр по адресу 0x0 содержит разряды SEG1..SEG8, а регистр 0x1 содержит разряды SEG9..SEG10 для сегмента GRID1. Регистры 0x2 и 0x3 содержат аналогичные разряды для сегмента GRID2 и т.д.
 
Пустые позиции в столбцах B0..B7 указывают на возможность сочетания нескольких действий в одной команде. Другие сочетания разрядов игнорируются.
 
Рассмотрим управление режимом индикатора с помощью команды 0x8X. Биты В7…В4 устанавливают значение 8 в старшей половине байта.
 


Разряды параметров команды 0x8X и их функции.
 
Бит В3 используется чтобы включить дисплей при В3=1 или выключить при В3=0.
В2, В1 и В0 устанавливают яркость свечения путем изменения скважности импульсов динамической индикации. Скважность изменяется от 1/16 при значении 0 и до 14/16 при значении 7 в битах В2, В1 и В0 – наибольшая яркость. Для максимальной яркости свечения индикатора отправляем команду 0b10001111 (0x8F). Для минимальной интенсивности свечения отправляем команду 0b10001000 (0x88).
 
Автоувеличение адреса – команда 0x4X. Биты В7…В4 устанавливают значение 4 в старшей половине байта.
Команды этого типа могут выполнять ряд функций. Мы можем установить режим записи или выполнять запись данных в регистры или выполнить чтение данных сканирования клавиатуры. Можем установить адрес, добавить режим автоматического приращения адреса назначения в процессе записи данных или указать фиксированный адрес назначения. Также в тестовом режиме возможно устанавливать функции.
 


Параметры команды 0x4X.
 
Бит В3 используется для перевода в тестовый режим. В нормальном режиме В3=0.
В2 устанавливает режим адресации. В2=0 адрес автоматически увеличивается на 1. В2=1 – фиксированный адрес.
Команда 0x44 устанавливает режим фиксированного адреса, т. е. команда отменяет инкрементацию адреса, если она была включена ранее.
B1 и В0 устанавливают режим чтения или записи. Когда B1, В0 равны 0 действует режим записи данных в микросхему. При B1=1 и В0=0 происходит чтение регистра клавиатуры – команда 0x42 (0b01000010).
 
Команда фиксированного адреса 0xCX. Биты В7…В4 устанавливают значение С в старшей половине байта.
Биты В3, В2, В1 и В0 устанавливают адрес регистра разряда индикатора от 0x00 до 0x0F. Данные этих регистров используется для управления сегментами разрядов.
 


Параметры команды 0xCX.
 
Попробуем разобраться на примерах.
Допустим, мы хотим отправить значение 0x45 чтобы оно оказалось в регистре индикатора по адресу 0х02. Установим режим фиксированного адреса регистра индикатора. Мы должны отправить следующую последовательность байт:
 
команда 0x44 (0b01000100) устанавливает режим фиксированного адреса,
команда 0xC2 (0b11000010) адрес регистра 2 отвечающего за разряд индикатора,
значение 0x45 отправляется и записывается в указанный в предыдущей команде регистр.
 
Если бы мы хотели отправить значения 0x01, 0х02 и 0x03 в регистры 0x00, 0x01 и 0x02 для отображения на индикаторе, то здесь уместно использовать автоматическое увеличение адреса. Тогда следует отправить команду 0x40 (0b01000000), а затем команду 0xc0 и далее 0x01, 0х02 и 0x03.
Регистры позволяют управлять по отдельности каждым сегментом индикатора. Сопоставление каждого сегмента регистрам можно увидеть в таблице ниже.
 


Адресация регистров в соответствии с линиями управления индикатором.
 
Сегментам первого разряда управляемым выходами микросхемы SEG1-SEG8 в которые входят 7 сегментов символа и десятичная точка, где разряд включается с помощью линии GRID1 сопоставляется регистр 0 в котором рассматриваются две половины: 00HL младшие 4 бита и 00HU старшие 4 бита. Оставшимся двум сегментам подключаемым к выводам SEG9 и SEG10 сопоставляются младшие 2 бита регистра 01HL. Таким образом, с помощью микросхемы можно управлять индикаторами имеющими от одного до десяти сегментов. Остальные биты В2 – B7 регистра 1 не используются. Такой принцип повторяется при управлении всеми разрядами, общие выводы которых соединены с контактами МС GRID1 – GRID8. Это отображено в строках таблицы.
К выводам SEG9 и SEG10 часто подключают одиночные светодиоды одноцветные или двухцветные.
 
Допустим требуется отобразить 0 в первом разряде. Для этого необходимо включить сегменты SEG1 (а), SEG2 (b), SEG3 (с), SEG4 (d), SEG5 (е) и SEG6 (f). Делаем это путем загрузки в регистр 0 значения 0b00111111 (0x3F). При отображении 0 во втором разряде записываем в регистр 2 значение 0b00111111 (0x3F) и так далее ориентируясь по таблице.
 


Наименования сегментов и отображение цифр.
 
Для чтения состояния кнопок передается команда 0x42 (0b01000010). За тем следует принять 4 байта информации о клавиатуре. Чтение состояния клавиатуры выполняется из регистра KS. Максимум могут быть опрошены 24 кнопки и считано их состояние. Такая клавиатура организуется в виде матрицы формата 3×8.
 
Назначение бит регистра KS. Каждая из трех линий K1, K2, K3 содержит по 8 кнопок KS1 – KS8.
 
B0 B1 B2 B3 B4 B5 B6 B7  
K3 K2 K1
  •  
K3 K2 K1 -
KS1 KS2 Байт 1
KS3 KS4 Байт 2
KS5 KS6 Байт 3
KS7 KS8 Байт 4
 
 
Например, для определения состояния кнопки KS8 на линии К2 мы читаем бит В5 из BYTE4, состояние кнопки KS1 на линии К3 определяем по биту В0 из BYTE1.
 
Характеристики модуля TM1638 LED&KEY
 
Питание
            напряжение 5 В ± 10%
            максимальный ток 130 мА
Предельная частота сигнала синхронизации 450 КГц
Температура окружающего воздуха при работе -15…60 °C
 


 
Схема модуля TM1638LED&KEY
 

 
8 светодиодов подключены к линии SEG9 и контактам управления разрядами индикатора GRID1 – GRID8. Светодиоды LED1 – LED8 работают когда программным путем включается линия управления девятым сегментом. Управление каждым светодиодом в отдельности происходит по линиям управления разрядами индикатора GR1 – GR8. Такое подключение позволяет использовать для каждого светодиода отдельный регистр. Это позволяет записывать данные по адресам, которым соответствуют светодиоды. Все кнопки подключены к одной линии К3 и образуют матрицу 8х1.
 
Контакты соединителя TM1638LED&KEY
 
Штыревой соединитель имеет 5 контактов.
 
VCC – питание
GND – общий провод
STB – сигнал стробирования
CLK – тактовый сигнал
DIO – двунаправленная линия данных
 


Соединение интерфейса модуля TM1638LED&KEY с Arduino UNO. Приводим наиболее часто используемое назначение контактов в программах использующих библиотеку Ricardo Batista.
 
Arduino UNO             TM1638LED&KEY
 
            8                                 DIO
            9                                 CLK
            10                               STB
 
Подключение TM1638 к шине SPI.
 


 
Особенности модуля TM1638LED&KEY
 
Включение и установка максимальной яркости выполняется командой 0x8F. Команда не имеет аргументов.
Для записи байта по некоторому адресу подается команда 010000100 (0x44), а затем адрес в виде 1100AAAA, здесь AAAA биты указывающие куда записать. Затем передается записываемое значение. Чтобы записать константу 0x45 в ячейку с адресом 0x0A следует отправить следующую последовательность байт: 0x44 0xCA 0x45.
Для записи массива данных в ячейки, адреса которых следуют друг за другом следует послать команду 01000000 (0x40), затем начальный адрес (опять же в виде 1100AAAA). Далее следуют значения, которые мы хотим записать. У нас есть 4 бита для выбора адреса. Если вы будете продолжать записывать после достижения адреса 0x0F, то запись будет продолжена снова с адреса 0x00.
 
Клавиатура
 
Чтения кнопки происходит после отправки команды 010000010 (0x42). После этого разряд порта МК соединенный с линией DIO следует перевести в режим входа и прочитать 4 байта данных. Определить состояние кнопок при приеме четырехбайтной посылки можно руководствуясь таблицей соответствия кнопок битам в посылке.
 
Кнопка Номер байта в посылке Регистр микросхемы Бит в байте
S1 1 KS1 B0
S2 2 KS3 B0
S3 3 KS5 B0
S4 4 KS7 B0
S5 1 KS2 B4
S6 2 KS4 B4
S7 3 KS6 B4
S8 4 KS8 B4
 
Индикация
 
Каждым светодиодом или разрядом индикатора можно управлять записывая константу по его адресу. Например, чтобы включить первый светодиод мы должны записать 1 по адресу 0x01.
 
Адреса средств индикации.
 
Адрес Описание
0x00 (0000) Разряд 1
0x01 (0001) Светодиод LED 1
0x02 (0010) Разряд 2
0x03 (0011) Светодиод LED 2
0x04 (0100) Разряд 3
0x05 (0101) Светодиод LED 3
0x06 (0110) Разряд 4
0x07 (0111) Светодиод LED 4
0x08 (1000) Разряд 5
0x09 (2001) Светодиод LED 5
0x0a (1010) Разряд 6
0x0b (1011) Светодиод LED 6
0x0c (1100) Разряд 7
0x0d (1101) Светодиод LED 7
0x0e (1110) Разряд 8
0x0f (1111) Светодиод LED 8
 
Программирование модуля TM1638LED&KEY
 
Atmel язык С
 
Базовая программа на языке С для TM1638 написана используя фирменное программное обеспечение ф. Atmel. Протестирована на микроконтроллере ATmega328 используя Arduino NANO.
Скачать файлы проекта и пример выполнения .
 
Arduino IDE
 
Для работы TM1638LED&KEY с модулями микроконтроллеров ардуино размещено в сети несколько программных библиотек. Одна из них написана Ricardo Batista. Используя библиотеки программирование модуля TM1638LED&KEY проще, быстрее, программа будет содержать меньше ошибок. Для ознакомления скачайте и установите библиотеку TM1638.
 
Библиотека обладает следующими возможностями:
- Поддержка микросхем TM1638 и TM1640;
- Поддержка модуля TM1638 общий анод;
- Методы отображения чисел в десятичной, шестнадцатеричной и двоичной системах;
- Поддержка нескольких модулей;
- Чтение одновременных нажатий кнопок;
- Поддержка гашения разрядов дисплея и светодиодов;
- Поддержка написания текста;
- Поддержка индикации в перевернутом положении.
 
В начале программы на языке Arduino IDE записывается команда активации программной библиотеки:
 
            #include // позволяет пользоваться функциями библиотеки TM1638.
 
Возможна работа с одним модулем Arduino нескольких модулей TM1638LED&KEY. В программе для каждого модуля записывается своя строка:
 
            TM1638 module(x, y, z);
 
Здесь:
х номер контакта для сигнала DIO,
у номер контакта для сигнала CLK,
z номер контакта для сигнала STB.
 
Если у вас один модуль клавиатуры и светодиодной индикации TM1638 LED&KEY подключенный к контактам 8, 7, 6, то команда будет иметь вид:
 
            TM1638 module(8, 7, 6);
 
Если у вас есть два модуля, то стробирующий сигнал для одного будет приходить от контакта 6, а для другого от контакта 5. Остальные контакты поименно объединяются. В программе записываются две команды:
 
            TM1638 module(8, 7, 6);
            TM1638 module(8, 7, 5);
 
Очистка семисегментного индикатора:
 
            module.clearDisplay();// команда не влияет на светодиоды.
 
Инвертирование свечения индикатора и светодиодов:
 
            module.setupDisplay(true, 7); // where 7 is intensity (from 0~7).
 
Функция отображения десятичных чисел:
 
            module.setDisplayToDecNumber(a,b,false);
 
где:
а – целое число,
b позиция десятичной точки (0 – нет, 1 – цифра 8, 2 – цифра 7, 4 – цифра 6, 8 – цифра 4 и т.д.),
параметр истина/ложь – включать или нет незначащие нули.
 
Предусмотрена возможность отдельной адресации каждого сегмента каждой цифры. Рассмотрим содержимое этого массива:
 
            byte values[] = { 1, 2, 4, 8, 16, 32, 64, 128 };
 
каждый элемент массива соответствует разряду от 1 до 8. Значение каждого элемента массива определяет, какой сегмент цифры включается. Сегментам a–f соответствуют значения 1, 2, 4, 8, 16, 32, 64, 128. Таким образом, результатом использования приведенного выше массива в функции:
 
            module.setDisplay(values);
 
будет:
 

 
Можно комбинировать значения для каждой цифры, чтобы создать свой собственный знак, символ и прочее. Использованием следующего массива:
 
            byte values[] = { 99,99,99,99,99,99,99,99 }
 
даст результат:
 

 
Значения кнопок возвращаются как значение байта из функции:
 
            module.getButtons();
 
Восемь кнопок, каждая несет 1 бит информации, но программно это преобразуется в особый порядок выходного значения. Кнопка cлева возвращает единицу, а справа возвращает 128. Функция может также возвращать результаты одновременных нажатий. Совмещение нажатий кнопок 1 и 8 даст число 129. Следующая программа отображает на индикаторе значение из функции нажатия кнопок. Загрузите в Arduino UNO следующую программу и соедините с модулем индикации как показано выше в разделе контакты соединителя TM1638LED&KEY.
 
#include
TM1638 module(8, 9, 10);
byte buttons;
void setup(){}
void loop()
{
 buttons=module.getButtons();
 module.setDisplayToDecNumber(buttons,0,false);
}
 
В следующей программе используются функции отображения.
 
            setDisplayToDecNumber – отображение десятичных чисел
            setDisplayToString – отображение текста
 
#include
TM1638 module(8, 9, 10);
unsigned long a=1;
 
void setup()
{
}
 
void loop()
{
for (a=1; a<=100; a++)
{
module.setDisplayToDecNumber(a,0,false);
delay(100);
}
module.setDisplayToString("Complete");
delay(1000);
}
 
 
 
Применение TM1638 совместно с STM32F4
 
Часы на TM1638, форум
 
Описание микросхемы TM1638 на английском, версия 1.3. Скачать

 
 
 

 
Вверх