Весы на HX711 в FLPROG

После не совсем удачных поисков работающей (действующей) схемы простых весов, решил создать эту тему. Я - начинающий работать с FLPROG, поэтому уместные комментарии и поправки приветсвуются. Планируется совместное с форумчанами построение весов на модуле от AlexCrane. Весы должны измерять вес 1 или 2 кг (такие тензодатчики есть в наличии), иметь функцию самокалибровки с образцовым весом, звуковое сопровождение нажатия кнопок. Кнопок планируется 3 шт. Значение вверх (+)/ОК/Значение вниз (-). Возможны ещё какие-либо доп. функции, которые добавятся по ходу пьесы.

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#41

Сообщение Astreet » 10.02.2024{, 12:54}

Целую неделю игрался с различными весовыми блоками и скетчами.
В настоящий момент остановился на следующем.
СпойлерПоказать
Компилируем проект и применяя монитор порта получаем scaleFactor. Далее прописываем это значение в блок [HX711] Scale @Ushakov. Удаляем блок Astra, еще раз компилируем и используем уже совместно с "живым" дисплеем. Схема работает, с поргешностями конечно, но работает.

Единственная проблема - это жуткие тормоза ( а иногда вообще какая-то билиберда) при использовании обычной кнопки (есть в проекте). Кнопку убираем - всё работает нормально.
Снимок экрана 2024-02-10 124523.jpg
HX711_AstrA_v.1 + Ushakov.flp
(1.59 МБ) 19 скачиваний

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#42

Сообщение Astreet » 16.02.2024{, 09:46}

Собрал ещё один вариант весов.
Но..... :smile37:
Калибровочное значение опять-таки подбирается методом корреляционно-регрессионного анализа.... (методом тыка).... :smile250:
Capture 013.JPG

Вот как работают эти весы-дозатор.


Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#43

Сообщение Astreet » 20.02.2024{, 16:15}

В весах работает всего пара типов сигналла (зуммера) - прерывистый и длинный.
Знатоки, подскажите как сделать сигналы типа бип-бип-бииииип, бип-бип-бип-бииииип или типа того.
Может уже есть готовые решения, чтобы не тратить время?!

Или какой-нибудь вредный на слух сигнал.... в качество аварийно - предупреждающего...

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#44

Сообщение Astreet » 21.02.2024{, 09:02}

Добавил в существующие весы звуковое и визуальное предупреждение о превышении максимального веса 1кг.


WhatsApp Image 2024-02-20 at 16.45.12.jpeg

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#45

Сообщение ValentinK » 21.02.2024{, 16:21}

Вот, давненько, делал весы. Нужен был семисегментный светодиодный дисплей и передача через RS-485. Но, т.к. контроллер ЕСП32, то попробовал и веб интерфейс.
Там на первой плате условие для считывания параметров весов из EEPROM микроконтроллера при включении. Плата выполняется один раз, т.к. после выполнения в переменную записывается единица, и плата больше не активна.
А сохранение в память делается в плате 6, по условию изменения переменной.
Установка масштаба шкалы выполняется, в плате 9 по кнопке (что-то я там так и не доделал) либо по RS-485.
Вложения
Scales_ESP32_HX711_MAX7219_ModBus.flp.zip
(75.56 КБ) 40 скачиваний

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#46

Сообщение Astreet » 22.02.2024{, 10:19}

ValentinK писал(а):
21.02.2024{, 16:21}
Вот, давненько, делал весы. Нужен был семисегментный светодиодный дисплей и передача через RS-485. Но, т.к. контроллер ЕСП32, то попробовал и веб интерфейс.
Там на первой плате условие для считывания параметров весов из EEPROM микроконтроллера при включении. Плата выполняется один раз, т.к. после выполнения в переменную записывается единица, и плата больше не активна.
А сохранение в память делается в плате 6, по условию изменения переменной.
Установка масштаба шкалы выполняется, в плате 9 по кнопке (что-то я там так и не доделал) либо по RS-485.
Валентин, спасибо за шикарный проект! Очень интересно! :smile9:
Мне понравилась структуризация проекта, а также то, что каждая плата имеет свое название. Удобно.
Сейчас пытаюсь вникнуть, как это всё работает.
Не могли бы вы дать краткое последовательное описание работы каждой платы. Начиная от первой платы и вниз по порядку.

