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

Идея проста - заменить генераторы частоты, терминалы RS-485 и CAN одним самодостаточным прибором, этаким мультитулом для разработчика. В этой статье расскажу о том, что за девайс я собрал.

Предыдущие версии

Самой первой версией была макетка с двумя таймерами 555, которые управляли транзисторами (к питанию/к земле). Этой платой я периодически пользовался, пока она не сломалась. Перемычки и переменные резисторы (на схеме нарисован постоянный) позволяли менять частоту ШИМ. Свои задачи плата выполняла, но это прям временное решение. Эта плата имитировала сигнал с генератора и датчик Холла. Существуют уже готовые подобные модули, но они мне не подходили по диапазону частот. 

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

Вторая попытка была на базе bluepill (STM32F103), содержала три транзистора, реле и RS-485. Наличие микроконтроллера позволяло точно задавать параметры работы ШИМ и производить опросы по RS-485, но для изменения параметров необходимо было перезаписывать код, а это не удобно. 

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

Версия 3
Версия 3

Техническое задание

Исходя из желаемого функционала и недостатков предыдущих попыток, я выписал все свои хотелки, которые реализую в следующем устройстве:

  • Два ШИМ с напряжением до 24 В, до 10 кГц. Питание будет осуществляться от внешних источников. Этими выводами я обычно проверяю работу счетчиков, механизмов захвата частоты и прочего

  • Два ШИМ с подтяжкой на землю (имитация концевых выключателей, датчиков Холла), до 10 кГц

  • Наличие RS-485. Должен быть реализован простой терминал, который позволяет отправить и принять сообщение с заданной скоростью

  • Аналогично для CAN

  • Возможность легко регулировать параметры ШИМ

  • Форм фактор планшета, сенсорный дисплей.

Определение конструкции

Почесав репу и выпив литр чая, я начал подбирать комплектующие. Для управления я решил использовать сенсорный 7ми дюймовый дисплей DWIN (конкретно DMG80480C070_04WTC). Причина выбора - простота работы с ним: прошивка собирается в специальной программе от производителя, общение с микроконтроллером происходит по UART. Минимум временных затрат на получение результата.

Дисплей, который год ждал в шкафу своего звездного часа
Дисплей, который год ждал в шкафу своего звездного часа

В качестве транзисторов я решил использовать интеллектуальные ключи от infineon(BSP76E6433HUMA1 и BTS462T). Они имеют встроенные драйвер управления и защиты. С ключами из этой серии я уже успешно работал в другом проекте и мне они понравились. Единственный нюанс - нужна минимальная нагрузка, не получится подключить вывод просто к осциллографу и посмотреть, какой частоты ШИМ.

Над микроконтроллером долго думать тоже не пришлось. В прошлом году я опробовал серию STM32G0, которая мне очень понравилась, поэтому в этом приборе решил использовать камень побольше - STM32G4. Я давно хотел познакомится с этим семейством и пет-проект отлично подходит для этого.

Работать девайс будет от блока питания на 12В (LP-340). Часто использую такие в своих стационарных проектах.

Корпус под 3д печать.

Разработка печатной платы

Схема принципиальная
Схема принципиальная

Рассмотрим содержимое платы подробнее:

Преобразователь питания на базе SCM1301ATA от MORNSUN понижает входные 12В в 5В, которыми идут на дисплей. Далее 5В преобразуются в 3.3В с помощью LDO (LDK130M33R). На входе питания стоит самовосстанавливающийся предохранитель.

Интерфейсы связи представлены микросхемами ADM3485EARZ и MCP2551T-I/SN. К ним добавлены защитные диоды и терминальные резисторы.

Обвязку микроконтроллера я взял из “Getting started with STM32G4 Series”. Вывод BOOT я повесил на pls, функционалом которого в итоге не пользовался. Сейчас он просто подтянут к GND. 

Дисплей к микроконтроллеру подключен через согласователь уровней 3.3В - 5В на базе 2х nmosfet и нескольких резисторов. Скорее всего, можно было обойтись и без них, но я решил перестраховаться.

