Відповісти

Введіть повідомлення і натисніть Надіслати
Параметри

Назад

Огляд теми (нові повідомленні вгорі)

jokeer
Вчора 19:09:40

А попередня версія теж АІ generated?

stas_amp
Вчора 18:28:54

Я перед тим як написати на форумі, дістав вже ШІ.
Він теж мені розповідав, що живлення просідає, то перевантаження, то ще щось.
А я розумів, що проблема програмна. І якщо вже ШІ не розуміє програмну помилку, то треба живих людей діставати, якими керує цікавість, з'ясувати проблему.

От і вирішили, що глюк таки програмний, а не залізний.

Так, ШІ допоміг, я уважно і точно написав технічне завдання, і з другої спроби, код було написано.

Ще раз дякую всім учасникам.

jokeer
Вчора 17:29:44

От бачите, задача має рішення wink а ви вже зібрались гроші з кишені виймати wink

stas_amp
Вчора 17:10:15

Датчик швидкості, його вхід, то для того, щоб коли мот стоїть, не подавалося мастило. Там немає ніякої залежності подачі, від швидкості. Просто як тригер.

Разом з ШІ написав заново код, який працює, з новими алгоритмами, на старій платі. Додав пару ,,плюшок'' яких не вистачало. Контроль датчика швидкості залишив.

jokeer
Вчора 11:18:36

Не бачу навіщо взагалі ускладнення. Зібралися змащувати цеп кожні n км? Рахуємо імпульси з датчика, змащуємо. В режимі дощу змащуємо кожні n/2 км, хоча ви що, реально ганяєте весь день під дощем?. Швидкість можна і не міряти, все одно це без правильної математичної моделі ніочом. Чим простіше тим надійніше.

dimich
Вчора 11:02:05
stas_amp пише:

В реальності - десь один імпульс на 5-7 хвилин їзди. В режимі дощу - в двічі частіше.

Тоді розрахунковий ресурс виходить біля 10'000 мотогодин, тобто трохи більше року. А у вас нема ніякої перевірки цілісності даних та індикації помилки. Помилку можна буде розпізнати тільки коли система почне працювати неправильно.
Крім того, дані можуть записатись некоректно і в будь-який момент при вимкненні живлення під час запису.

jokeR
Вчора 09:17:45
grep NeedResetCounterOil src/DigiSpark_Oiler_Moto.ino 
bool NeedResetCounterOil = LOW;
        NeedResetCounterOil = HIGH; // Ставим флаг сброса счетчика импульсов в ЕЕПРОМ
    if (NeedResetCounterOil == HIGH) {

Ну, цей прапорець у вас справді ніколи не скидається.

stas_amp
Вчора 02:28:47
ard125 пише:
dimich пише:

Ще один недолік у програмі: постійний перезапис однієї і тієї ж комірки в EEPROM. Даташит обіцяє 100'000 циклів перезапису. При записі раз на 3 секунди менше ніж за 100 мотогодин ресурс вичерпається.

Думаю набагато раніше. Хоча б раз сюди зайти і все. NeedResetCounterOil ніде більше не змінюється

if (NeedResetCounterOil == HIGH) {
      // Сбрасываем счетчик импульсов в ЕЕПРОМ
      ImpulseOilMotor = 0;
      EEPROM.put(10, ImpulseOilMotor);
}

Такий час, в три секунди, поставив щоб перевіряти алгоритм.

В реальності - десь один імпульс на 5-7 хвилин їзди. В режимі дощу - в двічі частіше.

dimich
2025-06-14 14:09:58
ard125 пише:

Хоча б раз сюди зайти і все. NeedResetCounterOil ніде більше не змінюється

      EEPROM.put(10, ImpulseOilMotor);

EEPROMClass::put() ідемпотентна: EEPROM.h:66. Комірка записується тільки якщо нове значення не дорівнює прочитаному. Просто буде постійно читати. Але це теж баг, вважаю.

ard125
2025-06-14 13:30:40
dimich пише:

Ще один недолік у програмі: постійний перезапис однієї і тієї ж комірки в EEPROM. Даташит обіцяє 100'000 циклів перезапису. При записі раз на 3 секунди менше ніж за 100 мотогодин ресурс вичерпається.

Думаю набагато раніше. Хоча б раз сюди зайти і все. NeedResetCounterOil ніде більше не змінюється

if (NeedResetCounterOil == HIGH) {
      // Сбрасываем счетчик импульсов в ЕЕПРОМ
      ImpulseOilMotor = 0;
      EEPROM.put(10, ImpulseOilMotor);
}
jokeer
2025-06-14 10:25:17

Що дивно, прообразу цього коду в інтернетах знайти не вдалось. Чи то він запозичений з давно мертвого форуму...
Короче, на місці автора я б його переробив. Запланував би більш зрозумілу індикацію, через 2/3 кольоровий LED. Можливо подумав би про рівень масла. Написав детальне ТЗ. А з нормальним ТЗ написати нормальний код просто wink

dimich
2025-06-14 02:52:10
Honey пише:

Може це не від core залежить, а від даних в EEPROM? Спробуйте помістити в кінець setup:
ImpulseOilMotor = maxImpulseOilMotor+1;

І то правда. Шʼєм програматором - в еепромці або FF'ки, або старий контент, в залежності від фʼюзів та опцій програматора. З першим імпульсом FF'ки стають нулями. Шʼєм бутлоадером - micronucleus еепромку не чіпає, а якийсь інший може й стирає. В різних емуляторах також стан еепромки може зберігатись, а може й ні.

Я би очікував більш регулярного паттерну глітчів при суто логічних помилках в коді. Але ж код там такий, що пробуєш його читати - одразу виникає бажання переписати все нафіг. І тоді не вчитуєшся, наївно сподіваючись, що автор знав, що писав smile

Honey
2025-06-13 22:27:58
dimich пише:
Honey пише:

А ШІМ на outMotorOil завдяки ось цим незалежним одна від одної умовам

Є таке. Тільки чому така залежність від версії core, різниця в реалізації millis() не мала би так впливати. Хоча тут спостерігається залежність і від частоти вхідних імпульсів.

Може це не від core залежить, а від даних в EEPROM? Спробуйте помістити в кінець setup:
ImpulseOilMotor = maxImpulseOilMotor+1;

dimich
2025-06-13 22:17:49
Honey пише:

А ШІМ на outMotorOil завдяки ось цим незалежним одна від одної умовам

Є таке. Тільки чому така залежність від версії core, різниця в реалізації millis() не мала би так впливати. Хоча тут спостерігається залежність і від частоти вхідних імпульсів.

jokeer
2025-06-13 21:47:02

я щось подібне підозрював wink але подивився в скількох місцях смикають за digitalWrite і вирішив що воно цікаво але не настільки щоб копати до кінця.
Ну на блимання можна і забити. А щодо всього іншого.. ніхто не знає, як воно повинно працювати, і ніхто не знає як воно насправді працює.

Підвал форуму