Кремень FMZ Реклама
Kremen FMHM Реклама

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

Ser_K
Идет загрузка
Загрузка
30.12.2019
4854
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
Комментарии к статье