1

Тема: Миллиомметр 0 — 20 Ом (Arduino)

Новый скетч позволяет расширить верхний предел измерения сопротивления до 1000 Ом

http://rcl-radio.ru/?p=45805

Требуется тестирование!!!

#include <Wire.h>
#include <Adafruit_ADS1015.h>//https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include <LiquidCrystal.h>
Adafruit_ADS1115 ads;//(0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
 
float multiplier = 0.0078125;
const int u_pogr=10;       // 10 мВ - погрешность ADS1115 при измерении 5 В
const float r_ogr=100.00;  // эталонное сопротивление 100 Ом
float u3300;
int  u_digital;
byte n,k;
long u_sum,u_an,x;
float u_iz,rx,rx_m;
 
void setup(void){Serial.begin(9600);lcd.begin(16, 2);ads.begin();delay(1000);}
 
void loop(){
  while(x<50){
x++;ads.setGain(GAIN_TWOTHIRDS);u3300=ads.readADC_SingleEnded(2)*0.1875-u_pogr;}
k++;if(k==60){x=0;k=0;}  // измерение напряжения 5В каждую минуту
 
if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;}
if(u_iz>250&&n==0){n=1;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;}
if(u_iz>500&&n==1){n=2;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;}
if(u_iz>1000&&n==2){n=3;}
if(n==3){ads.setGain(GAIN_TWO);multiplier = 0.0625;}
if(u_iz>2000&&n==3){n=4;}
if(n==4){ads.setGain(GAIN_ONE);multiplier = 0.125;}
if(u_iz>4000&&n==4){n=5;}
if(n==5){ads.setGain(GAIN_TWOTHIRDS);multiplier = 0.1875;}

if(u_iz<4000&&n==5){n=4;}
if(u_iz<2000&&n==4){n=3;}
if(u_iz<1000&&n==3){n=2;}
if(u_iz<500&&n==2){n=1;}
if(u_iz<250&&n==1){n=0;}
 
lcd.setCursor(1,0);
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm");}
if(rx>=1&&rx<100){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om");}
if(rx>=100&&rx<1000){lcd.print("R = ");lcd.print(rx,2);lcd.print(" Om");}
if(rx>=1000){lcd.print(" Rx > 1000 Om    ");}
lcd.setCursor(1,1);lcd.print("U = ");lcd.print(u3300,1);lcd.print(" mV");
u_sum=0;
for(int i=0;i<100;i++){  // измерение
u_digital = ads.readADC_Differential_0_1();
u_sum = u_sum + u_digital;
delay(1);
}
u_an=u_sum/100;
u_iz=u_an * multiplier;
//rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
rx = (r_ogr*u_iz)/(u3300-u_iz);
 
lcd.clear();
}

Данный контент доступен только зарегистрированным пользователям.
http://forum.rcl-radio.ru/uploads/images/2019/09/1e53b07cad4443bbe5ede245aee4f18d.png

2 (2019-09-20 22:47:33 отредактировано indman)

Re: Миллиомметр 0 — 20 Ом (Arduino)

Здравствуйте!
Спасибо за скетч миллиомметра. smile
Собрал на макетке.
Появилось пара вопросов,возможно глупых,так как я начинающий ардуинщик.
1.Сопротивление до 1000 Ом измеряет,но при разомкнутых щупах на дисплее вот это
http://img.radiokot.ru/files/102588/205lvogj3x.jpg
Как поправить ,чтобы было как в прошлом скетче(>20 Ом) >1000 Ом ?
2. Я хочу подкинуть в качестве опорника REF198G на 4.096В
Что нужно подправить в скетче?
3.Нужна ли периодическая очистка дисплея раз в минуту?

3

Re: Миллиомметр 0 — 20 Ом (Arduino)

Попробуйте изменить строку:
if(rx>=1000){lcd.print(" Rx > 1000 Om    ");}
на
if(rx>=1000||rx<-10){lcd.print(" Rx > 1000 Om    ");}

