Код товара: TXR19010010108
TM1638 формирует строку символов с помощью динамической индикации. Когда на линии SEG установлен высокий логический уровень и вывод общего контакта разряда индикатора GRID соединен внутренними цепями микросхемы с общим проводом, то светится требуемый сегмент.
К тем же линиям включения сегментов подсоединены кнопки S1 – S8. Микросхема учитывает на какой линии SEG/KS была сформирована лог. 1 и если в это время нажата кнопка, то на линии К обнаруживается высокий уровень сигнала. Результат сканирования записывается в регистр состояния клавиатуры.
Микросхема воспринимает в качестве команды первый переданный байт после перехода сигнала интерфейса на лини STB в низкий уровень. Байт команды содержит параметры, за ним могут передаваться аргументы. Байты передаются с младшего бита.
При чтении данных от микросхемы информация на линии DIO читается по нарастающему фронту тактового сигнала. Последующие данные передаются или читаются по фронту сигнала CLK без перевода STB в низкий уровень.
Сигналы интерфейса при записи и чтении.
Передача данных прерывается при лог. 1 на линии STB. Каждая отправленная команда должна начинаться с лог. 0 сигнала STB и заканчиваться переводом в лог. 1.
Микросхема TM1638 имеет 16 регистров индикатора – 16 байт, где каждый регистр отвечает за отображение одного символа. Есть доступный для чтения регистр клавиатуры 32 бит и регистр настроек.
TM1638 поддерживает три типа команд.
Тип команды определяют биты B7 и B6 командного байта.
Запись в регистры символов проводится в двух режимах адресации. Один из режимов – режим фиксированного адреса. Для установки такого режима используется команда 0x44. При этом каждый раз сначала передается адрес ячейки памяти, потом байт данных. Режим автоматического увеличения адреса применяется для увеличения скорости работы – команда 0x40. Сначала передается адрес ячейки памяти, потом несколько байт данных до 16. Каждый следующий байт заносится в следующий регистр. Запись в память символов состоит минимум из двух байт. Первый байт – адрес записи или адрес начала записи. Для чтения состояния клавиатуры следует отправить в микросхему команду 0x42. После этого прочитать 32 бит данных.
Команды управления типа 0x8X используются для установки режима отображения информации путем записи в регистр состояния индикатора. Управление режимом работы индикатора производится с помощью команды 0x8X содержащей параметры указываемые младшими битами в байте команды.
Формат команд управления
Пустые позиции в столбцах 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.
Например, для определения состояния кнопки KS8 на линии К2 мы читаем бит В5 из BYTE4, состояние кнопки KS1 на линии К3 определяем по биту В0 из BYTE1.
Характеристики модуля TM1638 LED&KEY
Питание
напряжение 5 В ± 10%
максимальный ток 130 мА
Предельная частота сигнала синхронизации 450 КГц
Температура окружающего вoздyxa при работе -15…60 °C
Штыревой соединитель имеет 5 контактов.
VCC – питание
GND – общий провод
STB – сигнал стробирования
CLK – тактовый сигнал
DIO – двунаправленная линия данных
Соединение интерфейса модуля TM1638LED&KEY с Arduino UNO. Приводим наиболее часто используемое назначение контактов в программах использующих библиотеку Ricardo Batista.
Arduino UNO TM1638LED&KEY
8 DIO
9 CLK
10 STB
Подключение TM1638 к шине SPI.
Особенности модуля TM1638
Включение и установка максимальной яркости выполняется командой 0x8F. Команда не имеет аргументов.
Для записи байта по некоторому адресу подается команда 010000100 (0x44), а затем адрес в виде 1100AAAA, здесь AAAA биты указывающие куда записать. Затем передается записываемое значение. Чтобы записать константу 0x45 в ячейку с адресом 0x0A следует отправить следующую последовательность байт: 0x44 0xCA 0x45.
Для записи массива данных в ячейки, адреса которых следуют друг за другом следует послать команду 01000000 (0x40), затем начальный адрес (опять же в виде 1100AAAA). Далее следуют значения, которые мы хотим записать. У нас есть 4 бита для выбора адреса. Если вы будете продолжать записывать после достижения адреса 0x0F, то запись будет продолжена снова с адреса 0x00.
Клавиатура
Чтения кнопки происходит после отправки команды 010000010 (0x42). После этого разряд порта МК соединенный с линией DIO следует перевести в режим входа и прочитать 4 байта данных. Определить состояние кнопок при приеме четырехбайтной посылки можно руководствуясь таблицей соответствия кнопок битам в посылке.
Индикация
Каждым светодиодом или разрядом индикатора можно управлять записывая константу по его адресу. Например, чтобы включить первый светодиод мы должны записать 1 по адресу 0x01.
Адреса средств индикации.
Программирование модуля 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);
}
Модуль RC058. QYF-TM1638. Модуль клавиатуры и светодиодной индикации
Частные лица могут оформить заказ на сайте или по телефону: +7 495 11 86 086. При заказе называйте код товара: TXR19010010108
Юридические лица получат счёт по запросу на наш e-mail. Присылайте ваши реквизиты, наши коды товаров и их количества.
Стоимость доставки по вашей просьбе можем включить в стоимость товаров. Работаем без НДС.
Юридические лица получат счёт по запросу на наш e-mail. Присылайте ваши реквизиты, наши коды товаров и их количества.
Стоимость доставки по вашей просьбе можем включить в стоимость товаров. Работаем без НДС.
|
|
Модуль клавиатуры и светодиодной индикации QYF-TM1638
Устройство ввода-вывода данных для совместной работы с микроконтроллером. Обмен данных происходит по оригинальной шине из трех сигнальных линий близкой по свойствам к шине SPI. Строка семисегментных индикаторов позволяет отображать числа, некоторые буквы и простые символы.
Регулировка яркости выполняется программным путем передачей команд по шине данных. Можно гасить отдельные разряды. Светодиоды образуют линейную шкалу, позволяющую наглядно отображать измеряемую величину. Есть возможность программно регулировать яркость свечения светодиодов. Многоразрядный индикатор позволяет выводить данные одновременно о нескольких величинах. Можно индицировать значение одного параметра и тут же показывать на линейной шкале долю величины от максимального значения, что более наглядно.
8 кнопок клавиатуры позволяют удовлетворить требования к управлению широким кругом приборов. Модуль клавиатуры и светодиодной индикации QYF-TM1638 определяет нажатие нескольких кнопок одновременно. Применение модуля позволяет достаточно просто решить конструкцию и электронику передней панели прибора. В отличии от ЖКИ индикаторов светодиодные нечувствительны к работе при температурах ниже +5 °C, что повышает надежность средства отображения. Светодиодные индикаторы особенно уместны при работе в плохо освещаемых помещениях и в ночное время. Использование датчика освещенности позволяет автоматически регулировать яркость свечения светодиодного индикатора.
Кроме непосредственного назначения модуль клавиатуры и светодиодной индикации TM1638 LED&KEY позволяет изучить работу микросхемы TM1638 для применения в собственных разработках. Уместно использование в качестве наглядного пособия при изучении принципов построения и работы индикаторов, клавиатур и освоении программирования МК.
Основные компоненты
Четырехразрядный семисегментный индикатор 3461AS.
Содержит в каждом разряде кроме сегментов отображения символа точку отделяющую целую часть числа от дробной. Отрицательные электроды светодиодов сегментов объединены отдельно в каждом разряде, выводы 6, 8, 9, 12.
Подключение нескольких разрядов семисегментного индикатора требует много соединений, что затруднительно. Если каждый сегмент потребляет ток 10 мА, то общее потребление становится заметным. Для удобства применения выводы одноименных сегментов всех разрядов объединяют как показано на схеме 3461AS и применяют управление индикатором получившее название динамическая индикация. Управление состоит в следующем. Быстро кратковременно поочередно с помощью коммутации общих электродов разрядов в нашем случае выводы 6, 8, 9, 12 включаются разряды индикатора. Одновременно с включением одного разряда включают сегменты соответствующие знаку, отображаемому в этом разряде. Инерционность зрения позволяет воспринимать переключающиеся разряды как одно изображение на всем индикаторе. В результате использования динамического принципа управления уменьшается требуемое количество проводников, происходит многократная экономия энергии, так как в один момент времени нужен ток для питания одного разряда. Динамическая индикация имеет недостатки – большой уровень помех, излучаемых проводниками индикатора и наводимый шум в цепях питания прибора. Если индикатор используется в радиоприемниках, измерительных приборах, то для преодоления указанных недостатков индикатор питают от отдельного блока питания небольшой мощности с гальванической развязкой от остальных цепей питания прибора. На шине данных также применяют цепи обеспечивающие гальваническую развязку.
Микросхема TM1638.
Устройство ввода-вывода данных для совместной работы с микроконтроллером. Обмен данных происходит по оригинальной шине из трех сигнальных линий близкой по свойствам к шине SPI. Строка семисегментных индикаторов позволяет отображать числа, некоторые буквы и простые символы.
Регулировка яркости выполняется программным путем передачей команд по шине данных. Можно гасить отдельные разряды. Светодиоды образуют линейную шкалу, позволяющую наглядно отображать измеряемую величину. Есть возможность программно регулировать яркость свечения светодиодов. Многоразрядный индикатор позволяет выводить данные одновременно о нескольких величинах. Можно индицировать значение одного параметра и тут же показывать на линейной шкале долю величины от максимального значения, что более наглядно.
8 кнопок клавиатуры позволяют удовлетворить требования к управлению широким кругом приборов. Модуль клавиатуры и светодиодной индикации QYF-TM1638 определяет нажатие нескольких кнопок одновременно. Применение модуля позволяет достаточно просто решить конструкцию и электронику передней панели прибора. В отличии от ЖКИ индикаторов светодиодные нечувствительны к работе при температурах ниже +5 °C, что повышает надежность средства отображения. Светодиодные индикаторы особенно уместны при работе в плохо освещаемых помещениях и в ночное время. Использование датчика освещенности позволяет автоматически регулировать яркость свечения светодиодного индикатора.
Кроме непосредственного назначения модуль клавиатуры и светодиодной индикации TM1638 LED&KEY позволяет изучить работу микросхемы TM1638 для применения в собственных разработках. Уместно использование в качестве наглядного пособия при изучении принципов построения и работы индикаторов, клавиатур и освоении программирования МК.
Основные компоненты
Четырехразрядный семисегментный индикатор 3461AS.
Содержит в каждом разряде кроме сегментов отображения символа точку отделяющую целую часть числа от дробной. Отрицательные электроды светодиодов сегментов объединены отдельно в каждом разряде, выводы 6, 8, 9, 12.
Подключение нескольких разрядов семисегментного индикатора требует много соединений, что затруднительно. Если каждый сегмент потребляет ток 10 мА, то общее потребление становится заметным. Для удобства применения выводы одноименных сегментов всех разрядов объединяют как показано на схеме 3461AS и применяют управление индикатором получившее название динамическая индикация. Управление состоит в следующем. Быстро кратковременно поочередно с помощью коммутации общих электродов разрядов в нашем случае выводы 6, 8, 9, 12 включаются разряды индикатора. Одновременно с включением одного разряда включают сегменты соответствующие знаку, отображаемому в этом разряде. Инерционность зрения позволяет воспринимать переключающиеся разряды как одно изображение на всем индикаторе. В результате использования динамического принципа управления уменьшается требуемое количество проводников, происходит многократная экономия энергии, так как в один момент времени нужен ток для питания одного разряда. Динамическая индикация имеет недостатки – большой уровень помех, излучаемых проводниками индикатора и наводимый шум в цепях питания прибора. Если индикатор используется в радиоприемниках, измерительных приборах, то для преодоления указанных недостатков индикатор питают от отдельного блока питания небольшой мощности с гальванической развязкой от остальных цепей питания прибора. На шине данных также применяют цепи обеспечивающие гальваническую развязку.
Микросхема TM1638.
Управление индикаторами и определение нажатия кнопок выполняет микросхема TM1638 китайской фирмы Titan Micro Electronics. Составленное производителем описание микросхемы находится в архиве, ссылка на архив в конце страницы. TM1638 принимает от МК и передает данные по собственному последовательному интерфейсу из трех сигналов, близкому к интерфейсу SPI. Отличие от SPI состоит в объединении в одну линию двух линий приема и передачи. Названия сигналов отличные от принятых в SPI, но они хорошо узнаются.
Сигналы интерфейса TM1638.
STB – разрешение работы микросхемы при низком уровне сигнала. После переключения в активный уровень первый принимаемый байт воспринимается как команда. Часто для обозначения этого сигнала используют слова строб, стробирующий.
CLK – тактовый сигнал при передаче данных в микросхему. Данные фиксируются по фронту сигнала. Источником сигнала CLK служит внешнее устройство.
DIO – данные. Передача синхронизируется фронтом сигнала CLK.
Микросхема содержит внутренние регистры хранения состояния светодиодов и кнопок. Запись и чтение регистров происходит по командам приходящим по интерфейсу. После записи регистров микросхема автоматически формирует сигналы управления индикаторами и опроса кнопок.
Назначение выводов микросхемы TM1638.
Сигналы интерфейса 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 поддерживает три типа команд.
- Режим автоматического увеличения адреса – команда 0x4X.
- Набор команд управления дисплеем 0x8X – управление включением, выключением, яркостью. Младшие биты в команде – параметры.
- Установка адреса регистра символа происходит при передаче команды 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 КГц
Температура окружающего вoздyxa при работе -15…60 °C
Штыревой соединитель имеет 5 контактов.
VCC – питание
GND – общий провод
STB – сигнал стробирования
CLK – тактовый сигнал
DIO – двунаправленная линия данных
Соединение интерфейса модуля TM1638LED&KEY с Arduino UNO. Приводим наиболее часто используемое назначение контактов в программах использующих библиотеку Ricardo Batista.
Arduino UNO TM1638LED&KEY
8 DIO
9 CLK
10 STB
Подключение TM1638 к шине SPI.
Особенности модуля TM1638
Включение и установка максимальной яркости выполняется командой 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);
}