LED драйвер TM1639

Просмотров: 1898


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
Команда управления работы дисплея 0 0 0
Команда указания адреса загружаемых данных для отображения 1 0 0

Команда передачи, приема данных.

b7 b6 b5 b4 b3 b2 b1 b0 Функция Описание
0 1 0 0 0 0 Выбор записи или чтения данных Запись данных для отображения
1 0 0 1 0 Чтения данных сканирования кнопок
1 0 0 0 Выбор режима автоприращения адреса Автоприращение адреса
1 0 0 1 Фиксированный адрес
1 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 0 0 0 0 0 1 0x01
1 0 0 0 0 1 0 0x02 2
1 0 0 0 0 1 1 0x03
1 0 0 0 1 0 0 0x04 3
1 0 0 0 1 0 1 0x05
1 0 0 0 1 1 0 0x06 4
1 0 0 0 1 1 1 0x07
1 0 0 0 0 0 0 0x08 5
1 0 0 1 0 0 1 0x09
1 0 0 1 0 1 0 0x0A 6
1 0 0 1 0 1 1 0x0B
1 0 0 1 1 0 0 0x0C 7
1 0 0 1 1 0 1 0x0D
1 0 0 1 1 1 0 0x0E 8
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-KS1K0-KS1+KS3K0-KS2 K0-KS2+KS4 K0-KS3K0-KS4 K1-KS1K1-KS1+KS3 K1-KS2 K1-KS2+KS4 K1-KS3K1-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 семисегметных...
Login Required Message:
Значок

TM1650 и TM1639 ru 5.14 MB 50 downloads

Свободный перевод описаний драйверов. ...

Версия для компилятора XC16 (SPI передает данные старшим битом вперед)

Значок

LED драйвер TM1639 библиотека v1.2 for XC16 11.57 KB 2 downloads

//------------------------------------------------------------------------------ /* ...
Login Required Message:

Это может быть интересно


  • Проект с использованием MCC часть 11Проект с использованием MCC часть 11
    Просмотров: 641 Можно несколько облагородить программу вынести наши процедуры обработки нажатия кнопок в отдельные функции. Но вы должны понимать, что это хоть и не значительно, но будет тормозить общую скорость …
  • Acquaintance with audio-bluetooth modules F-6888 (BK3254).Acquaintance with audio-bluetooth modules F-6888 (BK3254).
    Просмотров: 1593 Для проектов появилось необходимость познакомиться с недорогими модулями китайского производства, которые можно приобрести у нас в Украине и у китацев, на алиэкспрессе. Так как меня интересует не просто, …
  • Гаджеты для домашней автоматики – Датчик движенияГаджеты для домашней автоматики – Датчик движения
    Просмотров: 1280 Управление светодиодным освещением – Датчик движения. Данный гаджет предназначен для управления освещением рабочих столов (кухонных столов), освещение прихожих, освещение зеркал в прихожих, автоматическое включение света в коридорах. Датчик позволяет …
  • 12-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA20412-BIT A/D CONVERTER WITH THRESHOLD DETECT на примере PIC24FJ128GA204
    Просмотров: 645 Введение. 12-битный модуль A/D Converter является усовершенствованной версией 10-битного модуля, предлагаемого на некоторых устройствах PIC24. Оба модуля являются преобразователями, в своих ядрах, с последовательным приближением (SAR), в окружении …
  • Проект с использованием MCC часть 12-1Проект с использованием MCC часть 12-1
    Просмотров: 748 В настоящее время без визуализации информации уже не интересно. Поэтому научимся выводить информацию на дисплей. Для это возьмет простенький OLED RET012864E/REX012864J я такой приобретал в фирме “Гамма-Украина”, описание можно …
  • Униполярный шаговый двигательУниполярный шаговый двигатель
    Просмотров: 1947     В приводах различных устройств часто применяются шаговые двигатели, Шаговый двигатели различают двух типов униполярные – когда обмотки коммутируются током текущим только в одну сторону, например при …
  • Простой цифровой милливольтметр постоянного токаПростой цифровой милливольтметр постоянного тока
    Просмотров: 3718 Простой цифровой вольтметр постоянного тока. Три диапазона измерений с автоматическим переключением 1 – 0,001 – 0,999 V, 2 – 0,01-9,99 V, 3 – 0,1-99,9. Четыре управляемых выхода с возможностью задания функции контроля …
  • CCP модуль для декодирования ИК-кодов пультов ДУCCP модуль для декодирования ИК-кодов пультов ДУ
    Просмотров: 919 Множество изготовителей для своих пультов дистанционного управления на ИК лучах используют принцип широтно-импульсной модуляции. В таких кодах бит единицы представляется импульсом большой длительности, а ноль импульсом короткой длительности. …
  • OLED RET012864E/REX012864JOLED RET012864E/REX012864J
    Просмотров: 1260 RET012864E/REX012864J ОЛЕД индикатор производитель Raystar-Optronics приобретался в http://www.microchip.ua/ к сожалению никакой информации на сайте поставщика нет. Поэтому решил работу с этой версией индикатора на драйвере SSD1305 предоставить на своем сайте. Так как …
  • УКВ – радиоприем, часть 1УКВ – радиоприем, часть 1
    Просмотров: 8839 Музыкальная тема к статье, слушаем: Первый мой радиоприемник, выглядел так. Использовал исключительно в школе на уроках, держась за одно ухо и преданно смотря на училку и сладко улыбаясь. …



 

Поделись этим!

Catcatcat

catcatcat

Development of embedded systems based on Microchip microcontrollers.