Да, задержка ответа по modbus составляет более 100 ms/цикл. Для моих задач это чрезвычайно много. Есть и другая проблема. Если по какой-то причине плата перестала отвечать - виснет все, а мне на контроллер приходит добрый десяток дискретных и аналоговых сигналов, мне не критично потерять канал, но завесить всю плату - перебор Ну и данные мне нужны в виде Integer, а не Float. Поэтому я чуть подправил код. Теперь данные подаются в виде Long Integer по одному выходу, а в виде Float - по другому. Блок не ждет жестко появления готовности данных, а опрашивает готовность в порядке прохождения программного цикла, обновляя данные по мере готовности. Задержка менее 1 ms/цикл. В проект можно вставить несколько блоков, у меня на плате 2 штуки стоят. ну, и не виснет, если нет связи с АЦП.При использовании блоков НХ711 следует учесть, что если в программе, используются критичные по времени выполнения задачи, то могут возникнуть проблемы с этими задачами, т.к. пока происходит ожидание ответа от НХ711 (появление лог. «0» на выходе DOUT, после окончания преобразования), контроллер занят и основной цикл не выполняется. Для уменьшения влияния на ход выполнения других задач, желательно блок включать по таймеру (вход «En»).
весы hx711
весы hx711
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Последний раз редактировалось ДедОк 31 окт 2016, 15:15, всего редактировалось 1 раз.
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 11 июн 2016, 12:42
- Откуда: Инза
- Благодарил (а): 5 раз
весы hx711
Добавлено (03.11.2016, 21:04)
------------------------------------------------------
ДедОк , проверил Ваш блок – всё работает, спасибо за доработку. Блочёк для НХ711 с переключением каналом модернизируете?
Когда я начинал делать блок, опрос готовности НХ711 я также делал через
«if (digitalRead(DOUT) == 0)», но у меня почему то такая конструкция не пошла, получилось только через «while», тем более в оригинале https://github.com/bogde/HX711/blob/master/HX711.cpp наподобие было. Я только начинаю осваивать Си, наверное какие то ещё другие ошибки были, поэтому и не получилось через оператор if.
а мне на контроллер приходит добрый десяток дискретных и аналоговых сигналов,
Кстати у меня тоже на Arduino Nano приходит: 2 x НХ711 (проверял пока только с одной), 16 дискретных входов (2 х 74НС165), 16 выходов (2 х НС595), 1 аналоговый вход, фазовый регулятор – всё это туда-суда передаётся по Модбасу. Сейчас около 10 тегов использую – «на столе» всё пока работает.
Добавлено (04.11.2016, 07:24)
---------------------------------------------
Сегодня ночью эксперементировал со своим контроллером и обратил внимание, что при некоторых положениях задатчика фазового регулятора http://flprog.ru/publ....2-1-0-2 наблюдаются "вплески" сигнала с НХ711. В результате дальнейших эксперементов, пришёл к выводу, что на данные от НХ711 влияют внешнее прерывание (Int0/Int1) и прерывание от Таймера используемые в блоке фазового регулятора.
Добавил пару строчек сюда:
noInterrupts(); // запретить все прерывания
// подать 24 импульса на SCK и считать состояние с OUT
data[2] = shiftIn(DOUT, PD_SCK, MSBFIRST);
data[1] = shiftIn(DOUT, PD_SCK, MSBFIRST);
data[0] = shiftIn(DOUT, PD_SCK, MSBFIRST);
// установить канал и коэф. усиления для следующего опроса АЦП
for (byte i = 0; i < Ch_Gain; i++)
{
digitalWrite(PD_SCK, HIGH);
digitalWrite(PD_SCK, LOW);
}
interrupts(); // разрешить все прерывания .
Стало значительно лучше, но не 100%.
Буду пробовать делать новый блок на НХ711 на внешнем прерывание с выхода DOUT.
------------------------------------------------------
ДедОк , проверил Ваш блок – всё работает, спасибо за доработку. Блочёк для НХ711 с переключением каналом модернизируете?
Когда я начинал делать блок, опрос готовности НХ711 я также делал через
«if (digitalRead(DOUT) == 0)», но у меня почему то такая конструкция не пошла, получилось только через «while», тем более в оригинале https://github.com/bogde/HX711/blob/master/HX711.cpp наподобие было. Я только начинаю осваивать Си, наверное какие то ещё другие ошибки были, поэтому и не получилось через оператор if.
а мне на контроллер приходит добрый десяток дискретных и аналоговых сигналов,
Кстати у меня тоже на Arduino Nano приходит: 2 x НХ711 (проверял пока только с одной), 16 дискретных входов (2 х 74НС165), 16 выходов (2 х НС595), 1 аналоговый вход, фазовый регулятор – всё это туда-суда передаётся по Модбасу. Сейчас около 10 тегов использую – «на столе» всё пока работает.
Добавлено (04.11.2016, 07:24)
---------------------------------------------
Сегодня ночью эксперементировал со своим контроллером и обратил внимание, что при некоторых положениях задатчика фазового регулятора http://flprog.ru/publ....2-1-0-2 наблюдаются "вплески" сигнала с НХ711. В результате дальнейших эксперементов, пришёл к выводу, что на данные от НХ711 влияют внешнее прерывание (Int0/Int1) и прерывание от Таймера используемые в блоке фазового регулятора.
Добавил пару строчек сюда:
noInterrupts(); // запретить все прерывания
// подать 24 импульса на SCK и считать состояние с OUT
data[2] = shiftIn(DOUT, PD_SCK, MSBFIRST);
data[1] = shiftIn(DOUT, PD_SCK, MSBFIRST);
data[0] = shiftIn(DOUT, PD_SCK, MSBFIRST);
// установить канал и коэф. усиления для следующего опроса АЦП
for (byte i = 0; i < Ch_Gain; i++)
{
digitalWrite(PD_SCK, HIGH);
digitalWrite(PD_SCK, LOW);
}
interrupts(); // разрешить все прерывания .
Стало значительно лучше, но не 100%.
Буду пробовать делать новый блок на НХ711 на внешнем прерывание с выхода DOUT.
Последний раз редактировалось arisov77 04 ноя 2016, 07:26, всего редактировалось 1 раз.
весы hx711
"Дискретный вход "Sleep" - перевод АЦП в "спящий" режим (режим пониженного энергопотребления).
0 - нормальная работа АЦП, 1 - режим "сна"."
Все наоборот. Либо "Sleep" надо назвать "RUN", либо исправить описание.
0 - нормальная работа АЦП, 1 - режим "сна"."
Все наоборот. Либо "Sleep" надо назвать "RUN", либо исправить описание.
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 11 июн 2016, 12:42
- Откуда: Инза
- Благодарил (а): 5 раз
весы hx711
Да, в описании есть такая ошибка, спасибо за замечание.
Сейчас, не спеша делаю новый блок на "внешнем прерывании", там этот вход я совсем исключил, т.к. блок из-за такой универсальности получается немного "утяжелённым".
Ведь для того, чтобы блок (или НХ711) корректно работал(а) врежиме Sleep надо после просыпания выждать некоторое время или сделать 3-4 "пустых" считывания АЦП, затем считать "нормальные" данные, после усреднения выдать результат и потом снова "заснуть" (для максимальной экономичности).
Также для экономичности желательно будет добавить в блок дополнительный выход, сигнализирующий о том, что блок "занят" преобразованием в режиме Sleep (или наоборот, что это преобразование законченно) - это нужно будет для того, что была точка отсчёта для старта таймера, по истечении времени которого снова запустить преобразования АЦП. Или надо будет сделать отдельный вход задания времени «пробуждения»НХ711.
Без задания времени «просыпания» АЦП, на мой взгляд, смысла в энергосбережении нет.
Кстати, segsm у Вас блок НХ711 работает?
Сейчас, не спеша делаю новый блок на "внешнем прерывании", там этот вход я совсем исключил, т.к. блок из-за такой универсальности получается немного "утяжелённым".
Ведь для того, чтобы блок (или НХ711) корректно работал(а) врежиме Sleep надо после просыпания выждать некоторое время или сделать 3-4 "пустых" считывания АЦП, затем считать "нормальные" данные, после усреднения выдать результат и потом снова "заснуть" (для максимальной экономичности).
Также для экономичности желательно будет добавить в блок дополнительный выход, сигнализирующий о том, что блок "занят" преобразованием в режиме Sleep (или наоборот, что это преобразование законченно) - это нужно будет для того, что была точка отсчёта для старта таймера, по истечении времени которого снова запустить преобразования АЦП. Или надо будет сделать отдельный вход задания времени «пробуждения»НХ711.
Без задания времени «просыпания» АЦП, на мой взгляд, смысла в энергосбережении нет.
Кстати, segsm у Вас блок НХ711 работает?
Последний раз редактировалось arisov77 13 ноя 2016, 21:35, всего редактировалось 1 раз.
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 11 июн 2016, 12:42
- Откуда: Инза
- Благодарил (а): 5 раз
весы hx711
Немного изменил «старые» блоки и добавил два новых блока, работающих по внешнему прерыванию (которое возникает по завершению окончания преобразования данных в HX711).
Если вдруг, у кого-то проявиться какие-нибудь всплески, то можете самостоятельно попробовать запретить все прерывания во время считывания данных с НХ711. Для этого в режиме редактирования блока в разделе “FunctionSection” надо удалить в начале двух строк «две косых палочки» //
……………….
// noInterrupts(); // запретить все прерывания
………….
// interrupts(); // разрешить все прерывания
………………………..
и сохранить эти изменения (желательно «Обновить только в проекте»).
Проверил «модернизированные» блоки (без прерываний) в том же контроллере и при тех же условиях, вроде бы «всплесков» не обнаружил, даже при использовании «двухканального» режима НХ711 (у меня один канал (А) измеряет температуру в печи, другой (В) - в блоке управления (с более низкой точностью и с меньшим диапазоном).arisov77 писал(а):эксперементировал со своим контроллером и обратил внимание, что при некоторых положениях задатчика фазового регулятора http://flprog.ru/publ....2-1-0-2 наблюдаются "вплески" сигнала с НХ711.
Если вдруг, у кого-то проявиться какие-нибудь всплески, то можете самостоятельно попробовать запретить все прерывания во время считывания данных с НХ711. Для этого в режиме редактирования блока в разделе “FunctionSection” надо удалить в начале двух строк «две косых палочки» //
……………….
// noInterrupts(); // запретить все прерывания
………….
// interrupts(); // разрешить все прерывания
………………………..
и сохранить эти изменения (желательно «Обновить только в проекте»).
У вас нет необходимых прав для просмотра вложений в этом сообщении.
весы hx711
Всплески. Причина не в разрешении или запрете прерываний, а в ложных "DOUT". Проверять надо как минимум 3 раза в разных вызовах блока. Для этого организовать счетчик на дополнительной переменной.
Последний раз редактировалось segsm 05 дек 2016, 22:09, всего редактировалось 1 раз.
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 11 июн 2016, 12:42
- Откуда: Инза
- Благодарил (а): 5 раз
весы hx711
segsm, спасибо, за замечания.
Если можете, то сделайте эти изменения и выложите свои блоки для НХ711, я в программировании на Си не "силён" - только учусь.
Я прежде чем выложить блоки, протестировал их несколько раз - всё вроде бы работает, в том числе и с отрицательными числами. Т.е. я подавал на входа АЦП +/- 20/40/80мВ - во всём диапазоне, все показания были адекватными.
Так, что - у кого есть возможность, то протестируйте блоки и сообщите результаты - будем вместе разбираться, если что не так.
Если можете, то сделайте эти изменения и выложите свои блоки для НХ711, я в программировании на Си не "силён" - только учусь.
Я прежде чем выложить блоки, протестировал их несколько раз - всё вроде бы работает, в том числе и с отрицательными числами. Т.е. я подавал на входа АЦП +/- 20/40/80мВ - во всём диапазоне, все показания были адекватными.
Так, что - у кого есть возможность, то протестируйте блоки и сообщите результаты - будем вместе разбираться, если что не так.
весы hx711
Откорректировал предыдущее сообщение. Ваш код правильный. А по поводу всплесков, то устранить их получилось только повторным опросом "DOUT". Если за три последовательных опроса он низкий - можно запускать цикл чтения. За трое суток, ни одного выброса. До этого три-четыре выброса в 10мин. Контроллер и HX711 соединены кабелем длиной 2м.
весы hx711
У меня тот же результат с этими блоками. Подключил тензодатчик давления к Модулю HX711, Модуль к Меге 2560, Мегу - к компу через ModBus. На компе данные смотрю в OPC сервере. Показывает нули. Вопрос к разработчику блоков, какой именно мне использовать?
Добавлено (15.02.2017, 10:35)
---------------------------------------------
Спасибо за молчание.
Удалось разобраться самому. Разработчикам модуля небольшая рекомендация. Для новичков в описании блока хорошо было бы написать, что к разным контроллерам выходы модуля HX711 SCK и DT подключаются к разным пинам. Например, к Меге - к 21 и 20 соответственно.
Добавлено (15.02.2017, 10:35)
---------------------------------------------
Спасибо за молчание.
Удалось разобраться самому. Разработчикам модуля небольшая рекомендация. Для новичков в описании блока хорошо было бы написать, что к разным контроллерам выходы модуля HX711 SCK и DT подключаются к разным пинам. Например, к Меге - к 21 и 20 соответственно.
Мурад
весы hx711
Добрый день. Модуль работает. Но почему когда на входе EN логический ноль, сам модуль не засыпает? Очень не хочеться заниматься коммутацией питания. Лучше чтоб модуль сам засыпал.
И еще на красной модуле пришлось 15 ножку сажать на землю, для получения стабильных показаний.
И еще на красной модуле пришлось 15 ножку сажать на землю, для получения стабильных показаний.
-
- Рядовой
- Сообщения: 21
- Зарегистрирован: 04 фев 2016, 02:22
- Откуда: Ставрополь
- Контактная информация:
весы hx711
Приветствую мастера!
Скажите пожалуйста, как откалибровать или правильно настроить модуль? Компилируется проект http://flprog.ru/_fr/13/HX711_10.2016.flp из темы нормально (на меге), но показывает огромные значения (правда я пока кроме "скейл" не менял никакие параметры примера, т.к. не особо соображаю).
тензодатчик подключен только к Е+ Е- и А+ А- (по схеме из гугла).
Пример из ардуино библиотек как-то проще чтоли в настройке (пока не понял куда что именно здесь, а там всё нормально взвешивает)
Собтсвенно почему я пытаюсь в флпрог - хочу дисплей сам прилепить, а не программист ни разу. С флпрог получается, но конечно с вашей помощью всегда.
п.с. ну и вопрос к авторам скетча вышеназванного - для чего там вход 7 и выход 4 ?
Скажите пожалуйста, как откалибровать или правильно настроить модуль? Компилируется проект http://flprog.ru/_fr/13/HX711_10.2016.flp из темы нормально (на меге), но показывает огромные значения (правда я пока кроме "скейл" не менял никакие параметры примера, т.к. не особо соображаю).
тензодатчик подключен только к Е+ Е- и А+ А- (по схеме из гугла).
Пример из ардуино библиотек как-то проще чтоли в настройке (пока не понял куда что именно здесь, а там всё нормально взвешивает)

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

п.с. ну и вопрос к авторам скетча вышеназванного - для чего там вход 7 и выход 4 ?
-
- Подполковник
- Сообщения: 1202
- Зарегистрирован: 14 фев 2016, 14:16
- Откуда: kazahstan
- Благодарил (а): 32 раза
- Поблагодарили: 6 раз
весы hx711
вот делал для себя блоки .один для калибровки другой выводит в граммах.Revenger писал(а): 12 мар 2019, 22:55 Скажите пожалуйста, как откалибровать или правильно настроить модуль?
У вас нет необходимых прав для просмотра вложений в этом сообщении.
весы hx711
Здравствуйте! Я так и не понял, получилось подключить датчик PT100 !? По какой схеме и с каким блоком заработало?
-
- Рядовой
- Сообщения: 57
- Зарегистрирован: 11 июн 2016, 12:42
- Откуда: Инза
- Благодарил (а): 5 раз
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 3 гостя