Jump to content

    

Контроллер LED дисплея STDLED316MTR

Привет всем. Вопрос такой: кто-нибудь работал с STLED316MTR? Это контроллер дисплея на 6 циферек с возможностью сканирования матрицы кнопок 2х8, управляется по трёхпроводной последовательной шине (STB, CLK и двунаправленная DIO). Подвязал я к нему AVR-ку, пытаюсь посылать на STLED команды, чтоб он хоть что-то на дисплее зажёг, но пока получилось только зажигать одну из восьмёрок (какую - зависит от адреса цифирьки в передаваемой команде) . Даташит по нему скачал, но понял, судя по всему, не всё.

Суть вопроса - какова правильная последовательность передачи команд на этот контроллер (команды у него делятся на категории: конфигурация дисплея, запись данных в буфер модуля управления дисплеем, считывание данных из буфера, а ещё отдельные 2 команды на включение/выключение дисплея). В 8-битной команде записи данных в нулевом банке памяти содержится адрес цифры, которую надо зажечь. После команды следуют 8 бит данных (соотв. 8 сегментам). Так вот я сначала даю команду на включение дисплея, потом команду на запись в буфер данных по цифре, потом сами данные. Включаю схему - выбранная на дисплее цифра моргает 1 раз. Тогда я зациклил эти три шага - цифра горит. Но, думаю, это не выход. Что-то я делаю не так. У меня не получается в этом цикле зажечь одновременно хотябы 2 цифры посредством посылки команд на запись соответствующих данных после включения дисплея.

Господа! :1111493779: Если кто-то знает эту микросхему, дайте знать, пожалуйста, я тогда поконкретнее вопрос задам. Заранее спасибо!

Share this post


Link to post
Share on other sites

Сначала команда 0x0E - отключаем микросхему

 

Далее конфигурация 4 байта, перед которыми байт команды в виде (CHIP_CONFIG_PAGE + CHIP_CONFIG_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND)

 

Далее команда конфигурации яркости (LED_BRIGHTNESS_PAGE + LED_BRIGHTNESS_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND) и 4 байта яркости

 

И напоследок - включаем микросхему командой 0x0D

 

У меня любое изменение конфигурации обрамляется выключением/включением

 

Чтение ИЗ микросхемы вообще не использую, клавиатуры нет, да и данные из микросхемы не нужны

Share this post


Link to post
Share on other sites

Так..Угу. Только CHIP_CONFIG_PAGE и CHIP_CONFIG_ADDRESS местами перепутаны. А конфигурацию обязательно в этот камень забивать перед работой, или можно ограничиться дефолтами, если они есть?

Share this post


Link to post
Share on other sites
Только CHIP_CONFIG_PAGE и CHIP_CONFIG_ADDRESS местами перепутаны.

A+B == B+A

A | B == B | A

 

так пойдет?

 

а вообще - есть страница конфигурации, в ней есть адрес. По-моему все логично. Посмотрите даташит, я тоже с первого раза не вкурил, как-то "размазано" описание

 

А конфигурацию обязательно в этот камень забивать перед работой, или можно ограничиться дефолтами, если они есть?

если все по дефолту устраивает, чего ж не оставить? :laughing:

но, по-моему, включать микросхему все равно нужно

Share this post


Link to post
Share on other sites
A+B == B+A

A | B == B | A

 

так пойдет?

 

а вообще - есть страница конфигурации, в ней есть адрес. По-моему все логично. Посмотрите даташит, я тоже с первого раза не вкурил, как-то "размазано" описание

 

 

если все по дефолту устраивает, чего ж не оставить? :laughing:

но, по-моему, включать микросхему все равно нужно

 

 

A+B == B+A

A | B == B | A

 

Возможно мы говорили про разные вещи? CHIP_CONFIG_ADDRESS - как я понял - три бита адреса команды на запись с 0-го по 2-й. А CHIP_CONFIG_PAGE - два бита выбора страницы памяти - 3-й и 4-й в той же команде. Как можно менять местами такие вещи и при чёт тут, пардон, дизъюнкция? ;) Или я всё не так понял?

Share this post


Link to post
Share on other sites
Как можно менять местами такие вещи и при чёт тут, пардон, дизъюнкция? ;) Или я всё не так понял?

конечно :)

#define WRITE_COMMAND 0x00 
#define READ_COMMAND  0x40 
#define FIXD_ADDRESS 0x20 
#define INCREMENT_ADDRESS 0x00 

#define CHIP_CONFIG_PAGE (0x02 << 3) 
#define CHIP_CONFIG_ADDRESS 0x00 
#define CHIP_CONFIGURATION 0xFD                //6 digits,8segments,constand brightness all 

#define DIGIT_BRIGHTNESS_PAGE (0x02 << 3) 
#define DIGIT_BRIGHTNESS_ADDRESS 0x10        //0X1-0X3 
#define DIGIT_BRIGHTNESS 0x77 