Например, по первой плате уже есть вопрос. Что это за переменная Int? Как работает?

Можно ли посмотреть работу данного проекта в натуре?

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#47

Сообщение ValentinK » 24.02.2024{, 16:54}

Astreet писал(а):
22.02.2024{, 10:19}
Не могли бы вы дать краткое последовательное описание работы каждой платы. Начиная от первой платы и вниз по порядку.
Могу, но у меня бывает с организацией времени не всё в порядке. По этому по мере возможности.
Astreet писал(а):
22.02.2024{, 10:19}
Например, по первой плате уже есть вопрос. Что это за переменная Int? Как работает?
Первая плата выполняется по условию, что int = 0. Это возможно только при запуске программы (т.к. переменная инициализирована нулём), когда эта плата выполняет свою задачу, int присваивается единица и плата больше не работает.
А задача первой платы только считать коэффициенты для блока HX711 из памяти (Scale - масштаб для HX711, а Zero - тара). После восстановления питания значение тары должно восстанавливаться, т.к. ёмкости с гранулами стоят на весах постоянно.
Плата1.jpg
Tag_Int.png
Tag_Int.png (17.49 КБ) 557 просмотров
Astreet писал(а):
22.02.2024{, 10:19}
Можно ли посмотреть работу данного проекта в натуре?
А вот в натуре проекта больше нет. Задача отменилась, я опытный образец весовой платформы разобрал.

Отправлено спустя 3 минуты 2 секунды:
Плата 2 Работает постоянно. Там просто считывается значение измеренной массы в переменную HX711_Out и в выходной регистр ModBus для удалённого чтения.

Отправлено спустя 13 минут 45 секунд:
Плата 3 и плата 4. Прокомментировал на изображении.
Плата_3_4.jpg
Отправлено спустя 3 минуты 39 секунд:
Забыл указать, что сброс тары происходит по длинному нажатию (три секунды) на кнопку [Btn].

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#48

Сообщение Astreet » 26.02.2024{, 09:21}

Валентин, спасибо за отклик! :smile9:
Надеюсь на ваше дальнейшее содействие в разборе этого интересного проекта.


ValentinK писал(а):
24.02.2024{, 17:14}

Первая плата выполняется по условию, что int = 0. Это возможно только при запуске программы (т.к. переменная инициализирована нулём), когда эта плата выполняет свою задачу, int присваивается единица и плата больше не работает.
А задача первой платы только считать коэффициенты для блока HX711 из памяти (Scale - масштаб для HX711, а Zero - тара). После восстановления питания значение тары должно восстанавливаться, т.к. ёмкости с гранулами стоят на весах постоянно.
Ясно. В принципе вопросов нет.
Единственное, что почему-то посчитал, что это знак деления...... Ну и соответсвенно возник вопрос, зачем ноль делить на единицу.....
Capture 34.JPG
Capture 34.JPG (14.3 КБ) 484 просмотра

Скажите, а без Int плата работать не будет?


ValentinK писал(а):
24.02.2024{, 17:14}
Плата 2 Работает постоянно. Там просто считывается значение измеренной массы в переменную HX711_Out и в выходной регистр ModBus для удалённого чтения.
Скажите, откуда берётся (как вычисляется) переменная Scale?
Capture 31.JPG


ValentinK писал(а):
24.02.2024{, 17:14}

Плата 3 и плата 4. Прокомментировал на изображении.
Забыл указать, что сброс тары происходит по длинному нажатию (три секунды) на кнопку [Btn].
Подытожу.
Плата: 3. Нажимаем и удерживаем кнопку Btn в течении 3 секунд (TON). На экране в это время высвечивается * (звёздочка). Срабатывает SR триггер. Переменная Set_Zero приобретает "1".

