Ви не увійшли.
Оце подумалось.. Взагалі, хтось бачив десь колекцію семплів, які можна без особливих зусиль запустити на мікроконтроллері? Бо пищати функцією tone() якось скучно. Аранжувати ноти в послідовність звуків - це точно не для мене
Знайшов на github лібу sensorium/Mozzi (не любить автомодератор коли URL в першому повідлмленні ). Прикольно. Але щоб почути - треба прошити.
А взагалі хочеться процедурно згенерований звук метронома чи кастаньєт
grep NeedResetCounterOil src/DigiSpark_Oiler_Moto.ino
bool NeedResetCounterOil = LOW;
NeedResetCounterOil = HIGH; // Ставим флаг сброса счетчика импульсов в ЕЕПРОМ
if (NeedResetCounterOil == HIGH) {
Ну, цей прапорець у вас справді ніколи не скидається.
Ну твердотільне реле для силовухи нормально буде. Так би і сказали, що не із звичайної сімʼї а з багатої
https://arduino.ua/prod2223-2-h-kanalnii-modyl-rele-12v-10a-s-optorazvyazkoi
https://arduino.ua/prod186-datchik-holla-a3144-cifrovii
Наприклад так. Про китайські 10А в мене є сумніви, але 2А воно повинно витягнути. Якщо треба більше - візьміть автомобільне реле. Саме ці датчики уніполярні, іх треба правильно розмістити. Можливо, вам потрібні аналогові датчики.
Замість реле можна спаяти щось типу https://electronics.stackexchange.com/questions/512561/using-p-channel-mosfet-with-arduino
В вигляді готових модулів - навряд. Хіба що датчики Холла у вигляді шілдів. Але його треба все одно суміщати з вашою механікою. І реле для USB - вам точно потрібно тестувати весь USB стек, може досить тупого ключа на живлення? Силову релюшку можна взяти автомобільну, а може і звичайного ключа на MOSFET вистачить.
Кроче, все одно паяти доведеться багато. не бачу смислу хотіти саме arduino-сумісних модулів.
Без розуміння, що саме і яким чином ви збираєтесь тестувати, складно порадити чогось конкретного.
Не так все погано. Начебто всі записи в eeprom пов"язані з натисканням кнопки. Судячи по назвах змінних
Щось цей simutron якийсь дивний.
Лінії малюються якось мимо пінів, підключитись куди хочеться не виходить..
@л@!
Не відтворилось.
Я здивований.
Тут ще можливо, що в мене якось в board urls було і digistump 1.6.7 (офіціально протухший), і 1.7.5 (неофіціально свіжий), різні репозиторіі, однакові назви.. хз.. Видалив всі, встановив тільки 1.7.5.. не відтворюється. Може @stas_amp це ще не виправив, і в нього ще все зламане
на 50-й день роботи
Для мотоцикла не думаю що це сильно актуально Які є кращі ідеї? Є якийсь софтовий таймер, чи підпирати перевірками?
Теж дивно. Воно tiny85 не дуже модна іграшка, але невже ніхто не грався з нею в arduino ide з використанням eeprom і свіжим toolchain ом?
Тільки IDE навіть з verbose mode не показує як її компілює, тільки Compiling library "EEPROM".
Тому що в EEPROM.h нічого цікавого немає. Це враппер до avr/eeprom.h, а реалізація роботи з eeprom - упсь, в бінарнику .arduino15/packages/arduino/tools/avr-gcc/7.3.0-atmel3.6.1-arduino7/avr/lib/avr25/libattiny85.a . При використанні функцій з eeprom.h все так само ламається.
Взагалі можна було б і просто асемблерний код проаналізувати
Настоящих буйних мало
https://raw.githubusercontent.com/ArminJo/DigistumpArduino/master/package_digistump_index.json же ж. Без ніяких хитрощів.
Є підозра що емулятор цього не покаже. Якщо косячаться логічні рівні на виході - значить там всередині щось комутується неправильно. Може чіпи палені. До речі, в якійсь з ревізій цих tiny85 щось було з eeprom, саме з записом в 0 адресу, і були рекомендації від аксакалів починати запис з 10.. Можливо, автор цього коду щось таке чув, і в нього використовується put(10). І put(0) теж
Ну це можна використати, якщо упоротись в TDD. А так, відчуття якоїсь незавершеності. debug_tool наче є, а використати неможливо.
Знайшов дещо цікаве. Виявляється, для деяких чіпів є емулятори. І в platformio декларується можливість використання:
https://docs.platformio.org/en/latest/plus/debug-tools/simavr.html
У когось вийшло? Бо запустити руками емулятор в одній консолі, gdb в іншій - воно працює, але трохи по красноглазому
Здається, platformio це таки ваше рішення Тупо зібралось, прошилось. На P1 нормальний 0, на P2 - іноді нормальні 5В імпульси. Без провалів. Дивно трохи - індикаторний LED прикрутити не до ноги з LED, а до іншої
- framework-arduino-avr-digistump @ 1.7.2
- tool-micronucleus @ 1.250.210222 (2.50)
- toolchain-atmelavr @ 1.70300.191015 (7.3.0)
Походу, framework 1.7.5 що в arduino ide якийсь кривий. Зручно коли все автоматизовано, але коли автоматизовано криво то це ПЦ
Хоча platformio той ще ПЦ всередині Просто повезло.
Та хз
Простий спосіб - взяти Arduino Nano
Складніше - підібрати тулчайн, з яким воно буде правильно працювати.
Або переписати під Atmel Studio - сподіваюсь, у них там все правильно зібране.
Так, це EEPROM
Якщо прибрати повністю (навіть #include теж) - нормальні прямокутні імпульси.
Нє, ШІ воно прикольно, але навіщо вимикати те що не вмикали Вам воно намалювало blink на регістрах замість digitalwrite.
Збс
Зібрав під ту плату що у вас. Включив pull-up резистори на входах - отримав такі імпульси - кілька прямокутних, промодульованих ВЧ. Я б сказав, що це десь всередині вашого коду, складно зрозуміти його логіку.
ІЩСХ, якщо резистори прибрати, отримуємо дивне
Так, сорян, const int LEDMode = LED_BUILTIN; - так не можна. LED_BUILTIN це PB1 і воно якось дивно взаємодіє з вашим кодом. Вернув як було - упсь, на PB1 чоткий 0.
Ну, що сказати.. По перше - переїдьте на версію 1.7.5, щоб все було однаково.
По друге - входи вільно теліпаються, хз що вони ловлять у вас і що у мене. Їх було б непогано підтягнути чи до 0 чи до VCC - хз як правильно за вашою схемою.
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. Не зовсім очевидно. Але все одно дивний глюк присутній.
Таке?
Ну, залив ваш код, тільки замість
const int LEDMode = 2; // LED индикации режима работы смазчика, 1 = TRUE;
зробив
const int LEDMode = LED_BUILTIN;
Щоб було видно без осцилографа.
І що ми бачимо на нозі P1?
3.3V, з викидами до 4.5В (чи 4.5В, з провалами на 1.2В). Цікаво Провалів по живленню немає.
Хм. Зробив так (нумерація цифрових і аналогових портів в цій платі якась незвичайна, але 3 - удачна цифра Повинно бути еквівалентно по логіці роботи.
if (/* analogRead(btnMode) < 512 */ digitalRead(btnMode) == 0) { // Нажата кн.Режим смазки
Бачимо таке:
Що я можу сказати? З виводом у порт D1 у вас щось накручено, digitalwrite викликається раз 10.. Але дивний спецефект з 1 картинки це не пояснює.
Це цікавіше. Підтягнув входи, щоб не теліпались.
pinMode(inVSS, INPUT_PULLUP);
pinMode(btnMode, INPUT_PULLUP);
Побачив ваші імпульси в 1 В
https://lastminuteengineers.com/esp8266-pinout-reference/
D4 підтягніть до VCC, або використайте інший пін.
ну я навіть вийняв з коробки плату з Tiny85 і прошив вашу програму. Нічого такого з рівнем 1.2в не спостерігаю. На виході P1 - чіткий 0. На P2 - кілька імпульсів із звичайними рівнями. Правда, у вас там входи без підтяжок, хтозна що вони ловлять з світового ефіру..
Ага, сорян, який контроллер побачив.
Ну, це трохи незвичайний контроллер. Може ви щось з таймерами хитре робили, чи з тактуванням.. Я б подумав, що він в режимі бутлоадера хоче щось з USB, але з ваших слів все інше працює.
Трохи дивно виходить. Ну давайте поміряємо період імпульсів.
#define PIN_INPUT 2 // Arduino Nano - pin2 or pin3 only
#define PWM_WIDTH_FALSE 1400
#define PWM_WIDTH_TRUE 1600
unsigned long pulse_start = 0;
unsigned long pulse_width = 0;
unsigned long period = 0;
unsigned long pulse_prev_start = 0;
bool state_from_pwm = false;
void catch_int()
{
if (digitalRead(PIN_INPUT))
{
pulse_prev_start = pulse_start;
pulse_start = micros();
} else {
pulse_width = micros() - pulse_start;
if (pulse_width < PWM_WIDTH_FALSE)
{
state_from_pwm = false;
} else if (pulse_width > PWM_WIDTH_TRUE)
{
state_from_pwm = true;
};
digitalWrite(LED_BUILTIN, state_from_pwm);
};
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PIN_INPUT, INPUT);
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(PIN_INPUT), catch_int, CHANGE);
interrupts();
}
unsigned long ts_next = 0;
unsigned long pw;
void loop() {
if (millis() > ts_next)
{
ts_next = millis() + 1000;
noInterrupts();
pw = pulse_width;
period = pulse_start - pulse_prev_start;
interrupts();
Serial.print(period);
Serial.print(" ");
Serial.println(pw);
};
}
Якась незвичайна серва у вас
#define PIN_INPUT 2 // Arduino Nano - pin2 or pin3 only
#define PWM_WIDTH_FALSE 1400
#define PWM_WIDTH_TRUE 1600
unsigned long pulse_start = 0;
unsigned long pulse_width = 0;
bool state_from_pwm = false;
void catch_int()
{
if (digitalRead(PIN_INPUT))
{
pulse_start = micros();
} else {
pulse_width = micros() - pulse_start;
if (pulse_width < PWM_WIDTH_FALSE)
{
state_from_pwm = false;
} else if (pulse_width > PWM_WIDTH_TRUE)
{
state_from_pwm = true;
};
digitalWrite(LED_BUILTIN, state_from_pwm);
};
}
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
pinMode(PIN_INPUT, INPUT);
Serial.begin(115200);
attachInterrupt(digitalPinToInterrupt(PIN_INPUT), catch_int, CHANGE);
interrupts();
}
unsigned long ts_next = 0;
unsigned long pw;
void loop() {
if (millis() > ts_next)
{
ts_next = millis() + 1000;
noInterrupts();
pw = pulse_width;
interrupts();
Serial.println(pw);
};
}
Ну давайте спробуємо виміряти, що у вас там за PWM.