Новая графическая панель. Продолжение.

Ser_K
Идет загрузка
Загрузка
30.12.2019
2580
9
Техничка

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

13

Здравствуйте.

Моя TFT панель для 3D принтера, о которой я рассказал в первой статье , изначально разрабатывалась для использования с платой и прошивкой Smoothieware. Однако на данный момент я уже добавил поддержку (пока неофициальную) для Marlin-1 и Marlin-2. Для работы с 5-вольтовой AVR изготовил переходную платку с преобразователем уровней и SD карточкой. На данный момент проверена работа с платами на MEGA2560, STM32F103C8 и LPC1758. Для них я использовал макетные платы, о подключении к которым расскажу ниже. Так же добавил поддержку экранов на чипах ILI9341 с разрешением 320х240 и ILI9327 с разрешением 400х240 (текстовый эквивалент 24х10 - с чётным числом символов в строке для симметрии). 

 Так как теперь панель поддерживает разные прошивки, то изменил текст стартовой заставки на более универсальный 

На цветопередачу фотографий внимания не сильно обращайте, она немного искажена. Marlin стартует так

В процессе работы с Marlin, в котором у панели есть прогрессбар «из коробки», добавил прогрессбар и для Smoothieware и переставил верхние строчки над прогрессбаром. Прогрессбар в процессе заполнения меняет цвет от оранжевого до зелёного и выглядит так

Для Smoothieware какие-то фишки в панель добавить сложновато, так как драйвер панели осуществляет фактически только вывод информации, а формирование выводимой информации осуществляется вне драйвера. В частности, перемещение строчек, как на фотке выше, осуществляется на стороне панели. Так же добавил вывод процента кулера, который пока официально не выводится на экраны. Реализовал коряво, но работает. Сам процент выводится прямо над иконкой кулера, а для вывода остального текста нужно отключить вывод иконки нагрева. В Marlin драйвер панели сам формирует основной экран и его можно сделать фактически любым. Основной экран для Marlin я сделал практически таким же, как он сейчас выглядит для Smoothieware, но и здесь дополнительно поменял строчку статуса и прогрессбар относительно стандартного расположения, чтобы прогрессбар был ближе к его числовому значению. Так выглядит основной экран с одним хотэндом

А так с двумя, когда текст над вентилятором не закрыт иконкой нагрева и один из хотэндов не включен

Редактирование параметров в меню Marlin реализовано в отдельной строке, а не в новом окне, как в Smoothieware, но для обоих вариантах есть возможность установить другие цвета для строки редактирования по сравнению с цветами курсора в меню. Для размещения строки редактирования параметра в Marlin я выбрал последнюю строчку, так как большинство меню имеют длину менее 10 строк.

Для Smoothieware редактироание параметра выглядит так

Так же в драйвере панели в Marlin формируется окно для редактирования точек UBL

После выбора в рамке начальной точки для редактирования на обычной панели по умолчанию открывается новое окно со строкой для редактирования значения смещения по оси Z. После изменения значения точки и нажатия на энкодер в этой же строке выводится значение для соседней точки и так далее. Так как у меня экран больше, то строка редактирования выводится в том же окне с рамкой и отображаемой точкой, а после ввода значения точки и перехода к соседней, положение обновляется и у точки в рамке. После ввода значений всех соседних точек осуществляется выход в основное окно с режимом редактирования Fine Tuning Mesh

В случае возникновения критических ошибок появляется соответствующий экран

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

Изначально я добавил поддержку панели для Marlin-1 под AVR для шины I2C. После чего в августе начал портирование драйвера панели под Marlin-2 с текущей на тот момент версией исходников. Тоже начал с I2C шины и той же платы на AVR - проблем с работой I2C шины не возникло. Затем перешёл к 32-битным платам. Первой была STM32F103C8T6 BluePill. Всё заработало нормально и я продолжил с макеткой на LPC1758 (свою плату на Smoothieware трогать не хочу). А вот тут начались проблемы. Портированный драйвер I2C шины с ходу имел как минимум ошибку с передачей адреса устройства – байт адреса сдвигался вправо перед передачей. Хорошо, что здесь был комментарий о сомнительности такой операции и я это быстро исправил. Автор этого порта явно не проверял качество своей работы. Но косяки точно ещё остались и не позволяли шине нормально работать, поэтому я остановил работу в этом направлении. Далее я начал подключать панель по шине SPI. Сначала под STM32F103C8T6, потом под LPC1758 SPI. Плату на AVR подключал последней после изготовления переходника с согласователем уровней. На AVR SD карточка заработала в общем нормально. Поддержка SD карточки в STM32F103C8T6 не влезла, так что проверить её работу на данном контроллере не получилось. А вот на LPC1758 возникла интересная проблема в работе панели, когда карточка установлена. Заключается она в следующем – при запуске печати с карточки экран остаётся в текущем меню до окончания печати и на энкодер не реагирует, хотя звуковой сигнал при нажатии выдаётся. Так же при печати с ПК основной экран не обновляется до завершения печати, но если карточку вынуть, то при печати с ПК проблем нет. В декабре скачал новые исходники Marlin-2 и внёс для него соответствующие изменения. При этом LPC1758 с карточкой работать лучше не стал, а прошивка для STM32F103C8T6 перестала влазить в 128к примерно на 15к даже при минимальной конфигурации. При этом размеры прошивок под другие рахитектуры в размерах особо не увеличились. То есть можно сделать вывод, что на разных архитектурах имеются свои косяки в портированных под Marlin библиотеках. На данный момент их больше для LPC1758. Так же проверил сборку прошивки под архитектуру DUE для контроллера SAM3X8E и под STM32F407 но без проверки в железе из-за отсутствия такового.

