Добавлено (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.