Если опорное будет меньше напряжения питания АЦП, то вероятней всего Вы понизите предел измерения до 1000 Ом, но если опорное достаточно стабильное его можно не измерять (вход А2), а просто указать:

rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;

вместо u3300 указать напряжения опорника в мВ
или подать это напряжение на вход А2 АЦП

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

На фото я заметил что у Вас в качестве эталонного резистора стоит МЛТ-1! Его надо менять на манганин.

4

Re: Миллиомметр 0 — 20 Ом (Arduino)

3.Нужна ли периодическая очистка дисплея раз в минуту?

Нет не нужна, надо править скетч. Попробуйте переместить строку:
lcd.clear();
поставьте ее перед:
lcd.setCursor(1,0);

5 (2019-09-20 22:59:27 отредактировано indman)

Re: Миллиомметр 0 — 20 Ом (Arduino)

Спасибо за быстрый ответ,подредактирую скетч -напишу результат.
Про МЛТ  и манганин в курсе,пока точность на втором плане.

6

Re: Миллиомметр 0 — 20 Ом (Arduino)

indman пишет:

Спасибо за быстрый ответ,подредактирую скетч -напишу результат.
Про МЛТ  и манганин в курсе,пока точность на втором плане.

В принципе lcd.clear() можно убрать, чтобы не было наложений символов можно добавить пробелы:

