Перейти к содержанию

Советы для грамотной архитектуры прошивки.


GDK

Рекомендуемые сообщения

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

Есть желание делать прошивки более-менее грамотно. Чтобы не изобретать велосипедов хотелось бы увидеть советы, может быть ссылки на к-либо статьи.

Я начал делать таймер для водяного насоса, вот на этом подопытном кролике и будет конкретика. Что собираюсь в него впихнуть и зачем:

1. Выход на одно реле. Оно и будет управлять насосом (~240 Вт.)

2. Дисплей - 2 модуля, каждый из 3х 8ми сегментных цифр, внутри модуля соединены для динамической индикации, т.е. 11ти ногие. Показывать будет время в часах/мин/сек ну и закорючки для индикации режимов.

3. Клавиатура - матрица 3*4. Настройка таймера/запуск/остановка.

4. Пищалка - динамик 8 Ом. Для звуковых сигналов о состоянии и при настройке таймера.

5. [Датчик тока/напряжения] его может быть и не стану делать, назначение - косвенно определять количество перекачанной воды, определять отсутствие воды в скважине.

 

Плата готова уже, МК выбран 16LF1823 (на глазок, т.к. они уже есть и задача вроде как не сложная). Дисплей тоже готов и проверян средним пальцем левой ноги )) состоит из ключа подачи питания, 3х микросхем (8 D-триггеров каждая), из которых получился длинный сдвиговый регистр, ну и самих цифр, о которых уже написал. Получилось 3 входа: Power ON,  Clk,  Data, ну и питание +  - .

Планируется 4 программы работы: 1)-бесконечная работа с перерывами на восстановление скважины;   2)-30л;    3)-10л;     4)-по времени с клавиатуры.

2 и 3 можно настроить с клавиатуры, вход в режим настройки - долгим удержанием кнопки "OK", настройку можно проводить и в режиме, когда уже идёт перекачка. Запуск 2 коротким нажатием кнопки "отмена", 3 - кнопки "ОК". Запуск по времени просто вводом цифр, перед запуском анализ - если <10 сек, то это не секунды, а минуты. В процессе перекачки звуковые сигналы. После запуска перекачки дисплей гаснет по истечении некоторого времени, для включения - нажать любую кнопку из некоторой группы.

По истечении времени перекачки - пикалка звуковой сигнал в теч. некоторого времени, затем выключение в спящий режим.

Собираюсь задействовать DAC для пищалки (синусоиду слушать приятнее, чем меандр имхо), для дисплея - SPI, для задержек всяких разных - аппаратный таймер, если будет не лень, хватит ресурсов и вообще звёзды сойдутся, то может ещё ADC понадобится.

Получается будут параллельно выполняться функции:

1. опрос клавиатуры

2. индикация

3. звук

4. расчёт оставшегося времени, либо ожидание запуска

Делать собираюсь на С с компилятором XC8.

Вопрос  с чего нАчать. Ну решил начать с алгоритмма, понял что нужны будут отрезки времени со стабильной длительностью/периодичностью, и для отсчёта самих интервалов работы насоса и для опроса клавиатуры и для звука и для дисплея. Посоветуйте где что почитать, чтобы отстойный код не получился. Сейчас есть мысль что понадобится делать программные таймеры и возможно будет желательно конечные автоматы использовать, о которых почти ничего не знаю. По программным таймерам нашёл статью http://chipmk.ru/index.php/spisok-statej/24-uchimsya-programmirovat/120-programmnye-tajmery-na-assemblere,  но она на асме, зато показалась хорошей. Есть разные и статьи и литература для начинающих, но там обычно как диодиком помигать, что такое МК и т.п., как правильно делать с точки зрения ресурсов МК, возможности корректировки кода в будущем, добавлении нового функционала мало где встречается, поэтому и нужны советы. Сейчас вопросы - не маловато ли ресурсов у выбранного МК для моих хотелок, как делать программные таймеры и почему они работают с точной периодичностью независимо от основной программы, действительно ли мне нужны конечные автоматы. В общем то разбираться планирую как можно больше самостоятельно, но просьба указать направление, в котором надо самопнуться.