Плата: 4. Показание с весов HX711_Out и Scale перемножаются. Почему именно перемножаются? И где берем Scale (вопрос уже был выше)?
Далее полученное значение складывается с ZERO. В SEEPROM стартовое значение "0".
Переменной Set_Zero (1) даём разрешение на запись нового значения ZERO в SEEPROM.
Переменная Set_Zero передает "1" на переменную Trig_reset, которая в свою очередь обнуляет SR триггер на плате3.
Capture 33.JPG

Т.е. по сути дела кнопка Btn в режиме удержания 3-х секунд обнуляет весы (тарирует). Правильно?
Думаю, в принципе этот цикл можно автоматизировать при включении весов. Как считаете?



Ждём (думаю не я один) разъяснений по следующим платам....

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#49

Сообщение ValentinK » 26.02.2024{, 16:53}

Astreet писал(а):
26.02.2024{, 09:21}
Скажите, а без Int плата работать не будет?
Плата работать будет и без Int. Но в таком случае в каждом цикле выполнения программы ядро контроллера будет обращаться к ППЗУ (EEPROM) для считывания переменных в ОЗУ. А каждый раз читать одни и те-же данные из постоянной памяти в оперативную смысла нет - только потеря процессорного времени (как, если-бы одни и те-же данные на компьютере каждый раз загружались с жёсткого диска в оперативную память).
Вот для однократного считывания коэффициентов из ППЗУ в ОЗУ и сделано однократное выполнение первой платы по условию Int = 0.
Astreet писал(а):
26.02.2024{, 09:21}
Плата: 3. Нажимаем и удерживаем кнопку Btn в течении 3 секунд (TON). На экране в это время высвечивается * (звёздочка). Срабатывает SR триггер. Переменная Set_Zero приобретает "1".
Это верно.
Astreet писал(а):
26.02.2024{, 09:21}
Плата: 4. Показание с весов HX711_Out и Scale перемножаются. Почему именно перемножаются? И где берем Scale (вопрос уже был выше)?
Плата четыре служит для сброса тары в ноль.
Перемножаются здесь, т.к внутри блока внутренние данные с АЦП микросхемы делятся на Scale для выдачи значения массы на выход. А значение нуля тары хранится в единицах АЦП, а не единицах массы (хотя логичнее и проще было-бы наоборот). Вот для получения значения нуля (тары) в единицах АЦП и приходится делать расчёт.
И плата выполняется по Set_Zero один раз (эта переменная позже сбрасывается).
Scale - масштаб изначально вычисляется по инструкции из блока (автор блока HX711 оставил внутри описание с подробной инструкцией). Вот оттуда выдержка:
"Вход "Zero" - задание нуля или установка тары.
На выходе сигнал Out = Out - Zero.
Тип входа - Long Integer. Можно задавать значения от -2147483648 до 2147483647.
-----------------------------------------------------------------------------------------------------------------------------------------------
Вход "Scale" - задание диапазона измерений или задание коэффициента пропорциональности.
Данные с АЦП делятся на коэффициент Scale, т.е. преобразуются в "удобный вид".
Out = Out / Scale.
Тип входа - Unsigned Long Integer. Можно задавать значения от 0 до: 4294967295"

-----------------------------------------------------------------------------------------------------------------------------------------------
Рекомендуется следующий порядок настройки:
1 - установить следующие параметры: "N_Read_n2" = 1; "Zero" = 0; "Scale" = 1
2 - установкой значения "N_Read_n2" подобрать стабильность показаний и нужную скорость
изменения данных. Лучше ориентироваться на приемлемую скорость изменения, исходя из
того, что чем медленнее - тем стабильней будут показания (после дальнейших преобразований)
3 - установить значение нуля или тары (при ненагруженном тензодатчике) на входе "Zero"
Zero = Out
4 - положить известный груз на тензодатчик и вычислить коэффициент преобразования по формуле:
Scale = Out / m
где:
Scale - коэффициент пропорциональности
Out - показания на выходе блока
m - масса известного груза на тензодатчике