О вариантах подключения. Во-первых, выбор используемой шины в Marlin задаётся строкой #define SPI_TFTGLCD или #define LCD_CONNECT_BY_SPI в файлах Conditionals_LCD.h для разных Marlin в секции TFTGLCD_ADAPTER. Если строка закомментирована, то используется шина I2C. Для использования панели с SD карточкой текущую версию панели нужно доработать аппаратно – нужно добавить коммутатор линии MISO между SD карточкой и панелью по сигналу выбора панели и на всякий случай нужно отключать сигнал выбора карточки при работе с панелью. Так же для подключения к 5-вольтовым платам на AVR контроллерах нужно добавить согласователь уровней для шины SPI. Для шины I2C тоже можно сделать согласователь, а можно на стороне платы с AVR контроллером снять подтягивающие резисторы на шине I2C и поставить аналогичные резисторы на стороне панели, подтягивая шину к +3.3В. Эти схемотехнические доработки можно выполнить по разным схемам на разных компонентах. На форуме Радиокота я выложил схему двух вариантов реализации таких доработок. 

Изменения к обоим Marlin пока выкладываю на Радиокоте в соответствующей ветке, проект панели лежит на Гитхабе.

Для подключения панели к разным платам через SPI проще всего в соответствующем файле описания платы найти строчку #if HAS_SPI_LCD и перед ней вставить примерно такую секцию:

    #if ENABLED(TFTGLCD_ADAPTER)

      #define BEEPER_PIN -1

      #define BTN_ENC -1

      #define BTN_EN1 -1

      #define BTN_EN2 -1

      #define DOGLCD_CS P3_26

    #else

а после #endif, завершающего секцию HAS_SPI_LCD добавить ещё один #endif. В выше приведенном фрагменте такую первую строчку я использовал для платы BIGTREE SKR V1.3, так как использовал её описание для своей макетки. Следующие строчки отключают штатный бузер и энкодер, так как используются встроенные в панель, а освободившиеся пины можно использовать для других целей. Номер пина и формат его записи для сигнала DOGLCD_CS зависит от конкретной платы. Так как обычно шина SPI выводится на один из разъёмов ЕХР, на который выводятся так же сигналы BTN_EN1 и BTN_EN2, то для DOGLCD_CS можно задействовать освободившийся пин от одного из этих сигналов и обойтись подключением шлейфа от панели только к одному разъёму. Так же освобождаются пины, выведенные на второй разъём ЕХР и их тоже можно использовать для других целей. Питание на панель можно подать одиночным проводом.

Шина I2C в свободном доступе выведена далеко не на всех платах. Для её использования нужно анализировать схему конкретной платы и выбирать подходящий номер I2C порта используемого контроллера, который прописывается в файле Wire.cpp для соответствующей архитектуры. Например, для платы BluePill на STM32F103C8T6 я выбрал интерфейс I2C2, соответственно в Wire.cpp в конце прописал TwoWire Wire(2); Других настроек в принципе не требуется, но можно поотключать пины энкодера, бузера и каких-нибудь кнопок, если они прописаны в файле конфигурации платы, и задействовать их для расширения других функций.

Так же, если найдутся желающие помочь в добавлении поддержки других прошивок кроме Marlin и Smoothieware, то я не против.

В общем, кому интересно - повторяйте, проверяйте. Если особых проблем не будет, то попробую протолкнуть поддержку этой панели в официальные ветки Marlin, а потом может и в Smoothieware добавят. По техническим вопросам лучше обращайтесь на Радиокот.

Поздравляю всех с Новым годом и пусть у вас всё получается.

Подпишитесь на автора

Подпишитесь на автора, если вам нравятся его публикации. Тогда вы будете получать уведомления о его новых постах.

Отписаться от уведомлений вы всегда сможете в профиле автора.

13
Комментарии к статье

Комментарии

31.12.2019 в 02:49
0

почему бы вам не менять цвет "горячего" узла например на красный, вместо вывода "градусника"?

или вообще сделать на иконке "бегущую волну" - градиентом красно-оражевого цвета

ресурсов у СТМки для такой анимации достаточно и место на экране освободится

31.12.2019 в 11:36
2

