Views: 2485
TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных индикаторов. Может работать как на индикаторы с общим катодом, но и есть возможность подключать общим анодом.
Для управления драйвером используется трех проводный SPI. Питание драйвера может быть от 3,3 вольт до 5 вольт. Логические уровни не поддерживаются поддерживаются, поэтому если питаете драйвер 5 вольт, должно быть MCU тоже 5 вольтовым или делать преобразователи уровня, для красных светодиодов нормально работает от 3,3 вольт, а вот для синих, зеленых (истинно) питание должно быть 5 вольтовым.
Данные (описанные в этой статье) в SPI должны передаваться младшим битом вперед. Скорость SPI до 500 кГц (рекомендую 250 кГц и ниже). Команды управления позволяют настраивать 7 уровней яркости дисплея, включать выключать дисплей. Возможность записывать данные в конкретный разряд или использовать автоадресацию при загрузке данных. Поддерживает 8 кнопочную клавиатуру, есть возможность определять двойные нажатия клавиш. Применение диодов в схеме клавиатуры блокирует нежелательную засветку.
Речь пойдет об использовании 8 разрядного семисегментного индикатора с общим катодом.
Схема подключения, вариант использования для подключения к микроконтроллеру с питанием 3,3 вольта:
Схема нарисована по рекомендациям производителя драйвера, но конденсаторы С53-С54 необязательный атрибут, резисторы особенно на шине данных необходимы для чтения данных клавиатуры, выходной драйвер шины данных выполнен с открытым стоком.
Для записи данных в регистры индикации необходимо 16 байт, при этом данные для одного разряда записываются двумя байтами, при этом используются только младшие полубайты. Для семисегментного индикатора при подключении по приведенной схеме, следующее:
| Байт передачи | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
| первый | 0 | 0 | 0 | 0 | D | C | B | A |
| второй | 0 | 0 | 0 | 0 | H | G | F | E |
В таблице приведены положение сегментов битам в байтах.
Команды драйвера.
Команды переедаются одним байтом. Или любой первый байт в последовательности передачи данных восприниматься как команда. Существуют три типа команд для управления дисплеем, эти команды отличаются только состоянием старших битов B7 и B6.
| Команда | B7 | B6 | B5 | B4 |
| Команда передачи, приема данных | 0 | 1 | 0 | 0 |
| Команда управления работы дисплея | 1 | 0 | 0 | 0 |
| Команда указания адреса загружаемых данных для отображения | 1 | 1 | 0 | 0 |
Команда передачи, приема данных.
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | Функция | Описание |
| 0 | 1 | 0 | 0 | 0 | 0 | Выбор записи или чтения данных | Запись данных для отображения | ||
| 0 | 1 | 0 | 0 | 1 | 0 | Чтения данных сканирования кнопок | |||
| 0 | 1 | 0 | 0 | 0 | Выбор режима автоприращения адреса | Автоприращение адреса | |||
| 0 | 1 | 0 | 0 | 1 | Фиксированный адрес | ||||
| 0 | 1 | 0 | 0 | 0 | Включение тестового режима | Нормальный режим работы | |||
| 0 | 1 | 0 | 0 | 1 | Тестовый режим работы |
Это команда подается самостоятельно и позволяет управлять последующим потоком данных. Перед тем как начать записывать данные изображения, необходимо подать 0x40, а затем передавать последовательность данных изображения. Если необходимо прочитать состояние клавиатуры 0x42. Комбинируя состояние битов b0-b4 можем формировать управление функциями дисплея.
Команда управления работы дисплея.
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | Функция | Описание |
| 1 | 0 | 0 | 0 | 0 | 0 | 0 | Настройка уровня яркости |
Уровень яркости 1/16 | |
| 1 | 0 | 0 | 0 | 0 | 0 | 1 | Уровень яркости 2/16 | ||
| 1 | 0 | 0 | 0 | 0 | 1 | 0 | Уровень яркости 4/16 | ||
| 1 | 0 | 0 | 0 | 0 | 1 | 1 | Уровень яркости 10/16 | ||
| 1 | 0 | 0 | 0 | 1 | 0 | 0 | Уровень яркости 11/16 | ||
| 1 | 0 | 0 | 0 | 1 | 0 | 1 | Уровень яркости 12/16 | ||
| 1 | 0 | 0 | 0 | 1 | 1 | 0 | Уровень яркости 13/16 | ||
| 1 | 0 | 0 | 0 | 1 | 1 | 1 | Уровень яркости 14/16 | ||
| 1 | 0 | 0 | 0 | 0 | Выключение дисплея |
Выключить дисплей | |||
| 1 | 0 | 0 | 0 | 1 | Включить дисплей |
Этой командой можно управлять яркостью дисплея, а также отключать его для экономии потребления устройством, когда в его работе нет необходимости.
Команда указания адреса загружаемых данных для отображения.
| b7 | b6 | b5 | b4 | b3 | b2 | b1 | b0 | Адрес | Индикатор |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 | 1 |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 0x01 | |
| 1 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | 0x02 | 2 |
| 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0x03 | |
| 1 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | 0x04 | 3 |
| 1 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | 0x05 | |
| 1 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | 0x06 | 4 |
| 1 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | 0x07 | |
| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0x08 | 5 |
| 1 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 0x09 | |
| 1 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 0x0A | 6 |
| 1 | 1 | 0 | 0 | 1 | 0 | 1 | 1 | 0x0B | |
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 0x0C | 7 |
| 1 | 1 | 0 | 0 | 1 | 1 | 0 | 1 | 0x0D | |
| 1 | 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0x0E | 8 |
| 1 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0x0F |
Эта команда используется для установки адреса регистра дисплея. Если адрес будет установлен на 0х10 или выше, данные игнорируются до тех пор, пока не будет установлен корректный адрес. При включении питания, по умолчанию, указатель установлен на значение 00H.
Пример, функции загрузки драйвера, для индикации, где uint8_t ind[8]; // регистры индикации разрядов
//----------------------------------------------------
// загружаются данные для индикации, из буфера индикатора
void LOAD_displ(void) //загрузка данных
{
uint8_t a,b; //
SPI1_Exchange8bitA(0x40); //
STB=0; //
SPI1_Exchange8bit(0xC0); //
for (a=0;a<8;a++) //
{
b=ind[a]; //
SPI1_Exchange8bit(b); //
SPI1_Exchange8bit((uint8_t)(b>>4)); //
}
STB=1; //
//
// SPI1_Exchange8bitA(0x40);
// STB=0;
// SPI1_Exchange8bit(0xC0);
// SPI1_Exchange8bit(ind[0]); //
// SPI1_Exchange8bit(ind[0]>>4);
// SPI1_Exchange8bit(ind[1]); //
// SPI1_Exchange8bit(ind[1]>>4);
// SPI1_Exchange8bit(ind[2]); //
// SPI1_Exchange8bit(ind[2]>>4);
// SPI1_Exchange8bit(ind[3]); //
// SPI1_Exchange8bit(ind[3]>>4);
// SPI1_Exchange8bit(ind[4]); //
// SPI1_Exchange8bit(ind[4]>>4);
// SPI1_Exchange8bit(ind[5]); //
// SPI1_Exchange8bit(ind[5]>>4);
// SPI1_Exchange8bit(ind[6]); //
// SPI1_Exchange8bit(ind[6]>>4);
// SPI1_Exchange8bit(ind[7]); //
// SPI1_Exchange8bit(ind[7]>>4);
// STB=1;
}//
Таблица возможных формируемых символов:
//====================================================================================== // символы знакогенератора // цифры // Characters signgenerator // Number // . // HGFEDCBA #define c0 0b00111111 // 0-0 #define c1 0b00000110 // 1-1 #define c2 0b01011011 // 2-2 "z" #define c3 0b01001111 // 3-3 #define c4 0b01100110 // 4-4 "Ч" #define c5 0b01101101 // 5-5 "S" #define c6 0b01111101 // 6-6 #define c7 0b00000111 // 7-7 #define c8 0b01111111 // 8-8 #define c9 0b01101111 // 9-9 // . // HGFEDCBA #define c0t 0b10111111 // 0-0 #define c1t 0b10000110 // 1-1 #define c2t 0b11011011 // 2-2 "z" #define c3t 0b11001111 // 3-3 #define c4t 0b11100110 // 4-4 "Ч" #define c5t 0b11101101 // 5-5 "S" #define c6t 0b11111101 // 6-6 #define c7t 0b10000111 // 7-7 #define c8t 0b11111111 // 8-8 #define c9t 0b11101111 // 9-9 //====================================================================================== // символы //Characters // . // HGFEDCBA #define cA 0b01110111 // "A" #define ca 0b01011111 // "a" #define cb 0b01111100 // "b" #define cC 0b00111001 // "C" #define cc 0b01011000 // "c" #define cd 0b01011110 // "d" #define cE 0b01111001 // "E" #define cF 0b01110001 // "F" #define cG 0b00111101 // "G" #define cH 0b01110110 // "H" #define ch 0b01110100 // "h" #define cI 0b00110000 // "I" #define ci 0b00010000 // "i" #define cj 0b00001110 // "J" #define cL 0b00111000 // "L" #define cl 0b00000100 // "l" #define cN 0b00110111 // "П" #define cn 0b01010100 // "n" #define cO 0b00111111 // "O" #define co 0b01011100 // "o" #define cP 0b01110011 // "P" #define cq 0b01100111 // "q" #define cr 0b01010000 // "r" #define cS 0b01101101 // "S" #define ct 0b01111000 // "t" #define cU 0b00111110 // "U" #define cu 0b00011100 // "u" #define cY 0b01110010 // "Y" #define cy 0b00111011 // "У" // . // HGFEDCBA #define cK 0b01111010 // "K" #define c_ 0b00000000 // символ "пробел" #define cM 0b01000000 // символ "-" #define c__ 0b00001000 // символ "подчеркивание" #define c_o 0b01100011 // символ "-o" верхний нолик #define ct3 0b01001001 // symbol "three features" #define ct2 0b01001000 // symbol "two features" #define ct1 0b00001000 // symbol "one feature" #define cz 0b10000000 // только запятая // . // HGFEDCBA //======================================================================================
После подачи питания, для запуска драйвера необходимо подождать 50 мСек, пока он придет в себя. После чего с ним можно начинать работу. Хочу обратить внимание, это касается в основном все недорогой китайской электроники. Надо понимать, что она не поддерживает значение стандарта логических уровней, как это принято в нормальных микросхемах. Т.е. например, уровень логической 1 он и для 3,3 вольтовой логики и для 5 вольтовой всегда одинаков, для этого драйвера это не так, если у вас микроконтроллер питается, от источника 3,3 вольта, а драйвер вы запитали, от 5 вольтового, вам нужны будут преобразователи уровня.
Клавиатура
Драйвер позволяет сканировать клавиатуру из 8 кнопок. В отличии от TM1650 этот драйвер поддерживает одновременное нажатие клавиш.
Драйвер формирует два байта, состояние битов 2, 3, 6, 7 их установка показывает состояние клавиатуры. В таблице ниже приведены коды формируемые, от комбинации клавиатуры.
| * | KS1 | KS2 | KS3 | KS4 |
| K0 | 0x80/0x00 | 0x80/0x00 | 0x00/0x08 | 0x00/0x80 |
| K1 | 0x04/0x00 | 0x40/0x00 | 0x00/0x04 | 0x00/0x40 |
Сканы при нажатии на клавиши:
K0-KS1
K0-KS1+KS3
K0-KS2
K0-KS2+KS4
K0-KS3
K0-KS4
K1-KS1
K1-KS1+KS3
K1-KS2
K1-KS2+KS4
K1-KS3
K1-KS4
Если используется клавиатура на 4 клавиши, то удобнее обрабатывать только один байт данных, для этого необходимо использовать тип подключения только. например между K0, K1 и KS1, RS2.
Функции для простого чтения, кнопок состояния клавиатуры:
uint16_t TM1639_keyboard (void) // чтение клавиатуры
{
uint16_t keyboard=33;
STB=0;
SPI1_Exchange8bit(0x42);
TRISC2 = 1; // отключить передатчик SDO SPI
keyboard = SPI1_Exchange8bit(0xFF)<<8;
keyboard += SPI1_Exchange8bit(0xFF);
TRISC2 = 0; // включить передатчик SDO SPI
STB=1;
return keyboard;
}
Примет функции с формирование событий нажатия и отпускания клавиш:
uint8_t TM1639_keyboardA (void) // чтение клавиатуры
{
uint8_t keyboard;
static uint8_t keyboardP=0; // предыдущее состояние
STB=0;
SPI1_Exchange8bit(0x42);
TRISC2 = 1; // отключить передатчик SDO SPI
keyboard = SPI1_Exchange8bit(0xFF);
TRISC2 = 0; // включить передатчик SDO SPI
STB=1;
// формирование событий от клавиатуры
BOFF = 0;
BON = 0;
if(keyboard != keyboardP) // определяем было бы изменения состояния клавиатуры
{
if(keyboard) BON = 1; // определяем было нажатие
else BOFF = 1;
}
if(BON) // в зависимости от события определяем клавишу
{
if(keyboard & 0b10000000)BT4=1;
else BT4=0;
if(keyboard & 0b01000000)BT2=1;
else BT2=0;
if(keyboard & 0b00001000)BT3=1;
else BT3=0;
if(keyboard & 0b00000100)BT1=1;
else BT1=0;
}
else if(BOFF)
{
if(keyboardP & 0b10000000)BT4=1;
else BT4=0;
if(keyboardP & 0b01000000)BT2=1;
else BT2=0;
if(keyboardP & 0b00001000)BT3=1;
else BT3=0;
if(keyboardP & 0b00000100)BT1=1;
else BT1=0;
}
keyboardP=keyboard;
return keyboard;
}
Флаги BON и BOFF можно использовать для определения событий нажатия клавиш, а флаги BT1-BT4 для определения клавиши.
Дополнительный вариант для определения нажатия и удержания клавиши, а также нажатия двух, трех клавиш…
TM1639_keyboardA(); // чтение клавиатуры (можно поместить в прерывания)
if(BON) // только события нажатия
{
if(BT4 & BT3) { ... }; // нажатие двух клавиш
else
if(BT1 & !BT2 & !BT3 & !BT4) { ... }; // одинарные нажатия
else
if(BT2 & !BT1 & !BT3 & !BT4) { ... };
else
if(BT3 & !BT1 & !BT2 & !BT4) { ... };
else
if(BT4 & !BT1 & !BT2 & !BT3) { ... };
}
Версия библиотек для использования для работы с драйвером.
LED драйвер TM1639 (spi и драйвер - библиотеки) 12.95 KB 11 downloads
TМ1639 позволяет работать на матрицу 8*8 или 8 семисегметных...Версия для компилятора XC16 (SPI передает данные старшим битом вперед)
LED драйвер TM1639 библиотека v1.2 for XC16 11.57 KB 2 downloads
//------------------------------------------------------------------------------ /* ...Это может быть интересно
УКВ – радиоприем, часть 2Views: 6444 Пришло свободное время решил вторую часть проекта реализовать (правда есть мысль и третью с использование цветного OLED и функцией ch-светомузыки, но это только задумка… Для понимания функций интегрального …
Дифференциальный терморегуляторViews: 4160 Дифференциальный терморегулятор ch-3020 Назначение. Ch-c3020 представляет собой дифференциальный терморегулятор. Основное назначение солнечные системы горячего водоснабжения, а также вентиляционные системы управление притоком свежего воздуха. Контроллер позволяет работать пяти режимах. …
Самый простой диммер для светодиодного освещенияViews: 3209 Светодиоды все больше входят в нашу жизнь как источники освещения и как само собой разумеющееся, это вопрос регулировки яркости. Существует множество схемных решений, но в нашем варианте мы …
NeoPixel LED and PIC24Views: 781 Популярность однопроводной шины для управления светодиода типа WS2812 не ослабевает, а новые типы светодиодов в корпусах 3,5*3,5мм, 2,0*2,0мм становяться все больше привлекательными. Построение дисплеев для анимации требуют все …
Дисплей KD035C-3A подключение и управлениеViews: 872 Дисплей KD035C-3A производиться компанией SHENZHEN STARTEK ELECTRONIC TECHNOLOGY CO.,LTD Характеристики Параметр Спецификация Единицы измерения Размер дисплея 70.08(H)*52.56(V) (3.5inch) mm Тип дисплея TFT active matrix Цветовая гамма 65K/262K colors Разрешение …
Проект с использованием MCC часть 12-1Views: 1127 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
I2C MODULE – PIC18F25K42 Device ID Revision = A001Views: 1206 I2C MODULE Обход ошибок в версии I2C MODULE – PIC18F25K42 Device ID Revision = A001 В Серии K42 применен совершенно новый модуль шины I2C, который позволяет поддерживать все …
Проект с использованием MCC часть 14Views: 1090 С выводом данных на дисплей мы справились (но могу сразу сказать библиотеку графики к этой статьи пришлось доработать, поэтому в этом проекте она обновлена). У нас на текущем …
Acquaintance with audio-bluetooth modules F-6888 (BK3254).Views: 2432 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
Четырех канальный терморегулятор ch-4000Views: 3432 Четыре независимых канала регулирования температуры, одновременно можно подключить 16 датчиков температуры DS18B20 с удалением до трехсот метров. Можно для регулировки выбрать любой датчик, подключенный к устройству. Каждый канал может работать …