-----------------------------------------------------------------------------------------------------------------------------------------------
Вот по этой инструкции рассчитывается Scale, затем я её сохранил через вэб интерфейс, но можно её жестко зафиксировать в программе, проинициализировав (присвоив ей значение) при объявлении переменной "Scale" в "Тэги -> Переменные". В таком случае её уже не надо будет сохранять и считывать из EEPROM.
Я сделал переменную Scale изменяемую удалённо, т.к. планировалось использовать несколько одинаковых весов, но с разными конструкциями платформ и разными тензодатчиками (от ста-трёхсот килограмм, доя четырёх тонн).
Astreet писал(а):
26.02.2024{, 09:21}
Переменной Set_Zero (1) даём разрешение на запись нового значения ZERO в SEEPROM.
Переменная Set_Zero передает "1" на переменную Trig_reset, которая в свою очередь обнуляет SR триггер на плате3.
Astreet писал(а):
26.02.2024{, 09:21}
Т.е. по сути дела кнопка Btn в режиме удержания 3-х секунд обнуляет весы (тарирует). Правильно?
- Это верно.
Astreet писал(а):
26.02.2024{, 09:21}
Думаю, в принципе этот цикл можно автоматизировать при включении весов. Как считаете?
Вот это зависит от задачи.
В моём случае сбросив тару при включении, ладно снять ящик с сухим льдом, но опустошить бочку с жидким азотом или аргоном для обнуления тары было-бы достаточно проблематично.
Поэтому я сделал сохранение тары в память, что-бы не потерять его при перебоях с электричеством.
А вот если вам не надо хранить значение тары, то можно его обнулять при включении и не сохранять его в EEPROM. Тогда не нужна будет первая плата для считывания и не нужны будут участки с записью в ППЗУ.

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#50

Сообщение ValentinK » 26.02.2024{, 17:31}

Плата 5 работает в каждом цикле. Является дешифратором для семисегментных индикаторов на базе MAX7219. Семисегментный индикатор выбран потому, что можно собрать индикатор любого нужного размера, они яркие и холода не боятся.
Плата_5.png
Переключатель слева сверху нужен для передачи только положительного числа в дешифратор индикатора. Для этой цели служит и чтение бита и умножение на минус один.
Дальше куча одинаковых делений и взятий по модулю организуют из входного числа значения отдельных цифр из которых состоит число. Может быть для этого и стандартный блок есть, но я не стал искать.

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#51

Сообщение ValentinK » 26.02.2024{, 17:47}

Плата 6 выполняется в каждом цикле. Здесь выделена работа с памятью и регистрами ModBus.
Плата_6.png
Тут, я думаю, комментариев достаточно.
Через ModBus планировался сбор данных с нескольких весов на компьютер в офис.

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#52

Сообщение ValentinK » 26.02.2024{, 18:09}

Остальные платы для тестов и отладки.
Если надо будет, объясню для чего.

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#53

Сообщение Astreet » 27.02.2024{, 11:20}

ValentinK писал(а):
26.02.2024{, 16:53}

Плата работать будет и без Int. Но в таком случае в каждом цикле выполнения программы ядро контроллера будет обращаться к ППЗУ (EEPROM) для считывания переменных в ОЗУ. А каждый раз читать одни и те-же данные из постоянной памяти в оперативную смысла нет - только потеря процессорного времени (как, если-бы одни и те-же данные на компьютере каждый раз загружались с жёсткого диска в оперативную память).
Вот для однократного считывания коэффициентов из ППЗУ в ОЗУ и сделано однократное выполнение первой платы по условию Int = 0.
Супер! Это уже тонкости! Я бы не додумался..... :smile37:

ValentinK писал(а):
26.02.2024{, 16:53}

