Ви не увійшли.
Ні. Те що я скидав сюди, що й створило тему, то написане товаришем, живою людиною, років чотири тому. Лежав той проект довго, поки не дійшли і до нього руки.
Я перед тим як написати на форумі, дістав вже ШІ.
Він теж мені розповідав, що живлення просідає, то перевантаження, то ще щось.
А я розумів, що проблема програмна. І якщо вже ШІ не розуміє програмну помилку, то треба живих людей діставати, якими керує цікавість, з'ясувати проблему.
От і вирішили, що глюк таки програмний, а не залізний.
Так, ШІ допоміг, я уважно і точно написав технічне завдання, і з другої спроби, код було написано.
Ще раз дякую всім учасникам.
Датчик швидкості, його вхід, то для того, щоб коли мот стоїть, не подавалося мастило. Там немає ніякої залежності подачі, від швидкості. Просто як тригер.
Разом з ШІ написав заново код, який працює, з новими алгоритмами, на старій платі. Додав пару ,,плюшок'' яких не вистачало. Контроль датчика швидкості залишив.
dimich пише:Ще один недолік у програмі: постійний перезапис однієї і тієї ж комірки в EEPROM. Даташит обіцяє 100'000 циклів перезапису. При записі раз на 3 секунди менше ніж за 100 мотогодин ресурс вичерпається.
Думаю набагато раніше. Хоча б раз сюди зайти і все. NeedResetCounterOil ніде більше не змінюється
if (NeedResetCounterOil == HIGH) { // Сбрасываем счетчик импульсов в ЕЕПРОМ ImpulseOilMotor = 0; EEPROM.put(10, ImpulseOilMotor); }
Такий час, в три секунди, поставив щоб перевіряти алгоритм.
В реальності - десь один імпульс на 5-7 хвилин їзди. В режимі дощу - в двічі частіше.
Я так розумію, що тему можна закривати. Так?
Тоді питання. Хто з учасників взявся б за написання нормального коду, з нуля?
Звісно ж, що не безкоштовно.
Пропозиції можна в приват.
Дякую всім за участь.
stas_amp пише:Якщо у Вас все це проінстальвано, й налаштовано, чи можна Вас попросити, скомпілювати прошивку, для проби?
Та льогко: DigiSpark_Oiler_Moto_hex.zip
Ось тільки знайшов хвилину, щоб перевірити все.
Записав через програматор.
Спочатку на виході, на мотор, нічого не було.
Довге утримання кнопки, і все запрацювало..... Але не довго, мабуть 20 імпульсів зробило, в знову PWM, тільки ще гірше. Його відсотків 20 тільки.
От так.
З кожним постом, спробою, опускаються руки, і є бажання, просто, і без заморочок залишитися на простому блінкері, з поправкою тайменгів, і спокійно жити далі.
Якщо в учасників обговорення ще є сили, час та натхнення, то я готовий, разом з Вами, іти далі.
Якщо ні, то блінкер, і крапка.
Ще раз, всім щиро вдячний.
jokeer пише:проблема, схоже, була в кривій реалізації eeprom
Не схоже. Прибрав eeprom взагалі. Картина маслом залишилась та сама
https://forum.arduino.ua/img/members/2306/oil4.jpg
Ядро офіційне digispark-івське ще з часів його підтримки. IDE 1.8.19
Це підблимування не в такт бачу на світлодіоді, але тільки в режимі надто довгого утримання кнопки. Мене воно не бентежить, і не бентежило. Якось не звертав на нього увагу.
Цей проект квові вип'є більше, чим віллє мастила на цеп.
Вчора так і не дістався до цієї грачки.
А якщо вирізати частину, яка рахує кількість спрацювань насосу, це зробить стабільним пристрій?
Якщо так, то я й сідушку підніму, щоб глянути, що там з мастилом.
Одне б що залишити, так це пам'ять вибраного редиму.
Це б не вадило.
Якщо можна, то виріжте той шмат.
Дякую.
stas_amp пише:Тобто, я встановлюю цей софт, копіюю текст скетчу, вставляю скопійоване, додаю Arduino.h на початку, отримую hex, пишу його в плату, через програматор.
Так?Як під віндою його ставити і користуватись не знаю, вибачте. Під лінухами я просто встановив пакет platformio-core з репозиторію.
Створюю директорію і проект в ній:$ mkdir test-project $ cd test-project $ pio project init -b digispark-tiny
Копіюю ваш скетч в test-project/src/, дописую на початку "#include <Arduino.h>", збираю:
$ pio run
(а краще "pio run -v", щоб бачити, які команди воно викликає).
Для прошивки зазвичай достатньо$ pio run -t upload
Для digispark-tiny, мабуть, повинно так само працювати. Принаймні у мене воно скачало й запустило micronucleus, просить підключити плату.
Всі налаштування в platformio.ini.
Бінарик, hex та інші артефакти лежать в .pio/build/digispark-tiny/
Дякую.
Якщо у Вас все це проінстальвано, й налаштовано, чи можна Вас попросити, скомпілювати прошивку, для проби?
Якщо можна, і щоб тут не загажувати тему, то перейдемо в особисті повідомлення, телеграм, або вайбер.
Прийнято
А взагалі, як часто в цьому моті треба змащувати цеп? бо я ніколи не чув про таку проблему
Якщо мот спортивний, то там таке не використовують. Там миють кожну тисячу, і змащують липкою спеціальною мазутою, кожні 500 км.
На ендуро - там ніхто взагалі не робить, все одно цепу там хватає не на довго. Його від багна оббили, водою помили, й готово.
Мотоцикли для подорожей, там автозмазчик актуальний. Тому що кожен день мазать, а то й двічі на день, і мить щовечора, то дістане.
Тому, ставлять автозмазку. Вона автоматично подає звичайне трансмісійне масло. І цим маже цеп, і при швидкостях - центробіжною силою чисте від бруду.
В середньому розхід мастила для цепу, десь 50 - 60 грамів на тисячу кілометрів.
Підтримка саме tiny85 в Arduino ide зроблена якось per anus. Кілька реалізацій, деякі протухли. В деяких, схоже, проблеми з eeprom.
А навіщо взагалі щось писати в eeprom? Як на мій погляд, між кількістю обертів і інтенсивністю роботи маслонасосу відповідальність однозначна. Хіба що мотогодини зберігати, але у вас цього все одно немає.
та і з nano які проблеми? одягнув термоусадку, краї залив герметиком. Плату полакував. Не вірю що в моті не знайдеться місце під Arduino nano
В еепром пишеться кількість імпульсів, для того, щоб вирахувати, скільки масла в бачкк. І наприклад, після 1000 імпульсів, нагадувати, що масло закінчується.
Ще вибраний режим пишеться до еепром, щоб його запам'ятати, після того, як вимкнеться живлення.
Стосовно розмірів, то тут вже була готова коробка, та ще розглядалася можливість, раптом що, то в дорозі, швидко замінити плату, вона на конекторі, до плати-материнки підключена.
Ну це на випадок ядерки ?
Але враховуючи, потрачений час і нерви, то вже і зі шприца готовий мазати той цеп ???
stas_amp пише:Якщо так, то чи підійде цей код, чт треба все переписувати заново?
Може що порадите?PlatformIO
Скетч збирається без переписування, тільки в самому початку додати#include <Arduino.h>
Тобто, я встановлюю цей софт, копіюю текст скетчу, вставляю скопійоване, додаю Arduino.h на початку, отримую hex, пишу його в плату, через програматор.
Так?
stas_amp пише:Що за бібліотеки мені треба завантажити, щоб все працювало нормально?
Я би спершу зʼясував, чи це проблема з самою лібою EEPROM, чи з функціями eeprom_write_* з avr/eeprom.h. Якщо функції eeprom_write_*/eeprom_read_* працюють нормально, то використав би їх, без всяких бібліотечних обгорток.
А якщо вирішувати глобально, то не користувався би Arduino IDE.
Тобто, писати в чомусь іншому?
Якщо так, то чи підійде цей код, чт треба все переписувати заново?
Може що порадите?
Дякую.
Тут справа в розмірах плати, бо на мотоциклі це ще десь треба сховати від вологи. Тому взято саме тіні85
Стосовно еепрому.
Може його прочитати програматором, і глянути, де нічого не пишеться, і саме туди писати дані.
Так, це EEPROM
Якщо прибрати повністю (навіть #include теж) - нормальні прямокутні імпульси.
Що за бібліотеки мені треба завантажити, щоб все працювало нормально?
stas_amp пише:Можете глянути, наче Compare Match Output вимкнуто.
Цей витвір ШІ працює нормально? А якщо в setup() закоментувати запис в TCCR0A?
stas_amp пише:Може там вказати адресу еепром 100, або 200 ?
Якщо EEPROM працює неправильно, то вона працюватиме неправильно і з іншими адресами. Буде псувати якусь іншу область памʼяті.
Скомпілюйте скетч з нуля, з увімкненим verbose compiler output. Покажіть лог збірки.
Вже ввечері, як буду вдома.
Дивіться, яка цікава річ. У вас EEPROM.put(10, ImpulseOilMotor) має записувати два байта в EEPROM за адресою 10.
Якщо припустити, що ваша ліба EEPROM зібрана якось неправильно (з іншим -mcu, наприклад), і замість EEPROM пише в адресний простір даних, то адреса 10 попадає на адресу 0x2A в I/O просторі. Це якраз регістри TCCR0A та OCR1B, які відповідають за Compare Match Output для PWM.
Схоже, що так і є.
Якщо подати живлення, то два перші імпульси нормальні, подальші - PWM
Може там вказати адресу еепром 100, або 200 ?
stas_amp пише:Цікаво, що дає саме PWM.
Ну, один із можливих варіантів я вже написав: пін перемикається на функцію Compare Match Output. Чому - це вже інше питання.
Ось такий варіант ШІ мені дав.
Можете глянути, наче Compare Match Output вимкнуто.DigiSpark_Oiler_NoPWM.rar
https://forum.arduino.ua/img/members/3983/photo_2025-06-11_10-32-45.jpg
Збс
Зібрав під ту плату що у вас. Включив pull-up резистори на входах - отримав такі імпульси - кілька прямокутних, промодульованих ВЧ. Я б сказав, що це десь всередині вашого коду, складно зрозуміти його логіку.
Логіку коду, чи алгоритмів роботи?
Якщо алгоритми, то можу розписати.
Точно сказати, після чого стало 5 вольт, вже тяжко.
Цікаво, що дає саме PWM.
Спробую сьогодні підключити насос, і глянути, чи подаватиме він мастило.
Якщо так, то тоді, питання закрити, і забути. Бо тут не скільки того пристрою, як проблем.
Здавалось би все просто, а ,,крові вип'є'' на проект - за міліон.
Але випадок не стандартний, і рано чи пізно, хтось би міг з таким зіткнутися.
Таке питання, до учасників обговорення.
А чи можна тут в код додати, щоб на мотор виходило два або три імпульси за один раз?
Ось схема всього пристрою.
Розв'язка на входах, через оптику, PC817
На мотор, транзистор з ,,логічним'' рівнем, точно не пам'ятаю, що дістав з коробки і запаяв.
Всім доброго ранку.
Стосовно підтяжок. Так, вони були через 5.1к, замінив на 1к. Нічого не змінилося.
Вчора грався всякими бібліотеками, понавстановлював все, що можна було стосовно Attiny 85.
Сьогодні запустив ардуіно іде, і в виборі плат, побачив ось таке, як на фото.
Записав через цей варіант. І картина одразу змінилася!
Частота стала 16кГц, цикл 70 відсотків.
У мене ось такий сигнал на PB1
PWM - 5.2kHz та циклом 23 відсотки
https://forum.arduino.ua/img/members/3983/2025-06-10_19-06.png
Таке?
Ну, залив ваш код, тільки замістьconst int LEDMode = 2; // LED индикации режима работы смазчика, 1 = TRUE;
зробив
const int LEDMode = LED_BUILTIN;
Щоб було видно без осцилографа.
І що ми бачимо на нозі P1?
https://forum.arduino.ua/img/members/3983/photo_2025-06-10_19-24-38.jpg
3.3V, з викидами до 4.5В (чи 4.5В, з провалами на 1.2В). Цікаво
Провалів по живленню немає.
Хм. Зробив так (нумерація цифрових і аналогових портів в цій платі якась незвичайна, але 3 - удачна цифра
Повинно бути еквівалентно по логіці роботи.
if (/* analogRead(btnMode) < 512 */ digitalRead(btnMode) == 0) { // Нажата кн.Режим смазки
Бачимо таке:
https://forum.arduino.ua/img/members/3983/photo_2025-06-10_19-42-44.jpg
Що я можу сказати? З виводом у порт D1 у вас щось накручено, digitalwrite викликається раз 10.. Але дивний спецефект з 1 картинки це не пояснює.
Це цікавіше. Підтягнув входи, щоб не теліпались.
pinMode(inVSS, INPUT_PULLUP); pinMode(btnMode, INPUT_PULLUP);
Побачив ваші імпульси в 1 В
https://forum.arduino.ua/img/members/3983/photo_2025-06-10_20-01-01.jpg
Перш за все, дякую Вам, за Ваші зусилля допомогти, що зібрали схему.
З осцилогам видно, що сигнал на виході все одно PWM, а не стабільні 5 Вольт.
Ви не той вихід контролювали. Нам треба вихід на мотор PB1, а не індикатор режиму подачі масла PB2.
stas_amp пише:https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json
Якщо у вас вибрано "Digispark (Default - 16.5mhz)", для експерименту спробуйте "Digispark (16mhz - No USB)". USB ж у вас в програмі ніяк не використовується.
stas_amp пише:не можу прикріпити картинку
Під полем редагування є "Завантаження". Заходите туди, завантажуєте картинку. Клікаєте на неї, копіюєте її адресу, вставляєте в тег [img]<адреса тут>[/img].
Ще б здогадатись, звідки крім 1.2 вольта ще ті 5.2 кГц.
Не дуже розумію, чому стан кнопки зчитується як аналоговий сигнал. Там звичайна механічна кнопка, чи якась особлива? Спробуйте для експерименту
if (analogRead(btnMode) < 512) {
замінити на
if (digitalRead(btnMode) == LOW) {
Кнопка звичайна, механічна.
Спробував, що Ви рекомендували.
Нажаль, не допомогло.