Ви не увійшли.
Цікаво, що дає саме PWM.
Ну, один із можливих варіантів я вже написав: пін перемикається на функцію Compare Match Output. Чому - це вже інше питання.
Збс
Зібрав під ту плату що у вас. Включив pull-up резистори на входах - отримав такі імпульси - кілька прямокутних, промодульованих ВЧ. Я б сказав, що це десь всередині вашого коду, складно зрозуміти його логіку.
Точно сказати, після чого стало 5 вольт, вже тяжко.
Цікаво, що дає саме PWM.
Спробую сьогодні підключити насос, і глянути, чи подаватиме він мастило.
Якщо так, то тоді, питання закрити, і забути. Бо тут не скільки того пристрою, як проблем.
Здавалось би все просто, а ,,крові вип'є'' на проект - за міліон.
Але випадок не стандартний, і рано чи пізно, хтось би міг з таким зіткнутися.
Таке питання, до учасників обговорення.
А чи можна тут в код додати, щоб на мотор виходило два або три імпульси за один раз?
https://forum.arduino.ua/img/members/4083/OSC-_-OUT-PB1.jpeg
У мене ось такий сигнал на PB1
...
https://forum.arduino.ua/img/members/4083/PXL_20250611_042428586.jpeg
Було ж 1.2 вольта, тут бачу чесні 5. Після яких змін амплітуда імпульсів стала 5 вольт?
понавстановлював все, що можна було стосовно Attiny 85.
Потрібно якось фіксувати ці зміни: з якого URL, яка версія. Щоб можна було собі теж скачати та проаналізувати код цього конкретного пакунка.
Частота стала 16кГц, цикл 70 відсотків.
PB1 має альтернативну функцію виходу компаратора таймера. (Доречі, PB0,PB3,PB4 також). Якщо якимось чином біти вибору режима стають ненульові, то це досить очікуваний результат: різні core можуть використовувати таймери по-різному.
Якось би здампити вміст регістрів TCCR0A, TCCR1 та GTCCR, коли баг проявляється. Я би увімкнув debugWIRE. Але без досвіду це буде непросто зробити: потрібно перешивати фʼюзи і вимикати функцію піна Reset, а також підʼєднуватись UART'ом до піна Reset як мінімум через діод, і на компі запускати відлагоджувальний софт.
Можна спробувати записати вміст цих регістрів в EEPROM, потім зчитати програматором.
Але в першу чергу я би все таки перевірив з
#define HAVE_BOOTLOADER 1
в core_build_options.h.
А також мінімізував би програму до такого стану, коли баг ще відтворюється.
Ось схема всього пристрою.
Для повноти картини ще би домалювати USB'шні резистори зі стабілітронами, а також вбудований світлодіод.
Ось схема всього пристрою.
Розв'язка на входах, через оптику, PC817
На мотор, транзистор з ,,логічним'' рівнем, точно не пам'ятаю, що дістав з коробки і запаяв.
Всім доброго ранку.
Стосовно підтяжок. Так, вони були через 5.1к, замінив на 1к. Нічого не змінилося.
Вчора грався всякими бібліотеками, понавстановлював все, що можна було стосовно Attiny 85.
Сьогодні запустив ардуіно іде, і в виборі плат, побачив ось таке, як на фото.
Записав через цей варіант. І картина одразу змінилася!
Частота стала 16кГц, цикл 70 відсотків.
входи вільно теліпаються, хз що вони ловлять у вас і що у мене. Їх було б непогано підтягнути чи до 0 чи до VCC - хз як правильно за вашою схемою.
Автор же писав, що є підтяжки по 5.1к. Мені тільки не подобається, що підтяжка на PB3, бо там же ще через 47 Ом стабілітрон в землю. А свої 3.6В стабілітрон тримає тільки при відносно великих струмах, десь 5 мА. При малих струмах через підтяжку на ньому падає десь 3 В, або й менше. Мабуть, тому там і analogRead(). UPD: хоча "analogRead() < 512" це майже те ж саме, що "digitalRead() == LOW", тільки без гистерезису.
Так, сорян, const int LEDMode = LED_BUILTIN; - так не можна. LED_BUILTIN це PB1 і воно якось дивно взаємодіє з вашим кодом. Вернув як було - упсь, на PB1 чоткий 0.
Ну, що сказати.. По перше - переїдьте на версію 1.7.5, щоб все було однаково.
По друге - входи вільно теліпаються, хз що вони ловлять у вас і що у мене. Їх було б непогано підтягнути чи до 0 чи до VCC - хз як правильно за вашою схемою.
У мене ось такий сигнал на 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.
Цікаво, чи вдастся відтворити баг з пінами на голій attiny85, без USB-шних стабілітронів та бутлоадера.
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) {
Кнопка звичайна, механічна.
Спробував, що Ви рекомендували.
Нажаль, не допомогло.
FQBN: digistump:avr:digispark-tiny:clock=clock165,burnmode=install
Using board 'digispark-tiny' from platform in folder: /home/igor/.arduino15/packages/digistump/hardware/avr/1.7.5
Using core 'tiny' from platform in folder: /home/igor/.arduino15/packages/digistump/hardware/avr/1.7.5
Using library EEPROM at version 2.0 in folder: /home/igor/.arduino15/packages/digistump/hardware/avr/1.7.5/libraries/EEPROM
Ага, походу я вас обманув. Це звідси: https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json
Ага, версію 1.6.7 можна вибрати в Board Manager. Не зовсім очевидно. Але все одно дивний глюк присутній.
Можу лог показати
Будь ласка, якщо не складно. У мене один раз скомпілилось. Потім перезапускав IDE - перестало, каже, нема EEPROM.h. І дійсно, в packages/digistump такого нема. Крім дефолтної arduino та цієї digistump (з https://raw.githubusercontent.com/digistump/arduino-boards-index/master/package_digistump_index.json) ніяких інших пакунків не ставив. Якась китайська чудасія з цим IDE.
Але сайд ефекти дуже дивні.
Ну, чудес не буває. Але причина може бути так глибоко, що у нас може не вистачити засобів до неї докопатись. Наприклад, який-небудь апаратний баг МК, який проявляється тільки при певних хитрих умовах.
Хм, як воно взагалі компілиться, якщо в packages/digistump/hardware/avr/1.6.7/libraries/ нема EEPROM. Ви її доставляли вручну, чи у вас вона є в самому package, а це у мене чомусь нема?
Бібліотеку еепром доставляв в ручну.