Плата четыре служит для сброса тары в ноль.
Перемножаются здесь, т.к внутри блока внутренние данные с АЦП микросхемы делятся на Scale для выдачи значения массы на выход. А значение нуля тары хранится в единицах АЦП, а не единицах массы (хотя логичнее и проще было-бы наоборот). Вот для получения значения нуля (тары) в единицах АЦП и приходится делать расчёт.
И плата выполняется по Set_Zero один раз (эта переменная позже сбрасывается).
Scale - масштаб изначально вычисляется по инструкции из блока (автор блока HX711 оставил внутри описание с подробной инструкцией). Вот оттуда выдержка:
"Вход "Zero" - задание нуля или установка тары.
На выходе сигнал Out = Out - Zero.
Тип входа - Long Integer. Можно задавать значения от -2147483648 до 2147483647.
-----------------------------------------------------------------------------------------------------------------------------------------------
Вход "Scale" - задание диапазона измерений или задание коэффициента пропорциональности.
Данные с АЦП делятся на коэффициент Scale, т.е. преобразуются в "удобный вид".
Out = Out / Scale.
Тип входа - Unsigned Long Integer. Можно задавать значения от 0 до: 4294967295"

-----------------------------------------------------------------------------------------------------------------------------------------------
Рекомендуется следующий порядок настройки:
1 - установить следующие параметры: "N_Read_n2" = 1; "Zero" = 0; "Scale" = 1
2 - установкой значения "N_Read_n2" подобрать стабильность показаний и нужную скорость
изменения данных. Лучше ориентироваться на приемлемую скорость изменения, исходя из
того, что чем медленнее - тем стабильней будут показания (после дальнейших преобразований)
3 - установить значение нуля или тары (при ненагруженном тензодатчике) на входе "Zero"
Zero = Out
4 - положить известный груз на тензодатчик и вычислить коэффициент преобразования по формуле:
Scale = Out / m
где:
Scale - коэффициент пропорциональности
Out - показания на выходе блока
m - масса известного груза на тензодатчике

По сути дела, перемножением вы возвращаете значение, выдаваемое АЦП, в исходный вид. А Zero как раз представлено в формате АЦП.
Да уж... Блин... Это не для советской математической школы... Шутка.... :smile37:



ValentinK писал(а):
26.02.2024{, 16:53}

В моём случае сбросив тару при включении, ладно снять ящик с сухим льдом, но опустошить бочку с жидким азотом или аргоном для обнуления тары было-бы достаточно проблематично.
Поэтому я сделал сохранение тары в память, что-бы не потерять его при перебоях с электричеством.
А вот если вам не надо хранить значение тары, то можно его обнулять при включении и не сохранять его в EEPROM. Тогда не нужна будет первая плата для считывания и не нужны будут участки с записью в ППЗУ.
Подождите! А как же Scale? Если первую плату уберём, то вместе с ней и Scale.....


ValentinK писал(а):
26.02.2024{, 17:31}
Плата 5 работает в каждом цикле. Является дешифратором для семисегментных индикаторов на базе MAX7219. С
Честно говоря, не пойму, как это всё работает.... В смысле где-то в глубине души что-то есть... но где-то глубоко, глубоко. По-моему в школе этот материал проходили, но очень давно...
Не суть важна! Главное, что работает! :smile9:
Скажите, на какое число рассчитан данный вариант. Сколько кг или может тонн? 10, 100, 1000...


ValentinK писал(а):
26.02.2024{, 17:31}

Переключатель слева сверху нужен для передачи только положительного числа в дешифратор индикатора. Для этой цели служит и чтение бита и умножение на минус один.
Здесь вообще тёмный лес.
Capture 36.JPG
Что я понял...
Если на входе неотрицательное число, то оно со входа 0 идет на выход Q.
Если же на входе отрицательное число, то оно перемножается с отрицательным и соотвественно на выходе получаем неотрицательное число.

Вопрос: HX711_Out может быть и отрицательным? Почему?