Ссылка на комментарий
Поделиться на другие сайты

6 часов назад, GDK сказал:

Получается будут параллельно выполняться функции:

1. опрос клавиатуры

2. индикация

3. звук

4. расчёт оставшегося времени, либо ожидание запуска

В вашей концепции только индикация должна выполняться параллельно с остальными задачами, так как реализуется динамически и любая пауза в ее работе будет видна пользователю. Думаю, объяснить, по какой причине остальные "задачи" должны выполняться параллельно друг другу, вы не сумеете... Особенно смешно выглядит параллельное ожидание запуска :)

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Сравнительное тестирование аккумуляторов EVE Energy и Samsung типоразмера 18650

Инженеры КОМПЭЛ провели сравнительное тестирование аккумуляторов EVE и Samsung популярного для бытовых и индустриальных применений типоразмера 18650. 

Для теста были выбраны аккумуляторы литий-никельмарганцевой системы: по два образца одного наименования каждого производителя – и протестированы на двух значениях тока разряда: 0,5 А и 2,5 А. Испытания проводились в нормальных условиях на электронной нагрузке EBD-USB от ZKEtech, а зарядка осуществлялась от лабораторного источника питания в режиме CC+CV в соответствии с рекомендациями в даташите на определенную модель. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Хоть попробую.

Работа с клавиатурой должна быть доступна когда угодно, во время перекачки можно например настраивать параметры "избранных"  действий. Это 30л и 10л. Например чтобы перенастроить 10л на 15л. Или, например, чтобы немедленно отменить текущую перекачку без выдёргивания вилки из розетки.

Ожидание может и смешно, но с точки зрения насоса - либо перекачка, либо ожидание запуска, либо сдох нафих ^_^. Ну а в процессе перекачки может быть буду считать скока литров, аднака. Может через 30 сек. какой-нибудь дятел включит козла и напряжение станет вместо 220 - 170? Значит придётся увеличить время на какое-то значение. Т.е. прилепить ещё датчик тока и "интегрировать" ток, пока не накопится заданное значение. И это не должно мешать опросу клавиатуры.

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

Не убедил?

 

Ссылка на комментарий
Поделиться на другие сайты

Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

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

Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств. Подробнее параметры и результаты тестов новой серии PLM по ссылке.

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

Для начала лучше светодиодиком помигать, а потом 2 диодиками, потом кнопку подключить и потом возможно придет понимание как МК работает.

 

Ссылка на комментарий
Поделиться на другие сайты

Литиевые батарейки и аккумуляторы от мирового лидера  EVE в Компэл

Компания Компэл, официальный дистрибьютор EVE Energy, бренда №1 по производству химических источников тока (ХИТ) в мире, предлагает продукцию EVE как со склада, так и под заказ. Компания EVE широко известна в странах Европы, Америки и Юго-Восточной Азии уже более 20 лет. Недавно EVE была объявлена поставщиком новых аккумуляторных элементов круглого формата для электрических моделей «нового класса» компании BMW.

Продукция EVE предназначена для самого широкого спектра применений – от бытового до промышленного. Подробнее>>

Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161

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

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

Ссылка на комментарий
Поделиться на другие сайты

Уже начал. Ну с прерываниями вроде бы уже проясняется, с автоматами пока туговато. Инфы слишком много знает гугл, а это, при определённых условиях, - то же самое что её отсутствие.

Ссылка на комментарий
Поделиться на другие сайты

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

Вообще, на сколько мне известно, инфа есть в интернете по этой теме.
 

Ссылка на комментарий
Поделиться на другие сайты

5 часов назад, GDK сказал:

Не убедил?

НЕ убедил. 