if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm        ");}
if(rx>=1&&rx<20){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om        ");}
if(rx>=20){lcd.print("  Rx > 20 Om    ");}
lcd.setCursor(1,1);lcd.print("U = ");lcd.print(u3300,1);lcd.print(" mV       ");

7

Re: Миллиомметр 0 — 20 Ом (Arduino)

liman324 пишет:

Попробуйте изменить строку:
if(rx>=1000){lcd.print(" Rx > 1000 Om    ");}
на
if(rx>=1000||rx<-10){lcd.print(" Rx > 1000 Om    ");}
.

Не помогло, lcd clear удалил,пробелы добавил,но идёт наложение символа во 2-й строке
http://img.radiokot.ru/files/102588/205nejat6h.JPG

8

Re: Миллиомметр 0 — 20 Ом (Arduino)

lcd.setCursor(1,1);lcd.print("U = ");lcd.print(u3300,1);lcd.print(" mV");
заменить на:
lcd.setCursor(0,1);lcd.print(" U = ");lcd.print(u3300,1);lcd.print(" mV   ");

9

Re: Миллиомметр 0 — 20 Ом (Arduino)

if(rx>=1000||rx<-10){lcd.print(" Rx > 1000 Om    ");}

if(abs(rx)>=1000){lcd.print(" Rx > 1000 Om    ");}

10 (2019-09-21 00:19:41 отредактировано indman)

Re: Миллиомметр 0 — 20 Ом (Arduino)

Не помогает,наложение символов пропало
Данный контент доступен только зарегистрированным пользователям.
Это скетч с последними правками - я правильно исправил?

11

Re: Миллиомметр 0 — 20 Ом (Arduino)

Не могу понять почему при разомкнутых контактах такое значение, посмотрите в мониторе порта значения u3300 и u_iz, правки в код я сделал:

#include <Wire.h>
#include <Adafruit_ADS1015.h>//https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include <LiquidCrystal.h>
Adafruit_ADS1115 ads;//(0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
 
float multiplier = 0.0078125;
const int u_pogr=10;       // 10 мВ - погрешность ADS1115 при измерении 5 В
const float r_ogr=100.00;  // эталонное сопротивление 100 Ом
float u3300;
int  u_digital;
byte n,k;
long u_sum,u_an,x;
float u_iz,rx,rx_m;
 
void setup(void){Serial.begin(9600);lcd.begin(16, 2);ads.begin();delay(1000);}
 
void loop(){
  while(x<50){
x++;ads.setGain(GAIN_TWOTHIRDS);u3300=ads.readADC_SingleEnded(2)*0.1875-u_pogr;}
k++;if(k==60){x=0;k=0;}  // измерение напряжения 5В каждую минуту
 
if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;}
if(u_iz>250&&n==0){n=1;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;}
if(u_iz>500&&n==1){n=2;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;}
if(u_iz>1000&&n==2){n=3;}
if(n==3){ads.setGain(GAIN_TWO);multiplier = 0.0625;}
if(u_iz>2000&&n==3){n=4;}
if(n==4){ads.setGain(GAIN_ONE);multiplier = 0.125;}
if(u_iz>4000&&n==4){n=5;}
if(n==5){ads.setGain(GAIN_TWOTHIRDS);multiplier = 0.1875;}

if(u_iz<4000&&n==5){n=4;}
if(u_iz<2000&&n==4){n=3;}
if(u_iz<1000&&n==3){n=2;}
if(u_iz<500&&n==2){n=1;}
if(u_iz<250&&n==1){n=0;}

lcd.setCursor(1,0);
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm      ");}
if(rx>=1&&rx<100){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om      ");}
if(rx>=100&&rx<1000){lcd.print("R = ");lcd.print(rx,2);lcd.print(" Om      ");}
if(abs(rx)>=1000){lcd.print(" Rx > 1000 Om    ");}
lcd.setCursor(0,1);lcd.print(" U = ");lcd.print(u3300,1);lcd.print(" mV   ");
u_sum=0;
for(int i=0;i<100;i++){  // измерение
u_digital = ads.readADC_Differential_0_1();
u_sum = u_sum + u_digital;
delay(1);
}
u_an=u_sum/100;
u_iz=u_an * multiplier;
//rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
rx = (r_ogr*u_iz)/(u3300-u_iz);
 
Serial.print(u3300);Serial.print("   ");Serial.println(u_iz);
}

12

Re: Миллиомметр 0 — 20 Ом (Arduino)

У вас предположительно u3300 меньше u_iz, а должно быть равно или больше при разомкнутых контактах

Измените переменную:
const int u_pogr=10;       // 10 мВ - погрешность ADS1115 при измерении 5 В
на
const int u_pogr=0;       // 10 мВ - погрешность ADS1115 при измерении 5 В

13

Re: Миллиомметр 0 — 20 Ом (Arduino)

Здравствуйте!Продолжил тестирование.
Поставил const int u_pogr=0
Строка R>1000 теперь появляется,но нестабильна.Вот скан порта.
http://forum.rcl-radio.ru/uploads/images/2019/09/f7c1f909ca45046cc9a4c2e75a9051f1.jpg
Питание сейчас от USB через кабель.
И ещё один момент. При измерении дисплей не очищается раз в минуту, а с той же периодичностью меняются на короткий момент показания сопротивления. Например, замеряю 1Ом.Через минуту показания меняются на секунду 1.4Ома и обратно на 1Ом?

14

Re: Миллиомметр 0 — 20 Ом (Arduino)

Для питания от USB это нормально.

Монитор порта - нестабильность есть, но она находится в пределах 0,02 %, для меня это было приемлемо. Тем более это результат при разомкнутых контактах, провода в воздухе, посмотрите при сопротивлении 1-100 Ом, стабильность должна быть выше.

Например, замеряю 1Ом.Через минуту показания меняются на секунду 1.4Ома и обратно на 1Ом?

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

15

Re: Миллиомметр 0 — 20 Ом (Arduino)

Если можно убрать пересброс, то хотелось бы это поправить,напрягает маленько.
При питании от стабилизатора +5В строка R>1000 более стабильна,но после замера какого нибудь низкоомного сопротивления может долго отображать произвольно большое число на дисплее.Потом переходит на R>1000.

16

Re: Миллиомметр 0 — 20 Ом (Arduino)

indman пишет:

Если можно убрать пересброс, то хотелось бы это поправить,напрягает маленько.
При питании от стабилизатора +5В строка R>1000 более стабильна,но после замера какого нибудь низкоомного сопротивления может долго отображать произвольно большое число на дисплее.Потом переходит на R>1000.

С этим сложнее, при смене сопротивления меняются множители АЦП , их 6. На это надо время, задержка ни куда не денется, можно только что выводить на экран пока идет переброска пределов. Например выводить "TEST"

17

Re: Миллиомметр 0 — 20 Ом (Arduino)

liman324 пишет:

Например выводить "TEST"

Да,так было бы логичнее,а то этот сброс вводит в заблуждение насчёт качества контактов и реального сопротивления.

18

Re: Миллиомметр 0 — 20 Ом (Arduino)

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

Создайте новую переменную:
long ccc;

далее измените код:

if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;}
if(u_iz>250&&n==0){n=1;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;}
if(u_iz>500&&n==1){n=2;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;}
if(u_iz>1000&&n==2){n=3;}
if(n==3){ads.setGain(GAIN_TWO);multiplier = 0.0625;}
if(u_iz>2000&&n==3){n=4;}
if(n==4){ads.setGain(GAIN_ONE);multiplier = 0.125;}
if(u_iz>4000&&n==4){n=5;}
if(n==5){ads.setGain(GAIN_TWOTHIRDS);multiplier = 0.1875;}