Два ключа на питание и столько же на землю. 4 вывода banan на корпусе для выхода ШИМ и еще 2 (обозначены IN) для входа источника питания.

На схеме есть разъем для мигания светодиодами в случае активной передачи по CAN и RS485, но их почти не видно, так как все происходит слишком быстро, поэтому использовать эту часть я перестал.

Плата получилась размером 60х50 мм, что довольно много для такого небольшого количества компонентов. Габариты в основном обусловлены разъемами с трёх сторон. Планировалось, что одна сторона платы с клеммниками будет доступна для подключения снаружи устройства, а другие использоваться для внутренних соединений (дисплей, выводов banana и светодиодной индикации).

Корпус

То, на что я потратил больше всего времени - это корпус. Его я изготавливал методом fdm 3д печати. Моими принтерами были проверенный Ender 3 Pro, на котором я печатал шильдики, и Creality K1, на нем я печатал все основные элементы корпуса.

Скрытый текст

Ender 3 со мной уже лет 5-6, и из десятка станков, с которыми я работал, этот самый приятный в эксплуатации. Я установил на него Titan aero и skr mini, в итоге он обошелся мне в 20к суммарно. Второй принтер - creality K1, появился у меня недавно, это мой первый опыт общения с klipper и я всё ещё учусь с ним работать. Принтер очень быстрый, но как он будет себя вести в длительной эксплуатации - пока не знаю. Стоил он на распродаже всего 37к. Оба принтера не стал бы советовать новичкам, так как первый устарел, а второй сложный.

Изначально я хотел распечатать корпус из ABS, после зашлифовать и покрасить, но мелкие вытянутые элементы получались с трудом. Из PLA вышло лучше, чем из ABS или PETG, поэтому решил использовать его (PLA FDplast).

Лицевая панель
Лицевая панель

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

Раньше я всегда печатал прямоугольные коробки и первые варианты этого устройства были такими, но за прямые углы неудобно браться руками и само устройство выглядело так, как будто его вырубили топором, поэтому я добавил скруглений. Теперь он имеет большое количество сглаживаний и поверхностей под углом, что не очень правильно для печатной детали, так как усложняет процесс изготовления. Панели я печатал лицевой частью вверх, чтобы все изгибы поверхностей были без поддержек, пожертвовав качеством внутри. Дабы скрыть слоистость модели на наклонных гранях, я выставил высоту слоя 0.12 мм для передней панели, а заднюю нарезал на стандартных 0.2 мм.   

Нарезка задней панели в слайсере. Поддержки (зеленые) при таком расположение детали занимают треть от объема всей печати.
Нарезка задней панели в слайсере. Поддержки (зеленые) при таком расположение детали занимают треть от объема всей печати.

Для удобства я добавил две ножки сзади корпуса, как на клавиатурах, что позволяет поставить “Луч” под углом в примерно 35 градусов. Изначально я делал одну большую ручку, как показано на картинке ниже, но она оказалась неудобной. К тому же, эта ножка съедала много пространства внутри корпуса и не обеспечивала надежной фиксации.

Quadratisch. Praktisch. Gut! с одной большой ножкой
Quadratisch. Praktisch. Gut! с одной большой ножкой
Итоговый вариант с двумя ножками
Итоговый вариант с двумя ножками

Для вывода контактов PWM и IN я использовал гнезда BANANA PL2493, которые я разместил наверху устройства. Держатся они за счет комплектных гаек и фиксатора резьбы. 

Панель banana
Панель banana

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

Тут я уже всерьез начал задумываться о приобретении двухэкструдерного принтера, который отлично подходит для таких задач. Краткое пояснение: это принтер, имеющий два независимых экструдера, позволяющие печатать деталь из двух разных пластиков. Самый простой пример - делать буквы другого цвета сразу внутри детали. (как например на панельках на терминалах для покупки билетов на электричку из Москвы). Но мой коллега предложил очевидную и рабочую идею - печатать не буквы, а вырезы под них, и это сработало.

