Ви не увійшли.
Знайшов дещо цікаве. Виявляється, для деяких чіпів є емулятори. І в 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.
Про серву схоже вгадав
Ви хочете щоб кожне відкривання серви перемикало стан пристрою (щоб лампочак вмикалась і вимикалась)?
#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);
attachInterrupt(digitalPinToInterrupt(PIN_INPUT), catch_int, CHANGE);
interrupts();
}
void loop() {
}
Десь так. Очікуються імпульси на вході D2. Якщо ваші 20 - це 1/20 від 50 гц, тобто 1 мс, то варто взяти за межу середину допустимого інтервалу (1.5мс), і додати гістерезис +-100 мкс, для захисту від спрацьовувань близько до межі. Сподіваюсь, вгадав.
Хоча, якщо я вгадав, то мені здається, що ваша задача вирішується і без додаткового контроллера.
Конкретно що не так з вашим кодом. Ви 500 разів підряд читаєте значення з АЦП і рахуєте середнє значення. Зазвичай так роблять, коли інтервал часу, на якому усереднюють, відомий. У вашому випадку - ні. 500 відліків - невідомо скільки мікросекунд.
Далі. АЦП вертає значення від 0 до 1024, 1024 відповідає, якщо не помиляюсь, 3.3 В. Що таке 20 незрозуміло, але це дуже близько до рівня шуму. Скоріше за все, воно ловить завади від живлення.
Няп він прислав прошивку під stm32f103 aka "Blue pill". Мабуть повинно зібратись під stm32cube ide.
Не думаю що ви цього хотіли
Вам потрібно:
1. записати в табличку, які команди надсилає руль при нажиманні кожної кнопки.
2. написати програму, яка буде слухати LIN порт (можна взяти готову, їх дофіга), ловити ці команди, і робити що потрібно вам (чи релюшками клацати, чи в CAN щось передавати).
Якщо виберете CAN, то пункти 1, 2 треба повторити з вашим оригінальним рульом.
Все.
О, тепер врюхав звідки така ціна Це дійсно врізається в вихлопну систему. Температура, тиск, агресивне середовище. Дешево це не може коштувати.
звук як на симфоніческому концерті Бетховена
Для дирчика з несправною вихлопною системою?
Залез под машину — сразу бросился в глаза виновник злого спортивного выхлопа, а именно прогорела гофра
Коли я чую дивний звук - перша моя думка - в когось щось прогоріло. Переше враженння для того, хто не знає скільки це може коштувати
1-Дві колонки,
2-усілітель,
570 баксів, за пристрій, який потрібен виключно щоб бісити оточуючих
не розумію
2- LIN_slave_portable_Arduino, брати звідти приклад із сканером незнаю де, це типа скетч чи програма
Питання по ділу
Бібліотека. З такою ось назвою. Встановлюється прямо через IDE через library manager. І приклади з собою тягне. І їх видно в меню examples в тому ж ide
3-У мене TJA1020 підключено до USB-UART на чіпі CH340, в программі COM Port Toolkit 3.9 йшли якісь данні.
Збс. пора підключати до ардуїни і ловити дані нею.
4-А тепер TJA1020 треба підключити прямо в Arduino Mega 2560?
Наприклад так. Список плат, на яких воно наче повинно поїхати без бубна, є. В мене просто такої дорогої іграшки немає, то я і не розглядаю Насправді, на 8266 воно теж без бубна дрібної правки не зібралось
6-встановлювати LIN_slave_portable_Arduino, брати звідти приклад із сканером, просто скачав LIN_master_portable-1.4.0 .а далі не знаю що куди встановлювати big_smile
// board pin definitions. Note: for supported Rx pins see https://docs.arduino.cc/learn/built-in-libraries/software-serial/
#if defined(ARDUINO_AVR_MEGA2560)
#include <NeoHWSerial.h> // use NeoHWSerial to avoid linker conflict for UART ISRs
#define PIN_LIN_TX 18 // transmit pin for LIN
#define PIN_LIN_RX 10 // receive pin for LIN
#define PIN_TOGGLE 30 // pin to demonstrate background operation
#define PIN_ERROR 32 // indicate LIN return status
#define SERIAL_CONSOLE NeoSerial // serial I/F for console output (comment for no output)
Ну, я бачу в LIN_slave_SWSerial.ino таке. Я так розумію, що тут вказано, які піни до чого підключити. Очікується також, що діагностика через Serial.print буде валитись в послідовний порт і її буде видно через вбудований в ide монітор.
Якщо не білдиться - Arduino/libraries/LIN_slave_portable/src/LIN_slave_SoftwareSerial.cpp - треба внести таку зміну
@@ -63,7 +63,7 @@
*/
LIN_Slave_SoftwareSerial::LIN_Slave_SoftwareSerial(uint8_t PinRx, uint8_t PinTx, bool InverseLogic, uint16_t MinFramePause,
LIN_Slave_Base::version_t Version, const char NameLIN[], uint32_t TimeoutRx, const int8_t PinTxEN):
- LIN_Slave_Base(Version, NameLIN, TimeoutRx, PinTxEN), SWSerial(PinRx, PinTx, InverseLogic)
+ LIN_Slave_Base(Version, NameLIN, TimeoutRx, PinTxEN), SWSerial(PinRx, PinTx)
{
// Debug serial initialized in begin() -> no debug output here
всі борди вже преконфігуровані.
Хм, здається ви таке праві Це конфігурація відноситься до плати, а не до проекту. Просто раз існує idf.py menuconfig - чому б не запустити
А що у вас в platformio.ini?
[env:esp32-c3-devkitm-1]
platform = espressif32
board = esp32-c3-devkitm-1
framework = arduino
upload_port = /dev/ttyACM0
debug_tool = esp-builtin
build_flags = !echo "-DGIT_VERSION="$(git rev-parse --short HEAD) "-DBUILD_DATE="$(date +%%Y%%m%%d)
Найдешевша китайська плата з непрацюючою керамічною антеною
Всі колись починали
крч дивіться. якщо вирішили таки зробити цей проект
і по тій схемі, де ваш jtj1020 приймає сигнал від руля, а контроллер на ардуїні щось робить далі
то я б робив в такій послідовності.
спочатку - встановлюєте arduino ide, робите стандартний blink світлодіодом - щоб впевнитись що ардуїна працює і програми в неї ви можете заливати.
далі - встановлювати LIN_slave_portable_Arduino, брати звідти приклад із сканером, паяти jtj1020 і пробувати через нього побачити реакцію на кнопки.
а там буде видно. можна релюшками клацати, можна через ЦАП вивести потрібну напругу.. можна CAN адаптер припаяти. ліб для підримки CAN теж є, можливо, щось підійде.
що не ясно - питайте.
Але для спрощення мабуть краще взяти esp8266 або esp32. Бо
Supported (=successfully tested) boards:
- Arduino Mega 2560 https://store.arduino.cc/products/arduino-mega-2560-rev3
- Adafruit Trinket https://www.adafruit.com/product/1501
- ESP8266 D1 mini https://www.wemos.cc/en/latest/d1/d1_mini.html
- ESP32 Wroom-32UE https://www.etechnophiles.com/esp32-dev-board-pinout-specifications-datasheet-and-schematic/
Під інше треба підпилювати, а це задача з зірочками.
Сорян, трохи вас обманув. З лібами до LIN не так просто; https://github.com/gicking/LIN_slave_portable_Arduino/blob/main/README.md - це наче повинно поїхати, але не без бубна. Ні на Arduino Nano ні на STM32 автор його не тестував.