Я имел ввиду попробовать новый код и сделать лог. Модернизировать старый код плохая затея он не оптимален и будет тормозить программу даже без задержки delay (100). Т. К. Он пытается принять все сообщение сразу за один проход луп. А без delay, возможно сообщение будет разрезано на 2 или более и тогда каша. Переделывать с новым кодом то минимум, формулы все те-же вставишь, только с номерами байт принятого сообщения немного подправить возможно придётся.
Макс, у меня в коде нет ни одного прерывания, поэтому изъятие байт из Serial-а прерываться не будет. И чем хорош твой код из 157 сообщения, я извлекаю байты из Serial-а не со скоростью 10400 бод, как он посылает, а с максимальной скоростью процессора(это примерно 50 мкСек на байт). Поэтому чтобы изъять все сообщение мне нужно будет не более 2 мСек! Этого даже энкодер не заметит!!!
ну поступай как знаешь . Тебе предложили более лучший вариант, вставить его в текущий код не проблема. Причина сопротивления непонятна. Тот код корявый , это я тебе как автор говорю. Если не будешь его применять . просто проверь хотябы #2185 как работает, изменив тот список пидов на свой один 2102. и машина какая напиши.
ок, Макс, я попробую. Ты не обижайся, просто я не программист, я электронщик, и мне придется много времени потратить чтобы все собрать в одно по твоему новому варианту. Но я это обязательно сделаю! А пока проверю мою версию, сколько времени уходит на подпрограмму Recieve(). Макет БК собран, можно проводить полноценные эксперименты связи с ЭБУ. Кстати, я попробую твой новый код для начала отдельно, без интеграции в БК, так будет проще. Спасибо за помощь! ))) Машина Нексия N-150, с 16-ти клапанным двигателем и ЭБУ Sirius D42
а че мне обижаться, это было скорее раздражение. я пытался тебе объяснить преимущества нового подхода, а ты мне про нет прерываний и что извлекаются байты из буфера уарт со скоростью процессора. А как быстро эти байты туда попадают? правильно, со скоростью 10400. весь ответ ЭБУ из 38 байт туда попадет примерно через 36 мс. как только первый байт туда попал, начинается работа функции receive() , поэтому задержка 100 мс и нужна чтобы дождаться остальные байты, ну или вариации были без нее , всё равно дожидаясь остальных байт функция работает, а это 36 мс. Не комильфо, я щитаю . То что попробуешь, это правильно. Если заработает, думаю лучше потратить время и перейти на новый вариант.
вот засада! Не могу подключиться к ЭБУ! Новый распаянный макет не подключается, раньше подключался с макетом на штырьках- и все работало! У меня в новом макете даже все детали K-Line адаптера с того макета. Правда раньше была плата Uno, а теперь Mega. на Меге пробовал подключиться и с Serial2 и с SoftSerial (на те же выводы чтобы не перепаивать). Нет инициализации и все тут! Проверил работу адаптера- выдает и 0, и 1 (когда соответствующий сигнал на входе). Пробовал соединение ELM327 через блютуз на телефон-все работает, соединение с ЭБУ в норме! Аж остатки мозга закипели!!! ))) Шился скетчем из 157 поста, который раньше у меня работал и с него делал несколько логов. Вот такие дела!
если что, на всякий скажу, что разница софтсериала и хардсериала есть, в контексте работы с к-линией. При работе через софтсериал отправленные байты НЕ прилетают обратно в приемник (эффекта эхо нет), а при работе через хардсериал прилетают (эффект эхо присутствует). Это надо учитывать в скетче. Не факт что причина у тебя в этом , но чтоб знал. В скетче #2185 есть эта настройка (8 строка) .
ну вот, наконец-то заработала связь с ЭБУ! Спасибо Максу! Заработало на сериале3 (14 и 15 выводы меги), но перед этим я пробовал на этих же выводах софт сериал - не стало работать, хотя на этих выводах pcint имеется! Ну и ладно, мне в общем-то сериал и нужен, чтобы прием данных происходил независимо от того, чем сейчас занимается процессор. Пришлось только буфер на 6 байт увеличить, чтобы еще и эхо принимать. Ну теперь уже можно полноценно опробовать макет БК! Завтра постараюсь устроить тест-драйв! ))). Вот лог с выключенным двигателем, но включенным зажиганием (с работающим двигателем лог не сохранился)
протестировал на БК, прикольно смотреть как повышается температура двигателя и изменяется напряжение бортовой сети! ))) Теперь нужно все доводить до ума. Кстати, посчитал что интервал опроса в 150 мСек маловат (со всеми интервалами по официальному протоколу) , возможны глюки. Поэтому увеличиваю интервал опроса до 200 мСек. Посмотрим как будут себя вести интервалы загрузки значков, экрана, меню, а главное не будет ли глючить энкодер!
и скинь часть скетча где все формулы , я тебе их запихаю в свой скетч . дело 2х минут. потом в своём проекте удалишь все, что касается клайн . Вставишь в луп функцию k_line() и заинклюдишь файл "K_lineNexia_sirius.h" (я тебе в него упакую свой скетч), я думаю тогда у тебя это не полгода займет, а несколько минут.
Макс, разобрался в том, что ты мне написал, только один вопрос: про какие формулы идет речь? Формулы преобразования данных, получаемых через Клайн? и формулы расчета расхода топлива?
Макс, у меня в проекте 9 файлов подпрограмм, не считая файлов с логотипом, значками и др. Если я эти 9 файлов просто соберу в один, то получится портянка длиной в 3000 строк! Попробую некоторые подпрограммы убрать или сделать пустыми.
ну супер. теперь там чуть выше функции setup(), где дефайны по клайн, DEBUG_KLINE закомментируй, а DEBUG_VALUES можешь раскомментить, чтобы проверить как формулы правильно или нет работают. Во вкладке K_line.h функция DEBUGPrint можешь добавить переменных своих для отображения. После того как проект будет к завершению, скомпилируй скетч с закомментированными и DEBUG_KLINE иDEBUG_VALUES, чтобы откладка в терминал больше не шла, не мешала работе и лишнюю память и процессорное время не отъедала.
всем привет! яможет кто подскажет про монитор порта ардуино. Столкнулся с тем, что отсечки времени в мониторе не соответствуют временным и интервалам и задержкам ардуино!!! Проверял интервалы общения БК с ЭБУ авто и выявил то, что вместо интервала в 100 мСек- 94, а вместо 60 мСек - 47!!! Причем 60 увеличиваю до 70 - все равно 47!!! Стало интересно, попробовал Blink с delay и без delay , то же самое. Если сделать еще больше - начнет скакать, то 47, то больше 80-ти. Плата Мега, пробовал на 115200 и 9600 - одинаково!
const int ledPin = 13; // номер штыря светодиода
int ledState = LOW; // ledState used to set the LED
unsigned long previousMillis = 0; // will store last time LED was updated
const long interval = 60; // interval at which to blink (milliseconds)
void setup(){
Serial.begin(9600);
Serial.println("Test OK!");
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, ledState); // гасим светодиод
}
void loop(){
unsigned long currentMillis = millis();
if(currentMillis - previousMillis >= interval){
previousMillis = currentMillis;
if(ledState == LOW){
ledState = HIGH;
}else{
ledState = LOW;
}
digitalWrite(ledPin, ledState);
delay(50);
Serial.println(ledState);
}
}
во втором скетче даже delay добавлял до 10 мСек- не помогает. Добавил 50 - задержки стали скакать.
В общем я уменьшил задержку до 100 мкСек (до 0 не стал уменьшать- боюсь будет нестабильный запрос), теперь запрос = 1 мСек и обработка ответа = 1 мСек!!! Запросы и ответы стабильны! Спасибо, Макс, за подсказку!
привет всем! По многочисленным просьбам трудящихся переделал язык Меню на русский. Увеличил кол-во символов в строке до 14, стали читабельны почти все надписи. Перешел с 3-го размера шрифта на 2-й, так кол-во символов увеличилось в 1,5 раза и стали доступны нормальные названия пунктов Меню на русском, прямо как в оригинале! Но оказалось что мне уже плохо видно 2-й шрифт с расстояния 70-80 см, приходится напрягать зрение и отвлекаться. Так что пришлось отказаться от этого размера. Еще сделал ввод даты, т.к. оказалось что нужно знать дату для некоторых сообщений, например для сообщения для замены резины на зимнюю!))). Но начал подтормаживать энкодер, оказалось что от русификатора tft.cp437. В общем, пришлось пока отказаться от использования русских надписей! Пока допиливаю Меню, хочу еще сделать чтение и сброс ошибок и чтение данных из ответа ЭБУ (на экране БК) для отладки на месте. (просто у меня есть возможность в пунктах меню изменить некоторые интервалы связи с ЭБУ, корректировать для расчета длительность импульсов впрыска, калибровать датчики и тд.)
понимаю сарказм. Это мой первый БК. До конца не представляю что понадобится отображать, насколько стабильно будет работать связь с ЭБУ в разных режимах авто, скачках напряжения и помехах. Пытаюсь предусмотреть возможность настройки некоторых параметров на месте. Да и хочется задействовать обе страницы Меню (12 пунктов), не зря же я мучился чтобы так сделать! Мне нравится как получилось, хотя для уже отлаженного БК можно сделать Меню одностраничное (сгруппировать некоторые пункты).
Вот ведь! Оказывается русский шрифт БК не помеха!!! ))) Всегда интересовало, если на старуху бывает проруха, то что на старика бывает??? ) Буду дальше искать причину глюков энкодера
Всем привет. Забыл сразу написать, причиной глюков энкодера было использование монитора порта. Вобщем при проверке работы энкодера монитор порта лучше отключать! А вообще, проект в очередной раз заброшен, слишком я его усложнил лишними примочками! Есть надежда его упростить и наконец закончить, т.к. пока еще езжу на Нексии! )))
Я имел ввиду попробовать новый код и сделать лог. Модернизировать старый код плохая затея он не оптимален и будет тормозить программу даже без задержки delay (100). Т. К. Он пытается принять все сообщение сразу за один проход луп. А без delay, возможно сообщение будет разрезано на 2 или более и тогда каша. Переделывать с новым кодом то минимум, формулы все те-же вставишь, только с номерами байт принятого сообщения немного подправить возможно придётся.
Макс, у меня в коде нет ни одного прерывания, поэтому изъятие байт из Serial-а прерываться не будет. И чем хорош твой код из 157 сообщения, я извлекаю байты из Serial-а не со скоростью 10400 бод, как он посылает, а с максимальной скоростью процессора(это примерно 50 мкСек на байт). Поэтому чтобы изъять все сообщение мне нужно будет не более 2 мСек! Этого даже энкодер не заметит!!!
ну поступай как знаешь . Тебе предложили более лучший вариант, вставить его в текущий код не проблема. Причина сопротивления непонятна. Тот код корявый , это я тебе как автор говорю. Если не будешь его применять . просто проверь хотябы #2185 как работает, изменив тот список пидов на свой один 2102. и машина какая напиши.
ок, Макс, я попробую. Ты не обижайся, просто я не программист, я электронщик, и мне придется много времени потратить чтобы все собрать в одно по твоему новому варианту. Но я это обязательно сделаю! А пока проверю мою версию, сколько времени уходит на подпрограмму Recieve(). Макет БК собран, можно проводить полноценные эксперименты связи с ЭБУ. Кстати, я попробую твой новый код для начала отдельно, без интеграции в БК, так будет проще. Спасибо за помощь! ))) Машина Нексия N-150, с 16-ти клапанным двигателем и ЭБУ Sirius D42
а че мне обижаться, это было скорее раздражение. я пытался тебе объяснить преимущества нового подхода, а ты мне про нет прерываний и что извлекаются байты из буфера уарт со скоростью процессора. А как быстро эти байты туда попадают? правильно, со скоростью 10400. весь ответ ЭБУ из 38 байт туда попадет примерно через 36 мс. как только первый байт туда попал, начинается работа функции receive() , поэтому задержка 100 мс и нужна чтобы дождаться остальные байты, ну или вариации были без нее , всё равно дожидаясь остальных байт функция работает, а это 36 мс. Не комильфо, я щитаю . То что попробуешь, это правильно. Если заработает, думаю лучше потратить время и перейти на новый вариант.
вот засада! Не могу подключиться к ЭБУ! Новый распаянный макет не подключается, раньше подключался с макетом на штырьках- и все работало! У меня в новом макете даже все детали K-Line адаптера с того макета. Правда раньше была плата Uno, а теперь Mega. на Меге пробовал подключиться и с Serial2 и с SoftSerial (на те же выводы чтобы не перепаивать). Нет инициализации и все тут! Проверил работу адаптера- выдает и 0, и 1 (когда соответствующий сигнал на входе). Пробовал соединение ELM327 через блютуз на телефон-все работает, соединение с ЭБУ в норме! Аж остатки мозга закипели!!! ))) Шился скетчем из 157 поста, который раньше у меня работал и с него делал несколько логов. Вот такие дела!
опа, импульсный ИП на LM2576, вот где похоже собака-то! И К-Лайновский нагрузочный резистор надо уменьшить с 3,3 кОм до 510 Ом!
если что, на всякий скажу, что разница софтсериала и хардсериала есть, в контексте работы с к-линией. При работе через софтсериал отправленные байты НЕ прилетают обратно в приемник (эффекта эхо нет), а при работе через хардсериал прилетают (эффект эхо присутствует). Это надо учитывать в скетче. Не факт что причина у тебя в этом , но чтоб знал. В скетче #2185 есть эта настройка (8 строка) .
Правда раньше была плата Uno, а теперь Mega. на Меге пробовал подключиться и с Serial2 и с SoftSerial (на те же выводы чтобы не перепаивать).
И ещё. На меге 2560 ноги, предназначенные для сериал2 не поддерживают softserial (точнее сказать Rx софт сериал), т. к. на них нет прерывания pcint.
спасибо, Макс! По правде говоря не знал этого. Ну что ж, попробую сериал3 с изначальным скетчем.
ну вот, наконец-то заработала связь с ЭБУ! Спасибо Максу! Заработало на сериале3 (14 и 15 выводы меги), но перед этим я пробовал на этих же выводах софт сериал - не стало работать, хотя на этих выводах pcint имеется! Ну и ладно, мне в общем-то сериал и нужен, чтобы прием данных происходил независимо от того, чем сейчас занимается процессор. Пришлось только буфер на 6 байт увеличить, чтобы еще и эхо принимать. Ну теперь уже можно полноценно опробовать макет БК! Завтра постараюсь устроить тест-драйв! ))). Вот лог с выключенным двигателем, но включенным зажиганием (с работающим двигателем лог не сохранился)
протестировал на БК, прикольно смотреть как повышается температура двигателя и изменяется напряжение бортовой сети! ))) Теперь нужно все доводить до ума. Кстати, посчитал что интервал опроса в 150 мСек маловат (со всеми интервалами по официальному протоколу) , возможны глюки. Поэтому увеличиваю интервал опроса до 200 мСек. Посмотрим как будут себя вести интервалы загрузки значков, экрана, меню, а главное не будет ли глючить энкодер!
похоже я не дождусь проверки скетча #2185 ...
Макс, я ж писал что не программист, а электронщик. Поэтому пока разберусь в твоем скетче, пока смогу переделать под свои нужды- пройдет еще пол года!
не нужно интегрировать в свой проект, просто залей мой скетч и проверь. Для этого вроде не надо быть программистом.
Ок, попробую
и скинь часть скетча где все формулы , я тебе их запихаю в свой скетч . дело 2х минут. потом в своём проекте удалишь все, что касается клайн . Вставишь в луп функцию k_line() и заинклюдишь файл "K_lineNexia_sirius.h" (я тебе в него упакую свой скетч), я думаю тогда у тебя это не полгода займет, а несколько минут.
спасибо, конечно... Хотя я и половины не понял чего ты написал! ))).Попробовал твой скетч #2215 работает, выкладываю Лог
Макс, разобрался в том, что ты мне написал, только один вопрос: про какие формулы идет речь? Формулы преобразования данных, получаемых через Клайн? и формулы расчета расхода топлива?
Получаемых данных через клайн. Весь скетч выложи да и все.
Макс, у меня в проекте 9 файлов подпрограмм, не считая файлов с логотипом, значками и др. Если я эти 9 файлов просто соберу в один, то получится портянка длиной в 3000 строк! Попробую некоторые подпрограммы убрать или сделать пустыми.
на яндекс диск всё положи и скинь ссылку
https://disk.yandex.ru/d/uiiaedphciv0pA
Вот ссылка, вроде получилось закинуть на Яндекс Диск (первый раз делаю). К этому моменту уже удалось все что можно упаковать в один скетч
Сори, не на тот проект ссылка была! вот правильная
https://disk.yandex.ru/d/iUhOyLVEkkjgrQ
проверяй
привет, Макс! Проверил тобой измененный скетч, работает. Выкладываю лог. В нем есть сбои ответов- это я переходил в меню и перебирал в нем пункты.
ну супер. теперь там чуть выше функции setup(), где дефайны по клайн, DEBUG_KLINE закомментируй, а DEBUG_VALUES можешь раскомментить, чтобы проверить как формулы правильно или нет работают. Во вкладке K_line.h функция DEBUGPrint можешь добавить переменных своих для отображения. После того как проект будет к завершению, скомпилируй скетч с закомментированными и DEBUG_KLINE и DEBUG_VALUES, чтобы откладка в терминал больше не шла, не мешала работе и лишнюю память и процессорное время не отъедала.
ок, спасибо, Макс!
всем привет! яможет кто подскажет про монитор порта ардуино. Столкнулся с тем, что отсечки времени в мониторе не соответствуют временным и интервалам и задержкам ардуино!!! Проверял интервалы общения БК с ЭБУ авто и выявил то, что вместо интервала в 100 мСек- 94, а вместо 60 мСек - 47!!! Причем 60 увеличиваю до 70 - все равно 47!!! Стало интересно, попробовал Blink с delay и без delay , то же самое. Если сделать еще больше - начнет скакать, то 47, то больше 80-ти. Плата Мега, пробовал на 115200 и 9600 - одинаково!
во втором скетче даже delay добавлял до 10 мСек- не помогает. Добавил 50 - задержки стали скакать.
это логи Blink-ов
вставь свой таймштамп на миллис , а идэшный убери в настройках
ну вот, исчезли 7 моих сообщений
В общем я уменьшил задержку до 100 мкСек (до 0 не стал уменьшать- боюсь будет нестабильный запрос), теперь запрос = 1 мСек и обработка ответа = 1 мСек!!! Запросы и ответы стабильны! Спасибо, Макс, за подсказку!
привет всем! По многочисленным просьбам трудящихся переделал язык Меню на русский. Увеличил кол-во символов в строке до 14, стали читабельны почти все надписи. Перешел с 3-го размера шрифта на 2-й, так кол-во символов увеличилось в 1,5 раза и стали доступны нормальные названия пунктов Меню на русском, прямо как в оригинале! Но оказалось что мне уже плохо видно 2-й шрифт с расстояния 70-80 см, приходится напрягать зрение и отвлекаться. Так что пришлось отказаться от этого размера. Еще сделал ввод даты, т.к. оказалось что нужно знать дату для некоторых сообщений, например для сообщения для замены резины на зимнюю!))). Но начал подтормаживать энкодер, оказалось что от русификатора tft.cp437. В общем, пришлось пока отказаться от использования русских надписей! Пока допиливаю Меню, хочу еще сделать чтение и сброс ошибок и чтение данных из ответа ЭБУ (на экране БК) для отладки на месте. (просто у меня есть возможность в пунктах меню изменить некоторые интервалы связи с ЭБУ, корректировать для расчета длительность импульсов впрыска, калибровать датчики и тд.)
Вы пассажиром в авто передвигаетесь ?
понимаю сарказм. Это мой первый БК. До конца не представляю что понадобится отображать, насколько стабильно будет работать связь с ЭБУ в разных режимах авто, скачках напряжения и помехах. Пытаюсь предусмотреть возможность настройки некоторых параметров на месте. Да и хочется задействовать обе страницы Меню (12 пунктов), не зря же я мучился чтобы так сделать! Мне нравится как получилось, хотя для уже отлаженного БК можно сделать Меню одностраничное (сгруппировать некоторые пункты).
Вот ведь! Оказывается русский шрифт БК не помеха!!! ))) Всегда интересовало, если на старуху бывает проруха, то что на старика бывает??? ) Буду дальше искать причину глюков энкодера
Всем привет. Забыл сразу написать, причиной глюков энкодера было использование монитора порта. Вобщем при проверке работы энкодера монитор порта лучше отключать! А вообще, проект в очередной раз заброшен, слишком я его усложнил лишними примочками! Есть надежда его упростить и наконец закончить, т.к. пока еще езжу на Нексии! )))