Я понимаю что так не должно быть, но не меряет и все тут, я уже и мегу перепаял другую.
rez=tic на rez=tic*20 менял - ничего не поменялось
Умножил тут oled.print (int(rez)*20) заработало, но меряет от 40Гц до 32кГц с шагом 20Гц. До 40Гц и выше 32кГц какой-то бред с минусовыми показаниями
Чудес не бывает.
1. Какой-то косяк с таймерами (неправильно тикают миллисекунды)
2. Берет результат не из функции частотомера, а из тестового замера (иначе почему умножение на 20 ничего не меняет). Поставьте вывод в сериал в функциях частотомера и тест частоты
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
Незаработало
Конечно не в 20 раз меньше меряет, а всего в 2.5 раза вместо 1 кГц показывает 400 Гц, и еще начал тупить при переключении режимов
Может как то можно в скетче просто умножить на 20 результат измерения частоты
В 349 строке замените rez=tic; на rez=tic*20; Но это очень большой костыль. Так быть не должно, частотомер должен работать без этого.
Я понимаю что так не должно быть, но не меряет и все тут, я уже и мегу перепаял другую.
rez=tic на rez=tic*20 менял - ничего не поменялось
Умножил тут oled.print (int(rez)*20) заработало, но меряет от 40Гц до 32кГц с шагом 20Гц. До 40Гц и выше 32кГц какой-то бред с минусовыми показаниями
Ради спортивного интереса хотел доделать чтобы мерял частоту как положено, но смирился, пускай пока будет так. Может кто еще что-нибудь подскажет.
Пока с этим рабирался, опять же ради спортивного... сделал для себя, два автопробника
прикольные пробнички=) я все хочу в машину запихнуть чтобы валялся, но боюсь литий использовать в виде аккумулятора хз как он себя в холоде поведет длительное время. А аналоги размер не маленький
А как это вам удалось Arduino pro mini и батарею запихнуть к коробочку из под OLED 0.96" ?
Извините, долго не отвечал, был занят другими делами
Плату Arduino pro mini сточил по 0.5 мм с обеих сторон до пистонов
И в той коробочке стоит не только дисплей OLED 0.96", Arduino pro mini, АКБ а и плата заряда на 4056, кнопка переключения режимов и выключатель питания
А еще, извините за флуд, точно в такой же коробочке сделал осциллографический пробник (осциллоскоп)
Спасибо, уже исправил, измеряет точно. Теперь думаю поднять измерение напряжение вольт до 15. Сильно повлияет на измерение емкости если изменить сопротивление 20 кОм на 62 кОм?
Спасибо, уже исправил, измеряет точно. Теперь думаю поднять измерение напряжение вольт до 15. Сильно повлияет на измерение емкости если изменить сопротивление 20 кОм на 62 кОм?
По идее не должно. Я этим давно занимался, тонкости уже не помню.
Спасибо автору и другим участникам, повторил пробник от автора на arduino pro mini (последний с кнопкой и измерением емкости). Точность измерения напряжения и сопротивления подправил резисторами, а вот частоту меряет ровно в 20 раз меньшую. К примеру на генераторе 1kHz а показывает 50Hz.
Может кто подскажет в чем дело?
Заранее спасибо!
Подтверждаю. Частоту занижает тоже в 20 раз. Скетч последний. Для себя только изменил предел измерения напряжения до 20 В изменивши резистор 4,7 к на 1,2к и добавил резистор 4,7 к на A3 для защиты. Исправленной версии скетча вроде не заметил на форуме.
Подтверждаю. Частоту занижает тоже в 20 раз. Скетч последний. Для себя только изменил предел измерения напряжения до 20 В изменивши резистор 4,7 к на 1,2к и добавил резистор 4,7 к на A3 для защиты. Исправленной версии скетча вроде не заметил на форуме.
Теоретически этого не может быть, но один раз это случайность, а два - уже система. Скетч для измерения частоты подсказал в 13 посту Димакс. Может к нему обратиться? Может быть какой-то хитрый клон контроллера попался, у которого таймеры иначе программируются?
if (analogRead(A0)>100)rr=0;prob=1;goto vf;// ПРОВЕРКА КНОПКИ
Для чего тут goto vf;?
Если этот "goto vf;" закоментировать то частотомер должен работать норм
Скорее всего, для того, чтобы выйти из режима частотомера. Дело было давно, наверное без этого были проблемы с переключением режимов. В скетче скорее всего много ненужного, но работает и ладно.
Здесь еще можно посмотреть http://arduino.ru/forum/obshchii/multimetr-arduinoandroid . Практически тот-же пробник, но вывод и переключение режимов через блютус. Добавлено измерение малых емкостей и генератор. Может что оттуда пригодится.
Сначала по картинке. Спасибо xfvlad, за то, что он изобразил эквивалентные схемы для всех режимов измерений. Я немногo подкорректировал его работу.
1. Убрал резисторы, которые не влияют на результаты измерений, т.к. по сравнению с входным сопротивлением АЦП, они ничтожны.
2. Отметил красным, что влияет на точность в данном режиме.
3. Исправил неточность в 4 режиме (было указано питание на делителе 1,1В. На самом деле - там питание 5В за вычетом падения напряжения на верхнем ключе Ардуино, а 1,1В - это опорное АЦП).
Теперь по другим вопросам про резистор 500 Ом вместо 470. Это гуляет из старых скетчей, просто никто не заморачивается с редактированием.
По поводу резистора 900 ом вместо 1,2 КОм. Он влияет только на вольтметр и измерение емкостей. Для вольтметра нужно скорректировать коэффициент делителя, а для измерения емкостей, точно указать resistorValue (сумму сопротивлений резисторов 20 КОм и 900 Ом).
Ну а насчет коэффициента - здесь куча факторов. Точность резисторов, точность ИОН и прибора которым сравнивается. Так что он корректируется по фактическим данным.
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
Спасибо! Попробую
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
Незаработало
Конечно не в 20 раз меньше меряет, а всего в 2.5 раза вместо 1 кГц показывает 400 Гц, и еще начал тупить при переключении режимов
Может как то можно в скетче просто умножить на 20 результат измерения частоты
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
Незаработало
Конечно не в 20 раз меньше меряет, а всего в 2.5 раза вместо 1 кГц показывает 400 Гц, и еще начал тупить при переключении режимов
Может как то можно в скетче просто умножить на 20 результат измерения частоты
В 349 строке замените rez=tic; на rez=tic*20; Но это очень большой костыль. Так быть не должно, частотомер должен работать без этого.
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
Незаработало
Конечно не в 20 раз меньше меряет, а всего в 2.5 раза вместо 1 кГц показывает 400 Гц, и еще начал тупить при переключении режимов
Может как то можно в скетче просто умножить на 20 результат измерения частоты
В 349 строке замените rez=tic; на rez=tic*20; Но это очень большой костыль. Так быть не должно, частотомер должен работать без этого.
Я понимаю что так не должно быть, но не меряет и все тут, я уже и мегу перепаял другую.
rez=tic на rez=tic*20 менял - ничего не поменялось
Умножил тут
oled.print (int(rez)*20) заработало, но меряет от 40Гц до 32кГц с шагом 20Гц. До 40Гц и выше 32кГц какой-то бред с минусовыми показаниямиРади спортивного интереса хотел доделать чтобы мерял частоту как положено, но смирился, пускай пока будет так. Может кто еще что-нибудь подскажет.Пока с этим рабирался, опять же ради спортивного... сделал для себя, два автопробникаЯ понимаю что так не должно быть, но не меряет и все тут, я уже и мегу перепаял другую.
rez=tic на rez=tic*20 менял - ничего не поменялось
Умножил тут
oled.print (int(rez)*20) заработало, но меряет от 40Гц до 32кГц с шагом 20Гц. До 40Гц и выше 32кГц какой-то бред с минусовыми показаниямиЧудес не бывает.
1. Какой-то косяк с таймерами (неправильно тикают миллисекунды)
2. Берет результат не из функции частотомера, а из тестового замера (иначе почему умножение на 20 ничего не меняет). Поставьте вывод в сериал в функциях частотомера и тест частоты
3. Косяк с библиотекой дисплея
4. ХЗ
Спасибо за помощь
Да я и сам в чудеса не верю, придет дисплей буду эксперементировать на макетке
фьюзы поставьте правильные в дудке 3F D9 FF 05 по вертикали и всё заработает правильно
Незаработало
Конечно не в 20 раз меньше меряет, а всего в 2.5 раза вместо 1 кГц показывает 400 Гц, и еще начал тупить при переключении режимов
Может как то можно в скетче просто умножить на 20 результат измерения частоты
В 349 строке замените rez=tic; на rez=tic*20; Но это очень большой костыль. Так быть не должно, частотомер должен работать без этого.
Я понимаю что так не должно быть, но не меряет и все тут, я уже и мегу перепаял другую.
rez=tic на rez=tic*20 менял - ничего не поменялось
Умножил тут
oled.print (int(rez)*20) заработало, но меряет от 40Гц до 32кГц с шагом 20Гц. До 40Гц и выше 32кГц какой-то бред с минусовыми показаниямиРади спортивного интереса хотел доделать чтобы мерял частоту как положено, но смирился, пускай пока будет так. Может кто еще что-нибудь подскажет.Пока с этим рабирался, опять же ради спортивного... сделал для себя, два автопробникаприкольные пробнички=) я все хочу в машину запихнуть чтобы валялся, но боюсь литий использовать в виде аккумулятора хз как он себя в холоде поведет длительное время. А аналоги размер не маленький
А как это вам удалось Arduino pro mini и батарею запихнуть к коробочку из под OLED 0.96" ?
satalexx а как вы запихнули про мини в коробку из под дисплея ?
А как это вам удалось Arduino pro mini и батарею запихнуть к коробочку из под OLED 0.96" ?
Извините, долго не отвечал, был занят другими делами
Плату Arduino pro mini сточил по 0.5 мм с обеих сторон до пистонов
И в той коробочке стоит не только дисплей OLED 0.96", Arduino pro mini, АКБ а и плата заряда на 4056, кнопка переключения режимов и выключатель питания
А еще, извините за флуд, точно в такой же коробочке сделал осциллографический пробник (осциллоскоп)
Здравствуйте. Подскажите, если при измерении напряжения показания занижаются на 0,3 в. Можно как-то исправить?
Здравствуйте. Подскажите, если при измерении напряжения показания занижаются на 0,3 в. Можно как-то исправить?
В скетче подкорректировать значение сопротивлений делителя вольтметра.
Последний скетч для дисплея 0,91? И какой емкости желательно использовать аккумулятор для компактности прибора?
Просмотрел скетч и не нашел где можно изменить коефициент делителя
Просмотрел скетч и не нашел где можно изменить коефициент делителя
Скетч из какого поста?
Хотя в принципе код вольтметра практически везде одинаков.
//********************************************************************** //вольтметр voltmeter: ri=1; analogReference(INTERNAL);// включаем внутренний ИОН 1.1 В pinMode(4, OUTPUT); // выводим на 4 пин 0 digitalWrite(4,0); // устанавливая его в 0(включаем нижний резистор делителя) delay(2); adc_buff=0; for (int n=0; n<=255; n++ ) { adc_buff+= analogRead(A0); } adc_buff >>=4; // 16368 полная шкала 14bit rez= (float)adc_buff/16368.0*6.133;// - реальный коэфф делителя if (adc_buff > 150) goto vyv; //если есть напряжения выводим - иначе измеряем сопротивление //************************************************************************В 13 строке измените последнее число
Спасибо, уже исправил, измеряет точно. Теперь думаю поднять измерение напряжение вольт до 15. Сильно повлияет на измерение емкости если изменить сопротивление 20 кОм на 62 кОм?
Спасибо, уже исправил, измеряет точно. Теперь думаю поднять измерение напряжение вольт до 15. Сильно повлияет на измерение емкости если изменить сопротивление 20 кОм на 62 кОм?
По идее не должно. Я этим давно занимался, тонкости уже не помню.
Всем доброго времени суток!
Апну тему!
Спасибо автору и другим участникам, повторил пробник от автора на arduino pro mini (последний с кнопкой и измерением емкости). Точность измерения напряжения и сопротивления подправил резисторами, а вот частоту меряет ровно в 20 раз меньшую. К примеру на генераторе 1kHz а показывает 50Hz.
Может кто подскажет в чем дело?
Заранее спасибо!
Подтверждаю. Частоту занижает тоже в 20 раз. Скетч последний. Для себя только изменил предел измерения напряжения до 20 В изменивши резистор 4,7 к на 1,2к и добавил резистор 4,7 к на A3 для защиты. Исправленной версии скетча вроде не заметил на форуме.
Подтверждаю. Частоту занижает тоже в 20 раз. Скетч последний. Для себя только изменил предел измерения напряжения до 20 В изменивши резистор 4,7 к на 1,2к и добавил резистор 4,7 к на A3 для защиты. Исправленной версии скетча вроде не заметил на форуме.
Теоретически этого не может быть, но один раз это случайность, а два - уже система. Скетч для измерения частоты подсказал в 13 посту Димакс. Может к нему обратиться? Может быть какой-то хитрый клон контроллера попался, у которого таймеры иначе программируются?
Тоже задумался над частотомером (еще не собирал,SSD1306 только приехал из поднебесной)
код частотомера работает в протеусе норм
Исходник отсюда http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=6#comment-605508
строка 342-
Для чего тут goto vf;?
Если этот "goto vf;" закоментировать то частотомер должен работать норм
Должно быть так
if (analogRead(A0)>100){rr=0;prob=1;goto vf;}// ПРОВЕРКА КНОПКИиначе результат идет отсюда-
void test_F(){// ******* Тест наличия импульсов с F>5 Гц.******** init_fm(); ri=0; int_tic=0; TCNT1 = 0; TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);//тактировани от входа Т1 delay(50);// Тестовый замер (срабатывает> 5 Гц устойчиво) TCCR1B=0; tic= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало rez=tic; }То есть измерение всего 50 миллисек,а это в аккурат меньше секунды в 20 раз!
Проверял все скетчи и заметил что этот прокол появился со скетча с кнопкой.
Должно быть так
if (analogRead(A0)>100){rr=0;prob=1;goto vf;}// ПРОВЕРКА КНОПКИиначе результат идет отсюда-
void test_F(){// ******* Тест наличия импульсов с F>5 Гц.******** init_fm(); ri=0; int_tic=0; TCNT1 = 0; TCCR1B = (1<<CS10)|(1<<CS11)|(1<<CS12);//тактировани от входа Т1 delay(50);// Тестовый замер (срабатывает> 5 Гц устойчиво) TCCR1B=0; tic= ((uint32_t)int_tic<<16) | TCNT1; //сложить что натикало rez=tic; }То есть измерение всего 50 миллисек,а это в аккурат меньше секунды в 20 раз!
Работает как надо но только до 32700 Гц, дальше идет на уменьшение к 0, после 65400 снова считает от 0 и выше
Строка 141 смущает
Еще раз повторю что я в ардуино я дуб дубом,так,поверхностно...
Попробуйте замените на
у меня на маетке вроде работает
Изменил на это
satalexx Можете поделится схемой и скетчем для пробника на семисегментном и ндикаторе
В семисегментном автопробнике arduino нет, там обычный китайский вольтметр
Кажется нашел глюк частотомера
probn:;//******************** РЕЖИМ ПРОБНИКА **************************** //**************************** ЧАСТОТОМЕР ****************************************** test_F(); // Тест наличия импульсов с F>5 Гц. if (tic>1) { // Если есть импульсы измеряем частоту f_meter(); goto ind; } //**************************** Вольтметр ******************************************В 5 строке заменить tic на rez
изменений было много и не заметил, что эта переменная переопределяется.
Кажется нашел глюк частотомера
probn:;//******************** РЕЖИМ ПРОБНИКА **************************** //**************************** ЧАСТОТОМЕР ****************************************** test_F(); // Тест наличия импульсов с F>5 Гц. if (tic>1) { // Если есть импульсы измеряем частоту f_meter(); goto ind; } //**************************** Вольтметр ******************************************В 5 строке заменить tic на rez
изменений было много и не заметил, что эта переменная переопределяется.
Спасибо!!! Сейчас перезалью скетч в пробник. Все таки глюк был
Спасибо!!! Сейчас перезалью скетч в пробник. Все таки глюк был
Скорее всего причина в этом. Изменений было много и глаз замылился.
Исходник отсюда http://arduino.ru/forum/proekty/universalnyi-arduino-probnik?page=6#comment-605508
строка 342-
Для чего тут goto vf;?
Если этот "goto vf;" закоментировать то частотомер должен работать норм
Скорее всего, для того, чтобы выйти из режима частотомера. Дело было давно, наверное без этого были проблемы с переключением режимов. В скетче скорее всего много ненужного, но работает и ладно.
Здесь еще можно посмотреть http://arduino.ru/forum/obshchii/multimetr-arduinoandroid . Практически тот-же пробник, но вывод и переключение режимов через блютус. Добавлено измерение малых емкостей и генератор. Может что оттуда пригодится.
Кажется нашел глюк частотомера
probn:;//******************** РЕЖИМ ПРОБНИКА **************************** //**************************** ЧАСТОТОМЕР ****************************************** test_F(); // Тест наличия импульсов с F>5 Гц. if (tic>1) { // Если есть импульсы измеряем частоту f_meter(); goto ind; } //**************************** Вольтметр ******************************************В 5 строке заменить tic на rez
изменений было много и не заметил, что эта переменная переопределяется.
А какая разница rez или tic,если в подпрограмме test_f() rez=tic
tic , изменяется внутри функции, снаружи он другой. A rez - глобальная переменная.
МММ...я об этом мало чего знаю,пойду гуглить...
// Входом частотомера является пин цифровой пин 5 #include <Wire.h> #include "SSD1306Ascii.h" #include "SSD1306AsciiWire.h" #define I2C_ADDRESS 0x3C SSD1306AsciiWire oled; #define resistorValue 24500.0F // Зарядный резистор для измерения емкости volatile unsigned int int_tic = 0; volatile unsigned long tic, startTime; long adc_buff; unsigned long elapsedTime; float u_del, u_izm, rez, microFarads; byte ri, rr = 1; // режим измерения void setup() { pinMode(2, INPUT);// 2 пин высокий импеданс pinMode(3, INPUT);// 3 пин высокий импеданс pinMode(4, INPUT);// 4 пин высокий импеданс pinMode(5, INPUT);// вход сигнала частотомера (для atmega168/328) pinMode(6, INPUT_PULLUP); // кнопка Wire.begin(); Wire.setClock(400000L); oled.begin(&Adafruit128x32, I2C_ADDRESS); oled.setFont(font5x7); oled.clear(); oled.set2X(); oled.println (" Ucc");// При включении показать напряжение питания oled.print (readVcc() / 1000.0, 2); oled.print (" mV"); delay(2000); TCCR1A = 0; TIMSK1 = 1 << TOIE1; //прерывание по переполнению } ISR (TIMER1_OVF_vect) { int_tic++; } void loop() { if (digitalRead(6) == 0) { rr++; delay(250); if (rr > 5)rr = 1; } oled.setCursor(1, 0); switch (rr) { case 1: oled.println(" Probnik "); test_f(); if (tic > 1) f_meter(); else { test_v(); if (adc_buff > 150) { voltmeter(); } else ommeter(); } break; case 2: oled.println(" F meter "); test_f(); if (tic > 1) f_meter(); break; case 3: oled.println(" V meter "); test_v(); voltmeter(); break; case 4: oled.println(" R meter "); ommeter(); break; case 5: oled.println(" C meter "); c_meter(); break; } vdsp(); } /*-------------------------------- ФУНКЦИИ -----------------------------------*/ /***************************** ИЗМЕРЕНИЕ БАТАРЕИ **************************/ long readVcc() { //float result; // Read 1.1V reference against AVcc ADMUX = _BV(REFS0) | _BV(MUX3) | _BV(MUX2) | _BV(MUX1); delay(2); // Wait for Vref to settle ADCSRA |= _BV(ADSC); // Convert while (bit_is_set(ADCSRA, ADSC)); uint8_t low = ADCL; // сначала нужно прочесть ADCL - это запирает ADCH uint8_t high = ADCH; // разлочить оба float result = (high << 8) | low; result = 1098702.00 / result; //1.03357 * 1023.0*1000 ((1.074 * 1023.0 * 1000)) return result; } /*****************ВЫВОД НА SSD1306*********************************/ void vdsp() { if (rez > 4100000 || rez <= 0) { oled.print("_ _ _ _ _ "); //ХЗ что на входе } else if (ri == 5 && rez > 0 && rez < 1) { //Щупы 3акорочены или сопроивление < 1 Om //pinMode(8, OUTPUT); // выводим на 8 пин 1, подключаем спикер //digitalWrite(8,1); // для активного спикера на 8 пине //tone(9, 500, 100); // для пассивного спикера на 9 пине oled.print(" S H O R T "); } else if (ri == 0) { oled.print (uint32_t(rez)); oled.print(" HZ "); // Ввод частоты } else if (ri == 1) { oled.print(rez, 2); oled.print(" V "); // Вывод напряжения } else if (ri == 2 || ri == 3) { rez = rez / 1000; oled.print(rez, 1); oled.print(" kOhm "); } else if (ri == 4 || ri == 5) { oled.print(rez, 1); oled.print(" Ohm "); // Вывод сопртивления } else if (ri == 6) { if (rez < 0.4)oled.print("<0.4"); else { oled.print(rez, 1); } oled.print(" mF "); // Вывод емкости } } /***************************** ЧАСТОТОМЕР **************************/ void test_f() { pinMode(4, OUTPUT); // выводим на 4 пин 0 digitalWrite(4, 0); // загрубляем вход (борьба с наводками) TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); //тактировани от входа Т1 delay(50);// Тестовый замер (срабатывает> 5 Гц 10 устойчиво) TCCR1B = 0; tic = ((uint32_t)int_tic << 16) | TCNT1; //сложить что натикало pinMode(4, INPUT); } void f_meter() { ri = 0; pinMode(4, OUTPUT); // выводим на 4 пин 0 digitalWrite(4, 0); // загрубляем вход (борьба с наводками) int_tic = 0; TCNT1 = 0; TCCR1B = (1 << CS10) | (1 << CS11) | (1 << CS12); //тактировани от входа Т1 delay(1000);// Время измерения TCCR1B = 0; tic = ((uint32_t)int_tic << 16) | TCNT1; //сложить что натикало rez = tic; pinMode(4, INPUT); } /***************************** ВОЛЬТМЕТР **************************/ void test_v() { analogReference(INTERNAL);// включаем внутренний ИОН 1.1 В pinMode(4, OUTPUT); digitalWrite(4, 0); //включаем нижний резистор делителя на 1,2 кОм delay(2); adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A1); } adc_buff >>= 4; // 16368 полная шкала 14bit analogReference(DEFAULT);// подключаем опорное 5 В pinMode(4, INPUT); } void voltmeter() { ri = 1; rez = (float)adc_buff / 16368.0 * 19.30; // реальный коэфф делителя ((r1+r2)/r2*1.1) } /***************************** ОММЕТР ***************************/ void ommeter() { ri = 2; //############################# 20 kOm ###################################### pinMode(4, OUTPUT); // 4 пин выход digitalWrite(4, 1); // переводим его в 1 подключаем измерительный резистор 20 kOm delay(2); // измеряем полное напряжение на делителе под нагрузкой adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A1); } adc_buff >>= 4; u_del = (float)adc_buff; // измеряем напряжение на измеряемом резисторе adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A3); } adc_buff >>= 4; u_izm = (float)adc_buff; rez = float(u_izm * 20000) / float(u_del - u_izm); // для 20 kOm pinMode(4, INPUT); if (u_izm > 4000) goto vdsp; //Если значение достоверно - вывод на индикацию //############################# 4,7 kOm ###################################### ri = 3; pinMode(3, OUTPUT); // 3 пин выход digitalWrite(3, 1); // переводим его в 1 подключаем измерительный резистор 4.7 kOm delay(2); // измеряем полное напряжение на делителе под нагрузкой adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A2); } adc_buff >>= 4; u_del = (float)adc_buff; // измеряем напряжение на измеряемом резисторе adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A1); } adc_buff >>= 4; u_izm = (float)adc_buff; rez = float(u_izm * 4750) / float(u_del - u_izm); // для 4,7 kOm pinMode(3, INPUT); if (u_izm > 4000) goto vdsp; //Если значение достоверно - вывод на индикацию //############################# 500 Om ###################################### ri = 4; pinMode(2, OUTPUT); // 2 пин выход digitalWrite(2, 1); // переводим его в 1 подключаем измерительный резистор 500 Ом delay(2); // измеряем полное напряжение на делителе под нагрузкой adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A3); } adc_buff >>= 4; u_del = (float)adc_buff; // измеряем напряжение на измеряемом резисторе // сначала при опорном 5 В adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A1); } adc_buff >>= 4; u_izm = (float)adc_buff; rez = float(u_izm * 500) / float(u_del - u_izm); // для 500 om pinMode(2, INPUT); if (u_izm > 4000) goto vdsp; //Если значение достоверно - вывод на индикацию //Если точность не удовлетворяет переходим на опорное 1,1 В // измеряем полное напряжение на делителе под нагрузкой при опорном 5 В ri = 5; pinMode(2, OUTPUT); // 2 пин выход digitalWrite(2, 1); // переводим его в 1 подключаем измерительный резистор 500 Ом adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A3); } adc_buff >>= 4; u_del = (float)adc_buff / 16368 * (float)readVcc(); // измеряем напряжение на измеряемом резисторе при опорном 1.1 В analogReference(INTERNAL);// подключаем опорное 1.1 В delay(2); adc_buff = 0; for (int n = 0; n <= 255; n++ ) { adc_buff += analogRead(A1); } adc_buff >>= 4; u_izm = (float)adc_buff / 16368 * 1100; (rez) = float(u_izm * 500) / float(u_del - u_izm); pinMode(2, INPUT); analogReference(DEFAULT);// подключаем опорное 5 В vdsp:; } /****************** Измерение емкости 0,1-500 Мкф ***************************/ void c_meter() { ri = 6; pinMode(4, OUTPUT); digitalWrite(4, HIGH); //Включаем заряд конденсатора startTime = millis(); //Засекаем время while (analogRead(A2) < 648) {} //Ждем пока конденсатор не зарядится до 63,2% или 1,58 от полной зарядки elapsedTime = millis() - startTime; //Фиксируем время заряда //if (elapsedTime<2)elapsedTime=0; // Борьба с шумами microFarads = ((float)elapsedTime / resistorValue) * 1000; rez = microFarads; if (elapsedTime <= 1)rez = 0; digitalWrite(4, LOW); //Снимаем напряжение pinMode(2, OUTPUT); //Разряжаем кондюк digitalWrite(2, LOW); //Закорачивая его на землю while (analogRead(A2) > 0) {} // Пока не разрядится pinMode(2, INPUT); // Отключаем разряд pinMode(4, INPUT); }Здравствуйте. Можете проверить код? У меня на макетке вроде работает нормально.
Что-то на схеме не видно цепи замера напряжения источника питания
На схеме не нужно. Все делается в скетче.
Быстренько залил скетч в макет,он правда от транзистортестера.Шрифт приятен.С мобилы фото залить не знаю как .

Как работают остальные режимы измерения?
Вообщем- резистор на 12 килоом,Конденсатор на 0,22 мкф ,а 18650 на мультиметре показывает 3,96 вольта
У меня все точно показывает. Только плата nano
Ну от схемы отступил только не найдя резистора 1,2к ,поставил 900 Ом.Все остальные номиналы как по схеме
А теперь смотрите на что влияет этот резистор (сопротивление, напряжение и емкость). На схеме я указал все режимы измерения.
Я тут обратил внимание на резистор 470 ом.
в коде в расчетах используется 500 ом.
и еще коэффициент делителя у меня получаются другие цифры
Благодарю за развернутый ответ,попробую заменить значения в скетче.