Я делал так, как нужно мне. Исходники открыты - меняйте под свои хотелки сколько угодно.

31.12.2019 в 14:42
0

вы предлагаете проект для повторения и даже хотите, чтобы его включили в офрелиз. в таком случае ответ "Я делал так, как нужно мне" - неверный. придётся прислушиваться к пожеланиям и предложениям, улучшать и дорабатывать его.

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

в любом случае - спасибо за разработку.

31.12.2019 в 19:04
0

Я так понял, что Вы или статью не читали или в код не смотрели или ещё вариант, который я не озвучу в честь праздника. Так как драйвер панели, который я хотел бы видеть в прошивках для основных плат, не занимается оформлением внешнего вида иконок панели. Это дело самой панели и её вид такой, каким я его вижу. И повторивших её людей такой вид тоже устраивает. Сделайте свой вариант и выложите в свободный доступ и пусть люди решают, что им больше нужно. А на данный момент альтернатив просто не много - текстовые панели, ч/б вариации 12864 и MKS с тачскрином. Может ещё какая покруче и подороже.

31.12.2019 в 20:00
0

ненужно так агрессивно реагировать на предложения по улучшению вашей прошивки. я и статью читал и комментарии на форуме.

уповать на безальтернативность - глупо. далеко не всё, что делается для себя - выносится в паблик. вам это нравится - получите свои пять минут славы. мне слава без разницы. я не буду гоняться за "признанием" в сетях.

у вашего "проекта" есть существенный недостаток: неуниверсальность. "простому смертному" надо искать экран такой же или подобный применённому вами. поддерживать другие варианты вы отказываетесь, аргументируя отсутствием аппаратных средств. это называется - неуважение к пользователям.

впрочем, "Радиокот" - всегда этим отличался от серьёзных ресурсов - "ясделаль", а если вы не можете повторить - идите лесом.

на этом общение с вами прекращаю - тратить своё время на подобных вам - излишняя роскошь.

P.S. вариаций, кстати, больше, чем вы перечислили. в том числе - и открытых. ищите сами.

31.12.2019 в 21:04
1

Как раз в моём ответе никакой агрессии не было. А вот ваша реакция на него агрессивная и подтверждает, что статья не читалась или читалась по диагонали.

уповать на безальтернативность - глупо

Я ни на что не уповаю и БЕЗальтернативности нет, так как и я кратко привёл альтернативы и

P.S. вариаций, кстати, больше, чем вы перечислили.

Просто меня эти "альтернативы" не устраивали и я сделал свой вариант.

Я так понял, что ни смотря на

лично у меня достаточно квалификации, чтобы сделать так, как мне нужно (и сделаю

мы не увидим плодов этой работы, так как

мне слава без разницы. я не буду гоняться за "признанием" в сетях.
у вашего "проекта" есть существенный недостаток: неуниверсальность. "простому смертному" надо искать экран такой же или подобный применённому вами

А простому смертному всегда приходится искать компоненты, аналогичные заложенным в любую конструкцию. Но если начать внимательно читать даже вышеприведенную статью, то можно легко увидеть заявленную поддержку экранов на 3 разных чипах и с разным разрешением и экранов на таких чипах просто дохрена. Универсальности здесь вполне достаточно.

это называется - неуважение к пользователям

Это называется неуважение к разработчику. Сначала покупают какую-нибудь деталюху потому, что дешёвая или просто была в продаже или про запас, а потом хотят, чтобы кто-то её пристроил в уже разработанную конструкцию и обижаются, что этого не делается.

на этом общение с вами прекращаю

Ну и ладушки.

01.01.2020 в 21:24
0

Новый год не прошёл даром. Решил проблему обновления экрана при работе с карточкой на платформе LPC. Возможно такая проблема будет и на других платформах, но решение пока только для LPC. На Радиокоте выложил обновление.

04.01.2020 в 21:49
0

Кстати а вы не рассматривали написать прошивку под HMI панель? Т.е. стереть родную и запихнуть вашу. Цена не высокая, и все уже на борту есть. И качественный экран и stm32

https://nextion.tech/basic-series-introduction/

05.01.2020 в 11:25
0

Не рассматривал по причине не нужности панели с тачскрином лично мне. Да и цена ТАМ на самую дешёвую модель в 3 с лишним раза дороже без учёта доставки, чем я потратил на свою панель. И экран у дешёвых моделей такой же - 320х240. При этом уже есть готовые решения с тачскрином для 3D принтеров в виде MKS панелей. Так что делать ещё аналог MKS панели желания нет. А моя панель - это фактически на порядок более качественная замена дешёвым ЧБ панелям за те же деньги.

Для написания комментариев, пожалуйста, авторизуйтесь.

Читайте в блогах

Проводка Косы

Пластик PETG от FDPlast. Исследование усадки.

Когда срочный заказ, а времена ждать нет.

Паутина на Эндоре

Стол 300х300 на одном ремне без редуктора.

Диорама по вархмамеру.(Wip)