Обычно все рассуждают так, как вы. Однако, если динамическую индикацию задержать на 0,1 секунды, вы увидите, как индикатор мигнет. А если кнопку нажать на 0,1 сеунды позже, или там реле у вас сработает на 0,1 секунды позже, или датчик - никто вообще не заметит. Именно поэтому индикация должна работать ПАРАЛЛЕЛЬНО с остальными задачами, а остальные задачи МОГУТ работать ПОСЛЕДОВАТЕЛЬНО, только быстро-быстро :) Быстренько опросили кнопки, быстренько отреагировали на датчики, быстренько обновили дисплей и снова быстренько опрашиваем кнопки. За 0,1 секунды эта последовательность у вас раз 10 отработает запросто.

В этом случае все выглядит ГОРАЗДО проще, чем когда все процессы работают одновременно.

Изменено пользователем ARV

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Я делаю так: прерывание по аппаратному таймеру каждые 20 миллисекунд (частота получается 50 Гц), загружаем очередную цифру в 74HC595 и переключаем аноды (или катоды) индикатора. К общим анодам (или катодам) подключены и кнопки (по количеству цифр, у меня их 4), подающие при нажатии сигнал на вход МК. Не забывайте подтянуть вход (к минусу при общих анодах или к плюсу при общих катодах). Этот вход проверяется в этом же прерывании. Состояние кнопок сохраняем в глобальной переменной, из глобальных же переменных берётся и значение для индикации (готовый байт для засылки в 74HC595). Ничего больше в прерывании не делаем, поэтому оно выполняется быстро. А дальше уже в основном цикле сначала обрабатываем состояние кнопок, затем формируем индикацию, опрашиваем датчики (если есть) и всё прочее. По такому принципу у меня работают часы-будильник-таймер с термометром. При тактовой 8 МГц у меня процессор в основном простаивал, ожидая прерывания. Снизил тактовую до 1 МГц для уменьшения энергопотребления.

Ссылка на комментарий
Поделиться на другие сайты

В 20.04.2017 в 00:31, GDK сказал:

Я начал делать таймер для водяного насоса...

Ну не знаю зачем такой "огород" городить, я поступил намного проще: Двухрежимная автоматическая водокачка

На форумах принято общаться на "ты", что не является оскорбительным и подразумевает равноправие

Ссылка на комментарий
Поделиться на другие сайты

@Вуйко  Ага, эти материалы и начал читать вчера.

17 часов назад, ARV сказал:

Быстренько опросили кнопки, быстренько отреагировали на датчики, быстренько обновили дисплей и снова быстренько опрашиваем кнопки. За 0,1 секунды эта последовательность у вас раз 10 отработает запросто.

1. А звук? Если, допустим, мне хочется иметь возможность пищать синусоиду до 10кГц, или произвольной формы сигнал выдавать с помощью DAC (он 5 разрядный).

2. Я почему то изначально не был уверен в том, что всё будет успеваться, да и сейчас тоже. Для комфортной работы с клавиатурой 4х3 какой период опроса надо будет сделать, может придётся 1мс?

9 часов назад, oldmao сказал:

К общим анодам (или катодам) подключены и кнопки (по количеству цифр, у меня их 4),

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

А как у Вас устроен интидребезг?

 

9 часов назад, oldmao сказал:

При тактовой 8 МГц у меня процессор в основном простаивал, ожидая прерывания. Снизил тактовую до 1 МГц для уменьшения энергопотребления.

У меня другой подход - всё быстро сделал, и спать. Проснулся по прерыванию от таймера, разобрался с делами, и опять баиньки.  Вот и думаю встроенный RC генератор попробовать на 16 МГц запустить или на 8...

8 часов назад, Vovka сказал:

Ну не знаю зачем такой "огород" городить

Не хочу проводов от датчиков и бочку, хочу наливать сколько хочу, хочу перехотеть когда захочу, хочу наливать где захочу, хочу уходить когда захочу... Короче гибкость.

 

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

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

