Ви не увійшли.
Дякую за думки, це потрiбно переосмислити та виконати кiлька експерiментiв.
Немає жодних активних та пасивних елементів – є тільки кабелі. На малюнку зрізаний приклад з'єднань: А0 - А1 це приклад робочого ланцюга, в момент виміру ємності цей ланцюг розірваний перемикачем, і вимір (у цьому випадку) виконується між А0 - А2 і А1 - А2 (другий кінець від А2, в момент виміру теж нікуди не підключений). І якщо замір першої пари відповідає, то на другій парі – рандом. Якщо замір у зворотному порядку, спочатку друга пара - замір реальний, перша пара - рандом. Замірювані величини від 60 до 1200 пФ.
1-wire?
Так ємність чого ви вимірюєте? Ємність шини, разом з пристроями, що з неї і живляться?
Якщо Ви про використовувані піни плати, то від 1 до 16, а якщо про кількість замірюваних провідників - то від 2 до 16.
Вимірюється ємність того, що підключено до вивода на момент виміру. Це кабелі різних типів, які запитані тільки з плати, до якої підключені. Уточню ще той аспект, що в момент вимірювання кабель з одного боку підключений до виведення плати, а з іншого боку - висить у повітрі.
Що за блок? З чого він складається, як підʼєднаний, що на нього подається в "інших режимах"?
до платы, через перемикачи пiд'єднано багато кабелiв, рiзного типу (що мають рiзну ємкiсть). Плата надсилає мiкросикунднi 0 та считує цi iмпульси (при пiдтянутiй 1) (з чого й складається залишковий заряд...). Показником сicтеми є ємкiсть у окремий вiдлiк часу.
Ніхто крім вас не знає що в тому блоці. Можливо остаточний заряд в конденсаторах. Можливо щось нагрівається і міняє опір.
Скетч теж не повинен знати, що у тому блоці на момент вимiру! Я лише впевнений у тому, що нагрiву нiмає, бо плата не спроможня видати для цього струм.
... При перемиканні піна у високий рівень в будь-якому разі буде заряджатись як вимірювана ємність, так і розподілена.
Щось не сходиться...
Зовнішня схема з'єднань має багато різноспрямованих ємностей (з релейною комутацією) і не має власного джерела живлення.
При виконанні виміру ємності після ресета плати я отримую стабільні, правдоподібні результати!
Але якщо цей блок з'єднань був задіяний в інших режимах роботи плати і я переходжу на спробу виміру ємності, то отримую повний рандом!
Як цього уникнути?
Замкніть контакти релюшкою. Розімкніть в момент вимірювання. Заодно це врятує вашу схему якщо підключите електроліт з остаточним зарядом.
додавання елементiв у схему з'єднань виходить за рамки цього питання!
Вибачте, але я змушений зазначити, що ви перевернули моє питання.
для вимiрювання використовую CapacitorLite, є коефiцiєнт у випадку "чистого" запуска (з ресета). Але!:
Я вже схиляюсь до того, щоб пiдчас замiру, попередьо, виконувати загальний ресет Arduino, але вiн нiяк не впливає на зовнiшнi ємкостi. Менi потрiбна можливiсть приведення будьяких з'єднань до загального рiвня, незалежно вiд початкового стану к схемi.
Як перед вимiром нівелювати різноспрямовані заряди ємностей, щоб отримати адекватний показник (пропорцiйний)?
Прошу тих, хто у темі, дати пояснення: які плюси має такий підхід? На скільки швидше виконується операція? І чи варто взагалі використати такий підхід?
Є необхідність, за будь-якого поточного стану системи, виконати вимір ємності між заданими контактами. У плати багато внутрішніх ємностей плюс ємності зовнішніх підключень, які в момент запиту виміру ємності, своїми зарядами спотворюють величину виміру. Який є простий спосіб "скидання" всіляких зарядів до заданого виводу (виводам), щоб вимірювана величина ємності відповідала дійсності?
Цей "метод" (припускаю, бо в код не вникав) вимірює відношення ємності між пінами до паразитної ємності пінів (щось біля 7 пФ для AVR). При підключенні провідників ця паразитна ємність значно зростає. .
Не зовсім це розумію, чому ця паразитна ємкість не додається до наяної, а взагалі усе перекриває?
dimich, навіщо писати відповідь, якщо ви нічого не зрозуміли у запитанні!???
Є так званий тестер Маркуса. Буває і на Алі в готовому вигляді, і в вигляді набору для пайки.
Вивачте, є потреба використання багато-адресних звернень до МК, ваша пропозиція не є конструктивною у площіні програмного рішення задачі.
Є ще один цікавий варіант - але в мене він працує лише між аналоговими контактами...
Ще зауважу, що при коли конденсатор пшдключен з відносно- короткими провідниками, то при підключенні до нього додаткових довгих провідників, які більше нікуди не підключаються - то і в цьому випадку виміряні показники ємкості дуже знижуються...
Я знайшов дуже цікавий код, який не потребує апаратного облаштування, а виконує вимірювання ємкості на програмному рівні.
У випадку коли конденсатор підключен до arduino - усе дуже добре і нема ніяких зауважень!
Але, якщо, у системі з'єднань з'являються провідники - усе летить шкереберть...
Якщо провідники мають відносно-невелику довжину, то я отримую зниження ємкості. А при довжені провідників більше 1 м - все падає до 1 пкФ... Хоча, стандартний тестер, з функцією вимірювання ємкості, при додаванні до конденсатора, паралельно-прокладених провідників - видає у результаті зростання ємкості.
Чому, при використанні цього коду виникає це відхилення, і як його можна вирішити на програмному рівні, без застосування апаратних рішень?
Honey, дякую!
І чому ця форма запису ніде не задокументована?!
Загальна ідея була така: експлуатація виробу планується на мега, де виводи використовуються як ціфрові... А ось обкатка, зачасту йде на нано чи уно, і при звернені до відсутніх віводів... - відбуваєтся богна що. Через окремі меркування, реалізувати відхилення звернень до відсутніх виводів на рівні верхнього керовання не можно. Тому й задав це питання, щоб не множити окремі скетчі до різних плат, а один раз закласти перевирку номерів....
Якщо відповідь не подобається, можна її проігнорувати
ні, я якраз питав про протилежний варіант ![]()
нано/уно/мега/... - різні плати мають різну кількість виводів (які, зокрема, мають особисту нумерацію).
Чи існують оператори коду, за допомогою яких, при наявности номера, можно б було виконати перевірку - чи є у плати, на яку записан цей скетч, реальний вивод за перевіряємим номером?
Чому на форумі не має кнопки Прийняти рішення/відповідь?
switch - це оператор, що перевіряє чи відповідає перемінна окремим значенням.
Чи можно у цьому операторі вказати умови перевірки відповідності до окремих діапазонів?
Наприклад, якщо пермінна є int х, то перевірити наступні віпадки: 1. х == 1; 2. х > 3 & x < 5; 3. x == 6; 4. x >= 8 ...?
dimich, дякую за варіант коду - дуже цікаво! З затиранням даних зрозуміло. А от що цікаво: код дає різну кількість отриманих груп для повідомлення 4/5 і для 4/5/
Мав меркування, що розділення на масив має буте швидше, ниж займатися розділом після отримання...
Но ті результати, що отримую та Ваші зауваження - підтвержують хибність моїх меркувань...
Загальні вимоги до скетчу:
1 Якщо приходить повідомлення в вигляді цислового масива не визначеної довжини (від 1 до до 5, наприклад: 1/24/35 або 759/ або1/0/245/657/841 або...) треба занесті відповідні числа у масив rArr. Ділянки масиву, що не отримали новид даних, повинні отримати 0.
2. після отриманя числовиго массина та розкладання його у rArr, потрібно викликати зовнішний void.
3. ящо у повідомленні є символи, що не належать числовому масиву, всі значення rArr потрібно перетворити у 0 і перейти до очикування наступного сповіщення.