#define LED_BRIGHTNESS_PAGE (0x03 << 3) 
#define LED_BRIGHTNESS_ADDRESS 0x1            //0X1-0X3 

#define SEGMENT_DATA_PAGE (0x00 << 3) 
#define SEGMENT1_DATA_ADDRESS 0x00            //0X0-0X5 
#define SEGMENT2_DATA_ADDRESS 0x01 
#define SEGMENT3_DATA_ADDRESS 0x02 
#define SEGMENT4_DATA_ADDRESS 0x03 
#define SEGMENT5_DATA_ADDRESS 0x04 
#define SEGMENT6_DATA_ADDRESS 0x05 

#define LED_DATA_PAGE (0x01 << 3) 
#define LED_DATA_ADDRESS 0x00

 

и теперь посмотрите, будет ли разница

1. (CHIP_CONFIG_ADDRESS + CHIP_CONFIG_PAGE) и (CHIP_CONFIG_PAGE + CHIP_CONFIG_ADDRESS)

2. (CHIP_CONFIG_ADDRESS | CHIP_CONFIG_PAGE) и (CHIP_CONFIG_PAGE | CHIP_CONFIG_ADDRESS)

3. (CHIP_CONFIG_ADDRESS + CHIP_CONFIG_PAGE) и (CHIP_CONFIG_PAGE | CHIP_CONFIG_ADDRESS)

Share this post


Link to post
Share on other sites

А, ну так это совсем другое дело)) Теперь понял :beer:

Share this post


Link to post
Share on other sites

Таг-с. С включением разобрался - не мог зажечь одновременно более одной цифры, пока не поменял в байте конфигурации настройки яркости с постоянной максимальной на переменную минимальную. А теперь такой вопрос: как поменять выводимую на дисплей информацию? По идее структура общения такова:

 

1 Выключаем дисплей

2 Записываем конфигурацию

3 Записываем дату какие цыфирьки надо зажечь

4 Включаем дисплей

 

Для другой символьной комбинации выполняем те же шаги, просто с другой датой.

 

Так должно быть или не так? У меня пока не получилось... :wacko:

Share this post


Link to post
Share on other sites

Я сначала инициализирую драйвер, то есть прописываю ему конфигурацию (количество цифр, режим яркости)

 

Другая функция отправляет данные, которые нужно отображать на индикаторах

 

Все отправки данных обрамляются выключением/включением

 

Нет, при отправке данных драйвер не отключается. Данные просто "вгоняются" без всяких 0x0E/0x0D команд

 

void STLED316S_disp_init()
{
char datas[8];
    
    datas[0] = 0x0E;
    STLED316S_send(datas, 1); // Switch OFF
    
    // Set 4 digits mode
    datas[0] = CHIP_CONFIG_PAGE + CHIP_CONFIG_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND;
    datas[1] = 0xE4;
    datas[2] = 0x77;
    datas[3] = 0x77;
    datas[4] = 0x77;
    STLED316S_send(datas, 5);
    
    
    
      datas[0] = LED_BRIGHTNESS_PAGE + LED_BRIGHTNESS_ADDRESS + INCREMENT_ADDRESS + WRITE_COMMAND;
      datas[1] = 0x77;
      datas[2] = 0x77;
      datas[3] = 0x77;
      datas[4] = 0x77;
      STLED316S_send(datas, 5);


    datas[0] = 0x0D;
    STLED316S_send(datas, 1); // Switch ON
    
}

Share this post


Link to post
Share on other sites
В ‎07‎.‎04‎.‎2013 в 21:13, toweroff сказал:

сначала инициализирую драйвер, то есть прописываю ему конфигурацию (количество цифр, режим яркости)

 

Другая функция отправляет данные, которые нужно отображать на индикаторах

 

Всем доброй ночи! Люди спасайте! Третий день бьюсь над STLED316. Сделал инициализацию поп примеру выше, на экране цифра 9с точкой, одна.

Есть несколько вопросов, голову сломал, но ничего не понимаю. При заполнении datas[], в первый адрес мы кладем адреса страницы и памяти внутри страницы, дальше заполняем остальные ячейки массива, но данные одинаковые, это заполнение для каждого разряда?

Вопрос по конфигурации:

Для настройки яркости, использую следующие данные:

LSB 0 – 2 → indicates the number of digits in the display LSB3 MSB 4 → '11' is for constant brightness control for the display → '00' is for variable brightness control for the display →'01' is reserved →'10' is reserved MSB 5 – 7 → indicates constant brightness control value for all including the LED (discrete)

подставляю данные из таблиц.

 

А вот какие данные задавать в конфигурацию контроллера?

Сорри, если вопросы глупые, но реально голову сломал уже.

Управление идет с STM32.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now