8(495) 662-59-14

Главная / Форум
  • РУС / ENG
(495) 662-59-14 Многоканальный телефон Не дозвонились?
Форумы >>ЖК индикаторы >>RE: SPI не работает. MT-16S2S-2FLA
RE: SPI не работает. MT-16S2S-2FLA

amc2
Пользователи

Сообщений: 5
Регистрация: 10.03.2016

К сожалению, не работает SPI в индикаторе MT-16S2S-2FLA. Индикатор не реагирует ни на какие команды, не выводит ни единого символа. Если у вас есть подтверждение работы SPI в данном семействе индикаторов - приведите работоспособный код для Arduino.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

Петухов_Дмитрий
Пользователи

Сообщений: 1357
Регистрация: 25.11.2009

Понизьте частоту SPI ниже 200кГц, чтобы передача байта занимала более 40мкс и не нужно было делать пауз между байтами.
Подключите A0, RW и PSB на GND, E на VCC.
Установите индикатору CS=0, подайте байты 0x38, 0x06, 0x0E, 0x01, выдержите паузу не менее 1.6мс, подайте байты 0x80, 0x3C, 0x83, 'M', 'E', 'L', 'T', 0x38, 0x14, установите CS=1. На индикаторе должно появиться "MELT _". Все данные взяты из самого pdf на индикатор из примера программы для 3-х проводного SPI. Как именно выдать байты в SPI Вы должны знать сами.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

amc2
Пользователи

Сообщений: 5
Регистрация: 10.03.2016

Какое состояние должно быть XRES (17)?

Не работает. При понижении частоты до 125 кГц появляется только мигающий курсор в первой позиции верхней строки.
Последовательность для инициализации, указанная в pdf (рис. 10): 0x38, 0x0E, 0x01, 0x06 - тот же результат.

Использован режим SPI 0 (CPOL = 0, CPHA = 0), в MODE 2 - то же самое. Передача MSBFIRST (Most Significant Bit First).

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

Петухов_Дмитрий
Пользователи

Сообщений: 1357
Регистрация: 25.11.2009

XRES для нормальной работы должен быть 1, 0 это сброс индикатора.
Режим SPI по идее должен быть 3 (CPOL=1, CPHA=1), но и в нулевом (CPOL=0, CPHA=0) тоже должно работать, они отличаются лишь начальным значением SCL (который SCK в SPI), но индикатору важен лишь фронт (rising).
Проверьте паузу в 1.6мс после команды 0x01, похоже теперь всё дело в ней, раз уж курсор видите (индикатор просто не воспринимает следующие команды если пауза меньше). Можно вместо паузы выдать более 42 байтов команд, какую-нибудь типа "nop", в качестве которой использовать к примеру 0x02 (возврат сдвига индикатора к нулевому).

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

amc2
Пользователи

Сообщений: 5
Регистрация: 10.03.2016

Спасибо за быстрый ответ.
Пауза после команд 0x38, 0x06, 0x0E, 0x01 проверена, устанавливалась в диапазоне от 2 мс до 5000 мс, без изменения результата.
Обнаружено следующее: после команды 0х01 индикатор зависает, если прошло некоторое время после включения питания.
Вывести из зависания удалось только так:
* подать 0 на XRES
* выключить питание МК и индикатора
* подключить XRES к Vпит
* включить питание
После этого индикатор выдает тестовое сообщение!
Если команда 0х01 подается сразу после включения питания - индикатор не зависает.

Если в режиме, когда на экране уже отображается текст, выполнить сброс (0x38, 0x06, 0x0E, 0x01) - индикатор зависает.
Если в режиме, когда на экране уже отображается текст, выдать еще текст - индикатор зависает.

Если подать 0 на XRES - индикатор зависает. По 1 на XRES не выходит из зависшего состояния. Требуется только отключение питания.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

Петухов_Дмитрий
Пользователи

Сообщений: 1357
Регистрация: 25.11.2009

А паузу между подачей питания или отпусканием XRES в 1 до подачи команд не менее 40мс выдерживаете? Она нужна индикатору на самоинициализацию. И только после неё можно подавать команды. И лучше даже взять с запасом, не 40мс, а скажем 50 или даже 100мс.
Как что-то может портиться или зависать при выдаче текста — мне непонятно.
Ну и странности с командой 0x01 непонятны, 2мс ей точно должно хватать.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

amc2
Пользователи

Сообщений: 5
Регистрация: 10.03.2016

Некорректно отображается текст программы, вставил текст сообщения в файл.

Присоединен файл
Скачивание файлов доступно только зарегистрированным пользователям.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

Петухов_Дмитрий
Пользователи

Сообщений: 1357
Регистрация: 25.11.2009

К сожалению у меня нет под рукой такого индикатора (c SPI), потому проверить не могу.
На мой взгляд код у Вас правильный.
Разве что digitalWrite(PIN_CS_LCD, 1); лучше поставить перед SPI.endTransaction();, мало ли что там будет на пинах SPI после отпускания SPI пока не снимется CS=0. Может именно в этом и дело, проходит какая-то лишняя команда индикатору и он сбивается, хотя это и весьма странно.
Могу предложить дополнительно попробовать после выдачи команды 0x01 поднять CS в 1 и паузу выжидать уже с CS=1. А перед выводом текста снова установить CS=0.
200мс и 20мс много, 100мс при старте и 2мс после 0x01 вполне достаточно. но больше не меньше и мешать не должно.

PS. На первой картинке курсора не видно потому что не попал в кадр или его реально нет? Он ведь должен быть, команда 0x0E его включила.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

amc2
Пользователи

Сообщений: 5
Регистрация: 10.03.2016

Сделал как вы сказали: уменьшил паузы, переставил CS/endTransaction, добавил CS=1 на время паузы, после 0х01. Результат не изменился.
Картинка неудачная: курсор есть, мигает.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение

Петухов_Дмитрий
Пользователи

Сообщений: 1357
Регистрация: 25.11.2009

Попробуйте откровенно неправильный совет: убрать вообще SPI.endTransaction, а SPI.beginTransaction сделать лишь один раз в setup.

Больше у меня других идей нет.
99% что индикатор работает правильно, раз уж хотя бы иногда видите правильную картинку, но почему он сбивается от дальнейшей программы мне непонятно. Возможно без осциллографа и не разобраться.

Имя Для добавления сообщений Вы должны зарегистрироваться или авторизоваться Цитировать Получить ссылку на сообщение
Сейчас на форуме (гостей: 16, пользователей: 0 , из них : 0 )