Мои попытки в печать шильдиков. Сверху самые первые, внизу уже итоговые
Мои попытки в печать шильдиков. Сверху самые первые, внизу уже итоговые

Как изготовить такую панельку? Все просто, я чертил пластину толщиной 1.6 мм, в ней вырезал необходимые мне слова. После этого, во время нарезки модели в prusa slicer я находил первый слой, который должен печататься другим цветом, и ставил на нем маркер смены пластика, это кнопка “+” рядом с номером слоя. В других слайсерах эта функция тоже доступна.

Скрин из prusa slicer. После нажатия на кнопку программа автоматически красит две половинки модели в разные цвета
Скрин из prusa slicer. После нажатия на кнопку программа автоматически красит две половинки модели в разные цвета

С такой настройкой ставлю на печать, по окончанию первой половины модели принтер запросит смену пластика, после чего доделывает вторую часть. Easy!

Из нюансов это то, что для небольших надписей лучше использовать сопло поменьше (у меня было 0.2 мм), но даже это не всегда спасает от дефектов и нитей на модели. Панелька с надписями PMW так и не получилась отличного качества из-за очень маленького размера букв, пришлось дорабатывать ее пинцетом. Еще был вопрос с цветами: после черного филамента нужно выдавить очень много пластика, чтобы получить не темный цвет. По фотографиям можно заметить, что все шильдики темнее, чем корпус. Думаю, что в качестве основания в будущем нужно будет использовать другой цвет, либо поменять цвета между собой.

Я пробовал красить шильдики, но из-за слоистости панелек краска часто затекала в неположенные места, поэтому этот вариант я отбросил почти сразу.

Финальный корпус. Итоговые габариты - 202.5х117.4х35 мм
Финальный корпус. Итоговые габариты - 202.5х117.4х35 мм

Выводы по корпусу: спустя несколько килограммов пластика есть стойкое ощущение, что лучше было бы печатать более черновой вариант из абс, который я потом бы зашлифовал и покрасил. В следующий раз так и попробую сделать. Еще есть идея напечатать корпус из простого композита (мне посоветовали Carbex MF, но пока не попробовал), чтобы получить красивую шершавую поверхность. Судя по описанию, небольшой процент добавок в этом пластике позволяет корпусу оставаться не абразивным для рук пользователя. Еще нужно сделать более толстую переднюю крышку, тонкая очень легко гнется.

Промежуточные варианты корпуса (большая часть)
Промежуточные варианты корпуса (большая часть)

В плане производства шильдиков было бы здорово обзавестись двухэкструдерным принтером или ams системой, чтобы получать сразу хорошие шильдики. Либо придумать иной способ нанесения надписей.

P.S. Небольшую кривизну основания половинок корпуса получилась из-за автоматического выравнивания стола, которое искривляет первый слой так, чтобы он хорошо печатался, поэтому обе части идеально не сошлись друг с другом. Можно выставить стол с помощью подкладывания каптонового скотча, что я и сделаю в будущем.

Работа с дисплеем DWIN

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

Прошивка для DWIN создается в программе DGUS и загружается в дисплей с помощью sd карточки. Я не буду подробно рассказывать об этом, так как на эту тему много информации в интернете.

Создавая новый проект в среде DGUS, необходимо выбрать разрешение дисплея, сгенерировать шрифт и загрузить заранее нарисованные в графическом редакторе фоновые изображения. Каждое изображение - отдельное рабочее поле. Заготовленные элементы уже должны иметь все необходимые поля и надписи. Конечно можно добавить их и в этой программе, но инструментов тут немного. Я подготовил 3 изображения с полями для ШИМ, CAN и RS-485 и две картинки с клавиатурами.

Первое окно - настройки режима работы ШИМ выводов
Первое окно - настройки режима работы ШИМ выводов

Создав проект с фоновыми изображениями, начинаем добавлять поверх рисунка интерфейс управления. На каждую нарисованную кнопку приходится два поля - первое поле отображает переменную (Data variables), а второе поле вызывает клавиатуру для ввода (Data Input).