14 минуты назад, GDK сказал:

А как у Вас устроен интидребезг?

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

Ссылка на комментарий
Поделиться на другие сайты

@IMXO , там 3 октавы, я не разбираюсь в этом, это до 2 кГц? Ну и МК там... напр.   14кбайт - память программ, 368 байт - опер. память, а у меня 4к и 168 байт соответственно. Там ОСРВ, в мой МК наверное не влезет.

Только что, oldmao сказал:

Таким образом реакция на нажатие кнопки 200 мс.

200мс. Довольно таки долго. Ну и как получается по ощущениям, комфортно? Нет ощущения, что клавиатура не успевает обрабатывать короткие нажатия и надо давить "как следует" ?

Ссылка на комментарий
Поделиться на другие сайты

Удобно, задержка в 0,2 секунды не ощущается совсем. Это же не клавиатура компьютера, скоростной набор не требуется. Длительное нажатие у меня 2 секунды, это вход в режим установки часов. 

PS В одном проекте у меня опрос кнопок вообще 0,5 сек (правда антидребезг аппаратный), с такой же скоростью автоповтор. Привыкаешь быстро, даже удобно, на случайные нажатия не реагирует.

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

1 час назад, GDK сказал:
12 часа назад, oldmao сказал:

К общим анодам (или катодам) подключены и кнопки (по количеству цифр, у меня их 4),

Я тоже так хотел сначала, но у меня предусмотрено гашение дисплея снятием питания с него, а при этом клавиатуру опрашивать надо

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

Ссылка на комментарий
Поделиться на другие сайты

12 часа назад, GDK сказал:

Если, допустим, мне хочется иметь возможность пищать синусоиду до 10кГц

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

Но если и в самом деле нужен звук, он делается так же, как динамическая индикация - фоновым процессом. Просто лично я не понимаю стремления все делать "незаметно", т.е. параллельно с чем-то. С чем параллельно, если все прячется? Кнопки, датчики и многое другое вовсе не обязательно должно делаться в фоне.

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

Скачать видео

Вот то самое видео...

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

На самом деле любая многозадачность на AVR - это в первую очередь грамотное планирование последовательности задач. Почитайте про ОС реального времени для AVR (это одна из многих существующих, но принцип работы расписан хорошо). Для 95% задач такая сложность ни к чему, критичные к времени части программы (динамическая индикация, опрос кнопок, звук) реализуем в прерываниях по таймеру. Отдельно делаем опрос датчиков, например 1-Wire, где критичны временные интервалы, с запретом остальных прерываний на время работы с датчиком. Это миллисекунды, пропуск даже пары тактов динамической индикации глазом будет не заметен. 

Ссылка на комментарий
Поделиться на другие сайты

Только что, ARV сказал:

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

Мне показалось, что 16LF1823 справится. Считаете что вряд ли получится на нём?  Я всё таки попробую, но по остаточному принципу, если будет хватать ресурсов, если не будет хватать, тогда уже урезать хотелки, да. Но дело в том, что не хочется делать задачу невыполнимой, которая в общем то выполнима.  А ещё я стараюсь выключать свет, когда он мне не нужен...

Но тем не менее мысль уловил, ну и выводы сделал, что не обязательно "все косточки выбирать", на некоторые можно и подзабить и хуже не будет.

 

Только что, ARV сказал:

так вот, вы не поверите,...

У меня практически нет опыта работы с МК, поэтому могу поверить во что угодно.

Ссылка на комментарий
Поделиться на другие сайты

Только что, oldmao сказал:

На самом деле любая многозадачность на AVR МК- это в первую очередь грамотное планирование последовательности задач...

Раньше читал про ОСРВ. И это понятно.

Получается как бы 3 крайности при выборе архитектуры:

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

Верно, укрупненно так и есть. Я бы добавил примечания:

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

