Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Контроллер LED дисплея STDLED316MTR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры
Wolfenstein
Привет всем. Вопрос такой: кто-нибудь работал с STLED316MTR? Это контроллер дисплея на 6 циферек с возможностью сканирования матрицы кнопок 2х8, управляется по трёхпроводной последовательной шине (STB, CLK и двунаправленная DIO). Подвязал я к нему AVR-ку, пытаюсь посылать на STLED команды, чтоб он хоть что-то на дисплее зажёг, но пока получилось только зажигать одну из восьмёрок (какую - зависит от адреса цифирьки в передаваемой команде) . Даташит по нему скачал, но понял, судя по всему, не всё.
Суть вопроса - какова правильная последовательность передачи команд на этот контроллер (команды у него делятся на категории: конфигурация дисплея, запись данных в буфер модуля управления дисплеем, считывание данных из буфера, а ещё отдельные 2 команды на включение/выключение дисплея). В 8-битной команде записи данных в нулевом банке памяти содержится адрес цифры, которую надо зажечь. После команды следуют 8 бит данных (соотв. 8 сегментам). Так вот я сначала даю команду на включение дисплея, потом команду на запись в буфер данных по цифре, потом сами данные. Включаю схему - выбранная на дисплее цифра моргает 1 раз. Тогда я зациклил эти три шага - цифра горит. Но, думаю, это не выход. Что-то я делаю не так. У меня не получается в этом цикле зажечь одновременно хотябы 2 цифры посредством посылки команд на запись соответствующих данных после включения дисплея.
Господа! 1111493779.gif Если кто-то знает эту микросхему, дайте знать, пожалуйста, я тогда поконкретнее вопрос задам. Заранее спасибо!
toweroff
Сначала команда 0x0E - отключаем микросхему

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

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

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

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

Чтение ИЗ микросхемы вообще не использую, клавиатуры нет, да и данные из микросхемы не нужны
Wolfenstein
Так..Угу. Только CHIP_CONFIG_PAGE и CHIP_CONFIG_ADDRESS местами перепутаны. А конфигурацию обязательно в этот камень забивать перед работой, или можно ограничиться дефолтами, если они есть?
toweroff
Цитата(Wolfenstein @ Mar 31 2013, 22:45) *
Только CHIP_CONFIG_PAGE и CHIP_CONFIG_ADDRESS местами перепутаны.

A+B == B+A
A | B == B | A

так пойдет?

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

Цитата(Wolfenstein @ Mar 31 2013, 22:45) *
А конфигурацию обязательно в этот камень забивать перед работой, или можно ограничиться дефолтами, если они есть?

если все по дефолту устраивает, чего ж не оставить? laughing.gif
но, по-моему, включать микросхему все равно нужно
Wolfenstein
Цитата(toweroff @ Apr 2 2013, 09:02) *
A+B == B+A
A | B == B | A

так пойдет?

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


если все по дефолту устраивает, чего ж не оставить? laughing.gif
но, по-моему, включать микросхему все равно нужно



A+B == B+A
A | B == B | A

Возможно мы говорили про разные вещи? CHIP_CONFIG_ADDRESS - как я понял - три бита адреса команды на запись с 0-го по 2-й. А CHIP_CONFIG_PAGE - два бита выбора страницы памяти - 3-й и 4-й в той же команде. Как можно менять местами такие вещи и при чёт тут, пардон, дизъюнкция? wink.gif Или я всё не так понял?
toweroff
Цитата(Wolfenstein @ Apr 2 2013, 22:38) *
Как можно менять местами такие вещи и при чёт тут, пардон, дизъюнкция? wink.gif Или я всё не так понял?

конечно sm.gif
Код
#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)
Wolfenstein
А, ну так это совсем другое дело)) Теперь понял beer.gif
Wolfenstein
Таг-с. С включением разобрался - не мог зажечь одновременно более одной цифры, пока не поменял в байте конфигурации настройки яркости с постоянной максимальной на переменную минимальную. А теперь такой вопрос: как поменять выводимую на дисплей информацию? По идее структура общения такова:

1 Выключаем дисплей
2 Записываем конфигурацию
3 Записываем дату какие цыфирьки надо зажечь
4 Включаем дисплей

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

Так должно быть или не так? У меня пока не получилось... wacko.gif
toweroff
Я сначала инициализирую драйвер, то есть прописываю ему конфигурацию (количество цифр, режим яркости)

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

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

Нет, при отправке данных драйвер не отключается. Данные просто "вгоняются" без всяких 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
    
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.