Каждый элемент меню сохраняет свое значение в выделенной для него переменной, расположение и объем которой указывается пользователем. Адрес VP(0x) это место в памяти дисплея, куда будет записываться значение этого поля, для пользовательских переменных он начинается с 0x5000. Так же настройки позволяют задать минимальное и максимальное значение переменной и указывают на клавиатуру для ввода. Подробно про настройки можно прочитать тут.

Клавиатура это отдельное фоновое изображение (в моем случае 3 и 4). Напрямую попасть в эти области нельзя, но при нажатие поля “Data Input” клавиатура появляется на экране. Поле “Keyboard settings” как раз отвечает за то, откуда будет вызвана клавиатура и в какую часть экрана. Я использую две клавиатуры - для ввода цифр и текста. Первая используется для ШИМ и вводит числовое значение. Вторая же вводит символы от 0 до f. Так-же присутствуют кнопки выхода из клавиатуры и стирания предыдущего символа.

Клавиатуры
Клавиатуры

Для отображения введенного значения используется поле “Data variables”, которое показывает содержимое указанного адреса. Это поле я ставлю поверх предыдущего, чтобы отображать значение внутри кнопки для ввода.

Первое окно дисплея с элементами интерфейса
Первое окно дисплея с элементами интерфейса

В правой части экрана, поверх Гаечки, находится кнопка перелистывания страницы. Они перелистываются только в одну сторону, что в случае всего трех страниц приемлемо.  

В DGUS есть функция “Data auto-uploading”, включив которую, мы будем получать сообщение каждый раз, когда пользователь изменяет состояние ячейки памяти. Это позволяет нам не опрашивать дисплей постоянно, а просто ждать от него соответствующей команды, в которой будет указано, куда и что написал пользователь. 

Остальные страницы дисплея сделаны похожим образом, отличие только в том, что местами можно вводить текст (ввод в hex). 

Работа дисплея
Работа дисплея

В целом, разработка такой простой программы для DWIN не имела больших сложностей, но были нюансы, про которые надо упомянуть:

  1. К проекту необходимо сгенерировать файл со шрифтами, иначе не будет работать предпросмотр, но на самом дисплее прошивка работает. Как создавать шрифты можно посмотреть тут (с 11 минуты)

  2.  Очень раздражает пищалка. Ее можно отключить командой с контроллера, что я покажу далее

  3. Дисплею требуется время на включение, поэтому в начале работы прошивки stm32 стоит задержка на полторы секунды

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

Работа с микроконтроллером

Прошивку для STM32G4 я делал в STM32IDE, библиотека HAL. В проекте используется два UART, CAN, несколько таймеров и GPIO.

Полупустой контроллер ждет следующей версии проекта
Полупустой контроллер ждет следующей версии проекта

В первую очередь рассмотрим инициализацию дисплея, которая представляет из себя ожидание в 1.5 секунды и отправки команды отключения пищалки: 

void sound_off (void)
{
	uint8_t data_tx[10];
	data_tx[0] = FRAME_HEADER_H;
	data_tx[1] = FRAME_HEADER_L;
	data_tx[2] = 0x07;
	data_tx[3] = DWIN_WRITE_VAR;
	data_tx[4] = 0x00;
	data_tx[5] = 0x80;
	data_tx[6] = 0x5A;
	data_tx[7] = 0x00;
	data_tx[8] = 0x00;
	data_tx[9] = 0x30;
	HAL_UART_Transmit(&huart3, data_tx, 10, 0xFFF);
}

Глобально задача контроллера выглядит так - он получает команду по UART, после чего обрабатывает ее и делает что-то с ШИМ, RS-485 или CAN. Еще контроллер может получить сообщение по интерфейсам и должен будет отправить их дисплею. Получается, что задачи всего 3: получить сообщение по UART (дисплей), по RS-485 или по CAN.