Далее. Блок BitR отвечает за определение отричательного/неотрицательного числа.
Как? Почему на входе bn константа 31.
Внятного хелпа по данному блоку, я к сожалению, не нашел.


И почему нельзя сигнал HX711_Out (даже если он отрицательный) запустить напрямую на блок дешифратора 7-ми сегментного индикатора? С отрицателными числами делёж пойдёт неправильно?

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#54

Сообщение ValentinK » 27.02.2024{, 16:37}

Astreet писал(а):
27.02.2024{, 11:20}
Подождите! А как же Scale? Если первую плату уберём, то вместе с ней и Scale.....
А эта переменная станет постоянной и будет инициализирована при компиляции.
Откомпилировать со Scale = 1, прошить контроллер, поставить эталонную гирьку, посчитать нужное значение Scale.
в FLProg присвоить Scale = "посчитанное значение", откомпилировать, прошить контроллер, проверить гирькой, пользоваться.

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#55

Сообщение ValentinK » 27.02.2024{, 17:00}

В блоке MAX7219 есть возможность выбрать один вход для всех разрядов и посылать в него переменную целиком. Но не помню, что у меня не заработало, и из-за чего я сделал так, как сделал.
Astreet писал(а):
27.02.2024{, 11:20}
Если на входе неотрицательное число, то оно со входа 0 идет на выход Q.
Если же на входе отрицательное число, то оно перемножается с отрицательным и соотвественно на выходе получаем неотрицательное число.
Так и есть.
Astreet писал(а):
27.02.2024{, 11:20}
Далее. Блок BitR отвечает за определение отричательного/неотрицательного числа.
Как? Почему на входе bn константа 31.
Представление отрицательных чисел в Компьютере и микроконтроллере одинаковое первый слева бит (или 31, если по компьютерному считать) равен единице. Вот блок BitR и проверяет является-ли число отрицательным и переключает Switch. Но здесь надо обязательно знать какого типа переменная: целая беззнаковая или со знаком. HX711_Out - переменная Long Integer Диапазон -2147483648 до 2147483647.
Astreet писал(а):
27.02.2024{, 11:20}
Вопрос: HX711_Out может быть и отрицательным? Почему?
А вот поставил я тарелку на весы (300 грамм), сбросил тару (0 грамм), и снял тарелку с весов ( 0 - 300 = -300 грамм).
Astreet писал(а):
27.02.2024{, 11:20}
И почему нельзя сигнал HX711_Out (даже если он отрицательный) запустить напрямую на блок дешифратора 7-ми сегментного индикатора? С отрицателными числами делёж пойдёт неправильно?
Верно, математика в данном случае подобрана для работы с целыми положительными числами.
Astreet писал(а):
27.02.2024{, 11:20}
Скажите, на какое число рассчитан данный вариант. Сколько кг или может тонн? 10, 100, 1000...
Индикатор состоит из восьми сегментов, один забрал на показ минуса при отрицательном значении. На отображение цифр остаётся сем сегментов. Я сделал отображение шести цифр.
Точку можно поставить между любыми разрядами. А на панели написать хоть граммы, хоть тонны, в зависимости от потребности.

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#56

Сообщение Astreet » 29.02.2024{, 06:35}

ValentinK писал(а):
27.02.2024{, 17:00}
Astreet писал(а):
27.02.2024{, 11:20}
Далее. Блок BitR отвечает за определение отричательного/неотрицательного числа.
Как? Почему на входе bn константа 31.
Представление отрицательных чисел в Компьютере и микроконтроллере одинаковое первый слева бит (или 31, если по компьютерному считать) равен единице. Вот блок BitR и проверяет является-ли число отрицательным и переключает Switch. Но здесь надо обязательно знать какого типа переменная: целая беззнаковая или со знаком. HX711_Out - переменная Long Integer Диапазон -2147483648 до 2147483647.

