8(495) 662-59-14

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

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

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

Доброго вечера. Приобрел данный дисплей чтобы выводить информацию с одноплатного компьютера.
Подсветка горит, но не выводит изображение.
Есть несколько вопросов.
Напряжение пинов 3.3 на одноплатнике высокий уровень, вроде по даташиту на индикатор это допустимо или я ошибаюсь?
Задержки в примере указаны в нс, я указываю округляя значение вверх в микросекундах, это допустимо:?
Reset обязательно дергать при инициализации, в примере под ардуино вывод вообще не задействован.
При включении не должны гореть черные прямоугольники? На некоторых китайских индикаторах я такое видел.
Если не подключить резистор для регулировки контрастности работать будет?
Если есть возможность просмотрите по диагонали код, слепил опираясь на архив который был на вашем сайте плюс нашёл похожую библиотеку для управления дисплеем KS0108. Но скорее всего что-то делаю не так.

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

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

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

Мой исходник

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

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

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

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

Напряжение пинов 3.3 на одноплатнике высокий уровень, вроде по даташиту на индикатор это допустимо или я ошибаюсь?Допустимо, от 2.0В и выше, кроме вывода RES, ему надо 0.7Vcc, что при питании от 5.5В может составить 3.85В. В нашей доке это всё есть.

Задержки в примере указаны в нс, я указываю округляя значение вверх в микросекундах, это допустимо:?Да.

Reset обязательно дергать при инициализации, в примере под ардуино вывод вообще не задействован.Не обязательно, при корректной (достаточно коротким фронтом) подаче питания сработает встроенный сброс. Но для надёжности лучше сбросить самому выводом RES.

При включении не должны гореть черные прямоугольники? На некоторых китайских индикаторах я такое видел.Не должны: после сброса индикатор выключен (командой Display OFF). Если горят - это признак сильного переконтраста (и вероятно ничего на их фоне видно не будет).

Если не подключить резистор для регулировки контрастности работать будет?Показывать ничего не будет - при этом на ЖК стекло не подаётся напряжение. Но сам индикатор работает (можно записывать и считывать информацию).

Если есть возможность просмотрите по диагонали код,Посмотрел.
1. Код включения индикатора в константе DISPLAY_ON_CMD должен быть 0x3F, а не 0x3E, это код выключения. Т.е. индикатор у Вас остался выключенным. И совершенно логично что ничего на нём не видите ...
2. В строках 87 и 102 задержки в 3мкс может не хватить, по доке между любыми двумя обращениями (кроме чтения статуса) должно проходить не менее 8мкс, у Вас пройдёт 1+3+3=7мкс (от сброса сигнала E до повторной установки), плюс сколько займут прочие операции, их конечно много и они вряд ли уложатся все в 1мкс, но для надёжности лучше задержку чуть увеличить.
В нашем примере кода MT-12864.c перед любым обращением стоял опрос готовности WaitReady(), потому задержка между сигналами E и не 8мкс, а всего 0.41мкс. У Вас опроса готовности нет, значит нужна задержка не менее 8мкс.
3. Переменные SCREEN_WIDTH и SCREEN_HEIGHT объявлены, но не инициализированы и какое в них значение мне неизвестно. Полагаю правильное, 128 и 64.
4. Разбираться в writeChar() не стал, на беглый взгляд всё нормально, но использование деления с плавающей точкой на МК вместо (charHeight+7)/8 это нечто ...
В остальном проблем в исходнике не вижу, работать (с учётом вышесказанного) должно.

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

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

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

Спасибо, буду искать ещё причины, тайминги увеличил все до 8млс и поменял код включения. Пока не отображает символ.

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

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

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

Уберите вызов syncBuffer() - после инициализации индикатора он должен показать "мусор" (произвольные данные), ведь очистку внутренней памяти никто по сбросу не делает и она принимает произвольное значение. Если не показал - команды ему не проходят и надо изучать или подачу сигнала RES, или внутренность writeCommand().

После инициализации индикатора (и без вызова syncBuffer() или уже после него) запишите в индикатор просто любой ненулевой байт данных - он должен появиться хоть где-то на экране. Если не появился - изучать внутренность writeData().

Перед вызовом syncBuffer() запишите в framebuffer что-то ненулевое (всё равно что) - оно должно появиться на экране. Если не появилось - изучать внутренности syncBuffer().

Вызовите writeChar(), а потом выдайте на комп в терминал данные из framebuffer (с правильных адресов или всего) - если некорректные, изучать внутренность writeChar().

Если все этапы пройдут нормально, то всё заработает. Я ошибок кроме озвученных в исходнике не замечаю.

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

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

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

использование деления с плавающей точкой на МК вместо (charHeight+7)/8 это нечто
Можно разъяснить почему это плохо? Опыта программирования под МК совсем нет никакого, только ARM и x86.

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

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

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

Как в ARM не помню (там есть разные варианты в зависимости от версии ядра процессора и реализованных расширений), а вот в x86 команда деления на порядок медленнее команды умножения и сложения/вычитания/сдвигов. А в МК команд деления обычно нет вообще и она будет реализована как процедура, с кучей вычитаний и сдвигов. А если ещё и число длинное (не влезает в один регистр), то код разрастается ещё в разы. И легко может занять пару сотен тактов вместо двух (или полдесятка) тактов сложения и сдвига. Да плюс ещё операции с показателем степени и нормализация (которые не нужны для целых чисел) ...

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