Под эти три задачи я завел кольцевые буферы, каждый под свою задачу. Кольцевой буфер позволяет удобно обрабатывать полученные сообщения (хороший пример тут https://istarik.ru/blog/stm32/151.html). Сообщения в кольцевой буфер принимаются в соответствующих прерываниях.  

Основной цикл программы выглядит довольно просто - контроллер висит в ожидании какой-нибудь посылки:

while (1)
 {
	  if (byte_available(2) > 1)
		  receiveCAN();
	  if (byte_available(1) > 5)        // минимальная посылка 6 байт
		  analysisMessage();
	  if (byte_available(0) > 1)
		  receiveRS485();
}

Если приходит сообщения с дисплея, то его необходимо разобрать и вычленить из него полезную информацию. Передача от DWIN выглядит например так:  0x 5A A5 06 83 50 24 01 01 90

Где байты номер:

  • 0,1 - стандартное начало сообщения от DWIN

  • 2   - количество байт

  • 3   - тип команды (0x82 - запись, 0x83 - чтение)

  • 4,5 - адрес VP (элемента дисплея), с которым происходит взаимодействие

  • 6   - количество адресов VPs (words) для чтения

  • 7.. - данные

Если идет работа со строкой, то по окончанию будет еще два или три байта 0xFF.

Данная команда означает, что пользователь изменил переменную, записанную по адресу 0х5024 (частота PWM 4) на значение, равное 0x190. Все довольно просто.

Функция analysisMessage() разбирает полученное сообщения и переинициализирует необходимую периферию. Две остальные функции, receiveCAN и receiveRS485, переводят полученные снаружи устройства команды в символы и отправляют на дисплей в соответствующее поле.

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

Выводы

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

Первая реальная задача - проверяю, корректно ли записывается во FLASH захватываемая частота и время работы
Первая реальная задача - проверяю, корректно ли записывается во FLASH захватываемая частота и время работы

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

Дисплей DWIN и среда DGUS. Они позволяют действительно быстро создать интерфейс, удовлетворяющий меня сейчас, но как реализовать на нем новые хотелки - вопрос открытый. Терминалы необходимо переделать, чтобы они могли показывать поток приходящих сообщений, а не только самое последнее.

Проект вызывает огромное желание добавить в него всякого, например хочется сделать ряд PBS с цифровыми выводами и стандартными интерфейсами, типа SPI\I2C\UART. Еще мечтаю реализовать возможность задавать порядок действий, типа “отправь сообщение, подожди 5 секунд и включи ШИМ”. Да и сохранение параметров работы на дисплее тоже бы не помешало добавить, вбивать каждый раз одну и ту же скорость RS-485 неудобно.

Очень надеюсь, что в следующем году смогу выложить сюда статью о новой версии своего прибора. Всем спасибо за внимание!

Репозиторий проекта: https://github.com/FamNuven/Ray

P.s. pcb файл платы выкладывать не стал, так как она с парой ошибок.

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

Комментарии (15)


  1. rotabor
    30.08.2024 18:23

    Супер!


  1. REPISOT
    30.08.2024 18:23
    +1

    Еще есть идея напечатать корпус из простого композита

    С композитами надо быть осторожным. Очень легко съедает латунное сопло. Тут или сразу брать стальные (все равно съест) или покупать латунные как расходник. Но стальные хуже греют из-за низкой теплопроводности.


    1. nicher Автор
      30.08.2024 18:23

      Уже едет стальное от треугольников)


    1. 0xED
      30.08.2024 18:23
      +1

      Съедает не только сопло, а еще и термобарьер, и шестерни, и вообще всё, о что трётся пруток.


      1. nicher Автор
        30.08.2024 18:23

        У меня в К1 от производителя причудливое сопло unicorn, там сопло сразу с горлом. Про шестерни да, забыл, наверное тоже надо взять комплектик


  1. dreams_killer
    30.08.2024 18:23
    +1

    Идея крутая. Мне кажется многие любители diy задумывались о чём-то подобном ) у себя имею la104 , естественно с кастомной прошивкой, который всё умеет, а что не умеет ( спасибо прошивке) реализуемо. Советую посмотреть, не как на конечное устройство, а на возможности и реализацию.


  1. MichaelBorisov
    30.08.2024 18:23
    +4

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

    Меня только очень оттолкнула эта броская картинка "Гаечки" на заднем плане. Как оттолкнула бы любая другая броская картинка человека, котика или другого объекта, не имеющего отношения к функционалу прибора. Даже если бы там красивое фото какой-нибудь печатной платы было изображено - не нужно это. Такие картинки - как рекламные баннеры, привлекают к себе внимание и заставляют напрягать мозг для того, чтобы не пялиться на них, а использовать прибор по прямому назначению.


    1. N1X
      30.08.2024 18:23
      +2

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

      А я вот к этим GUIшным панелям с осторожностью отношусь. Хотя делал проект на Nextion (железо было уже изготовлено, нужен был код). Не считая некоторые особенности с кривым протоколом поверх UART (там начало посылки никак не обозначено, а конец обозначен как 0xff 0xff 0xff, при этом могут передаваться данные, в которых эти ff тоже могут быть =) ) довольно забавная вещь. Но мне все же какой-нибуть LVGL поинтереснее кажется, тоже вкусовщина, можно сказать :)


  1. TheProfessional
    30.08.2024 18:23
    +1

    Здравствуйте. Тоже имел дело с DWIN дисплеем в рабочем проекте. Я реализовал изменение параметров и сохранение значений на дисплее следующим образом:

    1) Когда пользователь на дисплее переходит на страницу с параметрами, дисплей отправляет соответствующую команду на stm32, а та в ответ отправляет посылку с текущими значениями параметров (например шим1 - 10 кгц 50%, шим2 - 30кгц 25% и тд). Примечание: dwin можно сконфигурировать так, чтобы переменные (их адреса Vp) были расположены друг за другом в памяти. Тогда можно будет обновить сразу все переменные одной посылкой.

    2) Изменение параметров реализовано немного по-другому: около каждого поля есть кнопки + и -.

    Таким образом, когда пользователь изменяет параметры на дисплее, дисплей отправляет просто сигнал о нажатой кнопке (плюс или минус, и ее адрес), при этом сама стм должна в ответ на это послать текущее обновленное значение переменной на дисплей. Да, это сильно усложняет логику и замедляет код, но при этом дает уверенность, что данные на дисплее всегда соответствуют данным внутри стм.

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

    3) Сохранение данных реализовано с помощью записи значений переменных в памяти flash стмки. А их синхронизация с дисплеем реализована в... (см. Пункт 1).

    Удачи вам и успехов в ваших задумках.


  1. ptr128
    30.08.2024 18:23
    +1

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


    1. nicher Автор
      30.08.2024 18:23
      +1

      Хотелось больше автономии. Во-первых, хочу на базе этого приборчика сделать другой, который будет заточен под работу с конкретно с одной разработкой, для сервисной службы. Там получается так, что при монтаже мало места и даже с ноутбуком не очень удобно. Во-вторых, хочется на его базе делать стенды на коленке, которые будут работать без ноутбука, которые еще надо закупить. Я хочу заложить в будущем возможно вывода информации на комп, но изначально я такого не закладывал.


      1. ptr128
        30.08.2024 18:23
        +1

        Понятно, спасибо! Удачи Вам!

        Видимо, у нас разные задачи. Мне, порой, приходится сырые данные выгребать, например, с ADC (встроенного, I2C, SPI). А их на МК анализировать и, тем более, хранить в целях последующих тестирований, уж очень неудобно.


  1. nv13
    30.08.2024 18:23
    +1

    Отличное решение, но я бы всё таки рассмотрел прибор на базе ноута, где прибор обеспечивает чисто ампарстный и логический интерфейс, а UI целиком на ноуте


    1. ptr128
      30.08.2024 18:23

      Так я выше как раз и упомянул об использовании FT2232H. Вот только интерфейса у меня, кроме скриптов на Python, нет. Да и пользуюсь им только на 12 мегабитах, так как на более скоростной изолятор еще не разорился.


      1. nv13
        30.08.2024 18:23

        Меня интеграция с экраном смутила)