Валентин, скажите, нижняя часть схемы эквивалентна верхней части?
Снимок экрана 2024-02-29 063316.jpg

ValentinK писал(а):
26.02.2024{, 17:47}
Плата 6 выполняется в каждом цикле. Здесь выделена работа с памятью и регистрами ModBus.
Плата_6.png
Тут, я думаю, комментариев достаточно.
Через ModBus планировался сбор данных с нескольких весов на компьютер в офис.
Это пока отложим.... С ModBus ещё не сталкивался и не разбирался с этим.... :smile37:



Что я понял....
Плата 7 и 8 работают совместно.
Дисплей включается на 1 секунду.... И высвечивается следующее...
Z *
S *
Снимок экрана 2024-02-29 064304.jpg
А также T3 / > / TR1 в момент "прилёта" соотвествующих переменных (показаны красным).

Дополните/поправьте, пожалуйста.

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#57

Сообщение ValentinK » 29.02.2024{, 14:50}

Astreet писал(а):
29.02.2024{, 06:35}
Валентин, скажите, нижняя часть схемы эквивалентна верхней части?
Должно работать одинаково. Так, даже более понятно.
Astreet писал(а):
29.02.2024{, 06:35}
Плата 7 и 8 работают совместно.
Плата 8 дисплей для отладки - использовал только для проверки срабатывания отдельных блоков.
На дисплей отображаются переменные, обведённые красным это я не подчистил отладку платы номер 3.

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

Отправлено спустя 10 минут 11 секунд:
Astreet писал(а):
29.02.2024{, 06:35}
Дисплей включается на 1 секунду.... И высвечивается следующее...
Z *
S *
Вспомнил эти символы - метки, в какой строке какая переменная (Z - Zero, S - Scale).

Отправлено спустя 2 минуты 2 секунды:
Astreet писал(а):
29.02.2024{, 06:35}
А также T3 / > / TR1 в момент "прилёта" соотвествующих переменных (показаны красным).
Верно, они показывают, что соответствующие переменные стали единицами.

ValentinK
Рядовой
Сообщения: 18
Зарегистрирован: 16.02.2024{, 17:13}
Репутация: 1
Имя: Валентин

Весы на HX711 в FLPROG

#58

Сообщение ValentinK » 29.02.2024{, 15:05}

Вот так можно изменить плату 7.
Теперь она будет включать дисплей только при изменении переменных.
Плата_7_Изм.png
Плата_7_Изм.png (10.32 КБ) 242 просмотра

Astreet
Сержант
Сообщения: 119
Зарегистрирован: 07.12.2023{, 07:35}
Репутация: 4
Имя: Александр

Весы на HX711 в FLPROG

#59

Сообщение Astreet » 01.03.2024{, 09:47}

Обратил внимание, что некоторые платы имеют комментарии. Поначалу считал, что они написаны вручную. Оказывается нет, внутри платы можно задать условие на выполнение. Каждый день узнаешь что-то новое... Поневоле вспомнил .... О сколько нам открытий чудных готовят просвещенья дух....
Capture 37.JPG
Capture 38.JPG
Плата 8 имеет зеленую стрелочку, а плата 9 красную. Что это?

Отправлено спустя 5 минут 59 секунд:
Плата 9. Масштаб установка.
Что это такое? Для чего? Как работает? Судя по всему, нажимаем кнопочку и счетчик считает от 1 до 1000, а затем умножается на 100.

Capture 39.JPG

Это, я так понимаю, дешифратор для дисплея.....
Capture 40.JPG

OLGA
Сержант
Сообщения: 101
Зарегистрирован: 04.08.2021{, 09:21}
Репутация: 0
Имя: Павел

Весы на HX711 в FLPROG

#60

Сообщение OLGA » 01.03.2024{, 15:14}

Astreet писал(а):
01.03.2024{, 09:53}
Плата 8 имеет зеленую стрелочку, а плата 9 красную. Что это?
не компилировать плату.

Ответить

Вернуться в «Помогите, а то я "нимагу"»