на:

if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;ccc++;}
if(u_iz>250&&n==0){n=1;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;ccc++;}
if(u_iz>500&&n==1){n=2;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;ccc++;}
if(u_iz>1000&&n==2){n=3;}
if(n==3){ads.setGain(GAIN_TWO);multiplier = 0.0625;ccc++;}
if(u_iz>2000&&n==3){n=4;}
if(n==4){ads.setGain(GAIN_ONE);multiplier = 0.125;ccc++;}
if(u_iz>4000&&n==4){n=5;}
if(n==5){ads.setGain(GAIN_TWOTHIRDS);multiplier = 0.1875;ccc++;}

далее :

if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm      ");}
if(rx>=1&&rx<100){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om      ");}
if(rx>=100&&rx<1000){lcd.print("R = ");lcd.print(rx,2);lcd.print(" Om      ");}
if(abs(rx)>=1000){lcd.print(" Rx > 1000 Om    ");}

заменить на:

if(ccc>100){
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm      ");}
if(rx>=1&&rx<100){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om      ");}
if(rx>=100&&rx<1000){lcd.print("R = ");lcd.print(rx,2);lcd.print(" Om      ");}
if(abs(rx)>=1000){lcd.print(" Rx > 1000 Om    ");}}else {lcd.print("       TEST      ");}

замените:

f(u_iz<4000&&n==5){n=4;}
if(u_iz<2000&&n==4){n=3;}
if(u_iz<1000&&n==3){n=2;}
if(u_iz<500&&n==2){n=1;}
if(u_iz<250&&n==1){n=0;}

на:

f(u_iz<4000&&n==5){n=4;ccc=0;}
if(u_iz<2000&&n==4){n=3;ccc=0;}
if(u_iz<1000&&n==3){n=2;ccc=0;}
if(u_iz<500&&n==2){n=1;ccc=0;}
if(u_iz<250&&n==1){n=0;ccc=0;}

Если происходит переброс множителя АЦП ccc обнуляется, как только процесс переброса множителя завершен ссс начинает набирать число, как только число станет больше 100 выводятся показания, если нет выводится "TEST".

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

19

Re: Миллиомметр 0 — 20 Ом (Arduino)

К сожалению,с 1-го раза не получается.
На дисплее вот это
http://forum.rcl-radio.ru/uploads/images/2019/09/e49f56ca41f7c4079a87537bedc45259.jpg
Я правильно подправил скетч?
Данный контент доступен только зарегистрированным пользователям.

20

Re: Миллиомметр 0 — 20 Ом (Arduino)

Попробуйте этот код:

#include <Wire.h>
#include <Adafruit_ADS1015.h>//https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include <LiquidCrystal.h>
Adafruit_ADS1115 ads;//(0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
 
float multiplier = 0.0078125;
const int u_pogr=0;       // 10 мВ - погрешность ADS1115 при измерении 5 В
const float r_ogr=100.00;  // эталонное сопротивление 100 Ом
float u3300;
int  u_digital;
byte n,k;
long u_sum,u_an,x;
float u_iz,rx,rx_m;
long ccc;
 
void setup(void){Serial.begin(9600);lcd.begin(16, 2);ads.begin();delay(1000);}
 
void loop(){
  while(x<50){
x++;ads.setGain(GAIN_TWOTHIRDS);u3300=ads.readADC_SingleEnded(2)*0.1875-u_pogr;}
k++;if(k==60){x=0;k=0;}  // измерение напряжения 5В каждую минуту

if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;ccc++;}
if(u_iz>250&&n==0){n=1;ccc=0;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;ccc++;}
if(u_iz>500&&n==1){n=2;ccc=0;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;ccc++;}
if(u_iz>1000&&n==2){n=3;ccc=0;}
if(n==3){ads.setGain(GAIN_TWO);multiplier = 0.0625;ccc++;}
if(u_iz>2000&&n==3){n=4;ccc=0;}
if(n==4){ads.setGain(GAIN_ONE);multiplier = 0.125;ccc++;}
if(u_iz>4000&&n==4){n=5;ccc=0;}
if(n==5){ads.setGain(GAIN_TWOTHIRDS);multiplier = 0.1875;ccc++;}

if(u_iz<4000&&n==5){n=4;ccc=0;}
if(u_iz<2000&&n==4){n=3;ccc=0;}
if(u_iz<1000&&n==3){n=2;ccc=0;}
if(u_iz<500&&n==2){n=1;ccc=0;}
if(u_iz<250&&n==1){n=0;ccc=0;}

lcd.setCursor(1,0);
if(ccc>10){
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm      ");}
if(rx>=1&&rx<100){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om      ");}
if(rx>=100&&rx<1000){lcd.print("R = ");lcd.print(rx,2);lcd.print(" Om      ");}
if(abs(rx)>=1000){lcd.print("Rx > 1000 Om    ");}}else {lcd.setCursor(1,0);lcd.print("       TEST      ");}
u_sum=0;
for(int i=0;i<100;i++){  // измерение
u_digital = ads.readADC_Differential_0_1();
u_sum = u_sum + u_digital;
delay(1);
}
u_an=u_sum/100;
u_iz=u_an * multiplier;
//rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
rx = (r_ogr*u_iz)/(u3300-u_iz);
 
Serial.print(u3300);Serial.print("   ");Serial.println(u_iz);
}

21

Re: Миллиомметр 0 — 20 Ом (Arduino)

Попробовал,изменения есть.
Строка R>1000 не сразу,но появляется а при замыкании щупов на дисплее надпись TEST и где то через полминуты R=0.0. 2-й строки с замером напряжения вообще нет.
Видимо лучше возвратиться к старому скетчу до 20 Ом,чтобы вам голову больше не морочить?

22

Re: Миллиомметр 0 — 20 Ом (Arduino)

Попробуйте последнюю попытку:

#include <Wire.h>
#include <Adafruit_ADS1015.h>//https://github.com/adafruit/Adafruit_ADS1X15/archive/master.zip
#include <LiquidCrystal.h>
Adafruit_ADS1115 ads;//(0x48);
/* в файле библиотеки Adafruit_ADS1015.cpp найти все строчки: ADS1015_REG_CONFIG_DR_1600SPS и заменить на: ADS1015_REG_CONFIG_DR_128SPS */
LiquidCrystal lcd(7, 8, 9, 10, 11, 12);// RS,E,D4,D5,D6,D7
 
float multiplier = 0.0078125;
const int u_pogr=0;       // 10 мВ - погрешность ADS1115 при измерении 5 В
const float r_ogr=100.00;  // эталонное сопротивление 100 Ом
float u3300;
int  u_digital;
byte n,k;
long u_sum,u_an,x;
float u_iz,rx,rx_m;
long ccc;
 
void setup(void){Serial.begin(9600);lcd.begin(16, 2);ads.begin();delay(1000);}
 
void loop(){
  while(x<50){
x++;ads.setGain(GAIN_TWOTHIRDS);u3300=ads.readADC_SingleEnded(2)*0.1875-u_pogr;}
k++;if(k==60){x=0;k=0;}  // измерение напряжения 5В каждую минуту

if(n==0){ads.setGain(GAIN_SIXTEEN);multiplier = 0.0078125;ccc++;}
if(u_iz>250&&n==0){n=1;ccc=0;}
if(n==1){ads.setGain(GAIN_EIGHT);multiplier = 0.015625;ccc++;}
if(u_iz>500&&n==1){n=2;ccc=0;}
if(n==2){ads.setGain(GAIN_FOUR);multiplier = 0.03125;ccc++;}
if(u_iz>1000&&n==2){n=3;ccc=0;}
if(n==3){ads.setGain(GAIN_TWO);multiplier = 0.0625;ccc++;}
if(u_iz>2000&&n==3){n=4;ccc=0;}
if(n==4){ads.setGain(GAIN_ONE);multiplier = 0.125;ccc++;}
if(u_iz>4000&&n==4){n=5;ccc=0;}
if(n==5){ads.setGain(GAIN_TWOTHIRDS);multiplier = 0.1875;ccc++;}

if(u_iz<4000&&n==5){n=4;ccc=0;}
if(u_iz<2000&&n==4){n=3;ccc=0;}
if(u_iz<1000&&n==3){n=2;ccc=0;}
if(u_iz<500&&n==2){n=1;ccc=0;}
if(u_iz<250&&n==1){n=0;ccc=0;}

lcd.setCursor(1,0);
if(ccc>1){
if(rx<1){rx_m=rx*1000;lcd.print("R = ");lcd.print(rx_m,1);lcd.print(" mOm      ");}
if(rx>=1&&rx<100){lcd.print("R = ");lcd.print(rx,3);lcd.print(" Om      ");}
if(rx>=100&&rx<1000){lcd.print("R = ");lcd.print(rx,2);lcd.print(" Om      ");}
if(abs(rx)>=1000){lcd.print("Rx > 1000 Om    ");}}else {lcd.setCursor(1,0);lcd.print("       TEST      ");}
lcd.setCursor(0,1);lcd.print(" U = ");lcd.print(u3300,1);lcd.print(" mV   ");
u_sum=0;
for(int i=0;i<100;i++){  // измерение
u_digital = ads.readADC_Differential_0_1();
u_sum = u_sum + u_digital;
delay(1);
}
u_an=u_sum/100;
u_iz=u_an * multiplier;
//rx=(u3300/((u3300-u_iz)/r_ogr))-r_ogr;
rx = (r_ogr*u_iz)/(u3300-u_iz);
 
Serial.print(u3300);Serial.print("   ");Serial.println(u_iz);
}

23

Re: Миллиомметр 0 — 20 Ом (Arduino)

2-я строка с замером напряжения появилась,но по прежнему через минуту идёт cброс значений и надписи TEST на дисплее нет.

24

Re: Миллиомметр 0 — 20 Ом (Arduino)

то есть как прежде. Последнее что можно сделать это поменять кол-во циклов при котором выводится строка "TEST"

if(ccc>1){

ccc>от 1 до 5

25

Re: Миллиомметр 0 — 20 Ом (Arduino)

Добрый день!!!
У меня плата у которой ADS на проводках подключена работает нормально.
А другая у которой всё на плате дурит при КЗ показывает -5000.4.
Вроде всё проверил и сравнил с рабочей,ошибок не вижу.
Сылку что дали я не понял как там проверять,в описании нет ничего.

Миклин Ю.К.