Если забанить всех, кто набрался смелости думать независимо, здорово будет на форуме - как на кладбище: тишина, птички поют...

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
  • Сообщения

    • Ну-вы и сравнили. Вот когда будете строить сварочный инвертор на такую частоту-то там нужно  будет учитывать скин эффект. А на частоты до 75кгц-можно забить, отбить и не принимать во внимание. Тем более-что все стараются аппараты до 200А строить. На кольце плотность тока до 15А на мм ^2, на Ш от 10А на  мм^2 А вентилятор-он все лишние тепло сдует ко льдам в Антарктиде.
    • Добрый вечер всем!  Проблема следующая: Есть флешка с записанной файловой системой через USB MASS STORAGE DEVICES. При "втыкании"  в порт USB открывается на ПК диск с содержимым. Я подключил библиотеку Fatfs и прописал низкоуровневые функции чтения и записи в файле diskio.c Работаю с файлом так:   disk_initialize(SDFatFs.drv); if(f_mount(&SDFatFs,(TCHAR const*)USER_Path,0)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_f_mount!\r\n"); } else { if(f_open(&MyFile,"01.WAV",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File1!\r\n"); } else { Usart1_Send_String("open_File_OK1!\r\n"); } if(f_open(&MyFile,"01.wav",FA_READ)!=FR_OK) { //Error_Handler(); Usart1_Send_String("Error_open_File2!\r\n"); } else { Usart1_Send_String("open_File_OK2!\r\n"); UINT testBytes=0; f_read(&MyFile, buff1, 512, &testBytes); sprintf(buf1, "TestBytes=%d\r\n", testBytes); Usart1_Send_String(buf1); Usart1_Send_hex((char*)buff1, 512); Usart1_Send_String("read_File_complite!\r\n"); f_close(&MyFile); } } подправил diskio.c так:   DRESULT disk_read ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ BYTE *buff, /* Data buffer to store read data */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to read */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_read(disk.lun[pdrv], buff, sector, count); sprintf(buffer0, "sector=%lu\r\n", sector); Usart1_Send_String(buffer0); w25qReadPage(buff, sector*2); w25qReadPage(buff + 256, sector*2+256); res=RES_OK; return res; } #if _USE_WRITE == 1 DRESULT disk_write ( BYTE pdrv, /* Physical drive nmuber to identify the drive */ const BYTE *buff, /* Data to be written */ DWORD sector, /* Sector address in LBA */ UINT count /* Number of sectors to write */ ) { DRESULT res; //res = disk.drv[pdrv]->disk_write(disk.lun[pdrv], buff, sector, count); w25qWritingByUSB(sector, (uint8_t*)buff); res=RES_OK; return res; } #endif /* _USE_WRITE == 1 */ функцию чтения на самом деле пробовал прописывать по разному, все равно не корректно работает... Выдает в отладке такое:   Program start!.... sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File1! sector=0 // это обращение к функции чтения DRESULT disk_read (); Error_open_File2! Что я забыл еще добавить?
    • В былые годы запрещалось размещать на форуме бессмысленные темы. Видать, с тех пор правила существенно изменились.
    • скачай новый архив. там есть важные изменения в комповой программе, по сравнению с той, что я отправлял в личке. исправлены недоделки и добавлены проверки на некорректные действия.
    • Здесь все индивидуально, точного ответа нет. Тип фоторезиста, качество фотошаблона, расстояние и время засветки, длина волны св.диодов, "полоскание" в химии ... Надо все пробовать самому, ручками, опыт придет со временем, ничего сложного там нет. На форуме есть ветка, почитайте.
    • Привет.  Хочу попробовать поработать с фоторезистом. Есть пару десятков ультрафиолетовых светодиодов, общей мощностью 4 вата. Хватит ли этой мощности для обработки платок размером 10 на 10 см или надо искать что-то дополнительно? 
  • Похожий контент

×
×
  • Создать...