Адаптер к-линии на LM393. Подключение к ECU Toyota (как достучаться?)

Igumich
Offline
Зарегистрирован: 31.03.2022

Собран сниффер на LM393, подключаю совместно с рабочим адаптером к-линии через программу TECU3, которая при запросе дала такой ответ, при этом сниффер настроен тоже на скорость 9600.


7359ms
 0 81
57ms
 13 F0 81 5 83 F0 13 C1 E9 8F
54ms
 BF
303ms
 82 13 F0 21 0 A6
89ms
 82 13 F0 9 0 8E
78ms
 84 13 F0 A4 2 FF DF B
77ms
 84 13 F0 A4 2 FF DE A
77ms
 84 13 F0 A4 2 FF DD 9
77ms
 84 13 F0 A4 2 FF DC 8
94ms
 84 13 F0 A4 2 FF DB 7
93ms
 84 13 F0 A4 2 FF DA 6
93ms
 84 13 F0 A4 2 FF D9 5 86 F0 13 E4 2 FF D9 1 0
54ms
 48
84ms
 84 13 F0 A4 2 FF D8 4 86 F0 13 E4 2 FF D8
54ms
 1 1 48
85ms
 84 13 F0 A4 2 FF D7 3 86 F0 13 E4 2 FF D7 2 1
57ms
 48
67ms
 84 13 F0 A4 2 FF D6 2 86 F0 13 E4 2 FF D6 0
55ms
 2 46
85ms
 84 13 F0 A4 2 FF D5 1 86 F0 13 E4 2 FF D5 F 0 52
141ms
 84 13 F0 A4 2 FF D4 0 86 F0 13 E4 2 FF D4 3 F
55ms
 54
84ms
 84 13 F0 A4 2 FF D3 FF 86 F0 13 E4 2 FF D3
55ms
 FE 3 42
85ms
 84 13 F0 A4 2 FF D2 FE 86 F0 13 E4 2 FF D2 3 FE
56ms
 41
67ms
 84 13 F0 A4 2 FF D1 FD 86 F0 13 E4 2 FF D1 1F
56ms
 3 61
85ms
 84 13 F0 A4 2 FF D0 FC 86 F0 13 E4 2 FF D0 0 1F 5D
139ms
 84 13 F0 A4 2 FF CF FB 86 F0 13 E4 2 FF CF 40 0
55ms
 7D
84ms
 84 13 F0 A4 2 FF CE FA
78ms
 84 13 F0 A4 2 FF CD F9 86 F0 13 E4 2 FF CD 53 30 BE
125ms
 84 13 F0 A4 2 FF CC F8 86 F0 13 E4 2 FF CC 54 53
54ms
 E1
83ms
 84 13 F0 A4 2 FF CB F7 86 F0 13 E4 2 FF CB
55ms
 30 54 BD
85ms
 84 13 F0 A4 2 FF CA F6 86 F0 13 E4 2 FF CA 30 30 98
140ms
 84 13 F0 A4 2 FF C9 F5 86 F0 13 E4 2 FF C9 33
54ms
 30 9A
84ms
 84 13 F0 A4 2 FF C8 F4 86 F0 13 E4 2 FF C8 46 33
54ms
 AF
71ms
 84 13 F0 A4 2 FF C7 F3 86 F0 13 E4 2 FF C7 45 46
55ms
 C0
83ms
 84 13 F0 A4 2 FF C6 F2 86 F0 13 E4 2 FF C6
55ms
 4 45 7D
85ms
 84 13 F0 A4 2 FF C5 F1 86 F0 13 E4 2 FF C5 40 4 77
141ms
 84 13 F0 A4 2 FF C4 F0 86 F0 13 E4 2 FF C4 61
55ms
 40 D3
84ms
 84 13 F0 A4 2 FF C3 EF
77ms
 84 13 F0 A4 2 FF C2 EE 86 F0 13 E4 2 FF C2 0 1 31
139ms
 84 13 F0 A4 2 FF C1 ED 86 F0 13 E4 2 FF C1 1
58ms
 0 30
83ms
 84 13 F0 A4 2 FF C0 EC
93ms
 84 13 F0 A4 2 FF BF EB
94ms
 84 13 F0 A4 2 FF BE EA
77ms
 84 13 F0 A4 2 FF BD E9
78ms
 84 13 F0 A4 2 FF BC E8
77ms
 84 13 F0 A4 2 FF BB E7
94ms
 84 13 F0 A4 2 FF BA E6
94ms
 84 13 F0 A4 2 FF B9 E5
92ms
 84 13 F0 A4 2 FF B8 E4
93ms
 84 13 F0 A4 2 FF B7 E3
77ms
 84 13 F0 A4 2 FF B6 E2
77ms
 84 13 F0 A4 2 FF B5 E1
77ms
 84 13 F0 A4 2 FF B4 E0
76ms
 84 13 F0 A4 2 FF B3 DF
93ms
 84 13 F0 A4 2 FF B2 DE
93ms
 84 13 F0 A4 2 FF B1 DD
93ms
 84 13 F0 A4 2 FF B0 DC
93ms
 82 13 F0 30 0 B5 86 F0 13 70 0 D9 82 0 0
57ms
 54
84ms
 82 13 F0 30 20 D5
76ms
 82 13 F0 1 13 99 83 F0 13 41 13 1 DB
124ms
 82 13 F0 1 1C A2 83 F0 13 41 1C 0 E3
124ms
 82 13 F0 1 1D A3
93ms
 82 13 F0 1 D1 57 83 F0 13 41 D1 0 98
124ms
 82 13 F0 1 D3 59 87 F0 13 41 D3 32 31 32 35
57ms
 30 98
83ms
 82 13 F0 1 0 86 86 F0 13 41 0 BE 3E B0 0 76
123ms
 83 13 F0 2 0 0 88 87 F0 13 42 0 0 7E 3A 0 0
57ms
 84
83ms
 82 13 F0 1 B0 36 84 F0 13 41 B0 0 1 79
139ms
 83 13 F0 2 B0 0 38 85 F0 13 42 B0 0 0 1 7B
124ms
 82 13 F0 1 C0 46 86 F0 13 41 C0 0 0 20 1
55ms
 AB
84ms
 83 13 F0 2 C0 0 48 87 F0 13 42 C0 0 0
56ms
 0 0 1 8D
85ms
 82 13 F0 1 E0 66 86 F0 13 41 E0 95 12 1 80 D2
140ms
 83 13 F0 2 E0 0 68 87 F0 13 42 E0 0 1 0
54ms
 0 0 AD
86ms
 81 13 F0 82 6

 

Igumich
Offline
Зарегистрирован: 31.03.2022

Если в сниффере выставить скорость 10400


24849ms
 0 1
54ms
 33 F0 1 5 3 F0 13 81 C9 F
58ms
 7F
317ms
 2 33 F0 41 0 46
88ms
 2 13 F0 9 0 E
78ms
 4 33 F0 44 2 FF BF B
78ms
 4 13 F0 44 2 FF BE A
78ms
 4 33 F0 44 2 FF BD 9
77ms
 4 13 F0 44 2 FF BC 8
94ms
 4 33 F0 44 2 FF BB 7
93ms
 4 33 F0 44 2 FF BA 6
94ms
 4 33 F0 44 2 FF B9 5 6 F0 13 C4 2 FF 99 1 0 88
139ms
 4 33 F0 44 2 FF B8 4 6 F0 13 C4 2 FF 98 1
57ms
 1 88
82ms
 4 33 F0 44 2 FF B7 3 6 F0 13 C4 2 FF 97 2 1
56ms
 88
86ms
 4 33 F0 44 2 FF B6 2 6 F0 13 C4 2 FF 96 0 2
56ms
 86
82ms
 4 13 F0 44 2 FF B5 1 6 F0 13 C4 2 FF 95
56ms
 F 0 92
83ms
 4 13 F0 44 2 FF 94 0 6 F0 13 C4 2 FF 94 3 F
56ms
 94
85ms
 4 13 F0 44 2 FF B3 FF 6 F0 13 C4 2 FF 93 FE
57ms
 3 82
83ms
 4 33 F0 44 2 FF 92 FE 6 F0 13 C4 2 FF 92 3 FE
54ms
 81
83ms
 4 33 F0 44 2 FF B1 FD 6 F0 13 C4 2 FF 91 1F
55ms
 3 C1
85ms
 4 13 F0 44 2 FF B0 FC 6 F0 13 C4 2 FF 90 0 1F 9D
141ms
 4 13 F0 44 2 FF 8F FB 6 F0 13 C4 2 FF 8F 80 0
54ms
 FD
84ms
 4 33 F0 44 2 FF 8E FA
78ms
 4 33 F0 44 2 FF 8D F9 6 F0 13 E4 2 FF 8D 93 70 7E
140ms
 4 13 F0 44 2 FF 8C F8 6 F0 13 C4 2 FF 8C 94 93
56ms
 C1
83ms
 4 33 F0 44 2 FF 8B F7 6 F0 13 C4 2 FF 8B
56ms
 70 94 7D
84ms
 4 13 F0 44 2 FF 8A F6 6 F0 13 C4 2 FF 8A 70 70 18
125ms
 4 33 F0 44 2 FF 89 F5 6 F0 13 C4 2 FF 89 73
54ms
 70 1A
85ms
 4 33 F0 44 2 FF 88 F4 6 F0 13 C4 2 FF 88 86 73 4F
139ms
 4 33 F0 44 2 FF 87 F3 6 F0 13 C4 2 FF 87 85 86
57ms
 80
83ms
 4 33 F0 44 2 FF 86 F2 6 F0 13 C4 2 FF 86
56ms
 4 85 FD
84ms
 4 33 F0 44 2 FF 85 F1 6 F0 13 E4 2 FF 85 80 4 F7
124ms
 4 13 F0 44 2 FF 84 F0 6 F0 13 C4 2 FF 84 C1
55ms
 80 93
84ms
 4 33 F0 44 2 FF 83 CF
78ms
 4 33 F0 44 2 FF 82 CE 6 F0 13 C4 2 FF 82 0 1 71
139ms
 4 33 F0 44 2 FF 81 CD 6 F0 13 C4 2 FF 81 1
56ms
 0 70
83ms
 4 33 F0 44 2 FF 80 CC
93ms
 4 33 F0 44 2 FF 7F CB
78ms
 4 33 F0 44 2 FF 7E CA
78ms
 4 33 F0 44 2 FF 7D E9
78ms
 4 33 F0 44 2 FF 7C C8
78ms
 4 13 F0 44 2 FF 7B C7
93ms
 4 13 F0 44 2 FF 7A C6
94ms
 4 33 F0 44 2 FF 79 C5
93ms
 4 13 F0 44 2 FF 78 C4
94ms
 4 33 F0 44 2 FF 77 C3
77ms
 4 13 F0 44 2 FF 76 C2
77ms
 4 13 F0 44 2 FF 75 C1
78ms
 4 33 F0 44 2 FF 74 C0
93ms
 4 33 F0 44 2 FF 73 BF
93ms
 4 13 F0 44 2 FF 72 BE
94ms
 4 33 F0 44 2 FF 71 BD
93ms
 4 33 F0 44 2 FF 70 BC
93ms
 2 33 F0 70 0 75 6 F0 13 F0 0 99 2 0 0
56ms
 94
83ms
 2 33 F0 70 40 95
78ms
 2 33 F0 1 33 39 3 F0 13 81 13 1 9B
124ms
 2 33 F0 1 3C 42 3 F0 13 81 1C 0 C3
125ms
 2 13 F0 1 1D 43
93ms
 2 33 F0 1 B1 B7 3 F0 13 81 91 0 18
125ms
 2 33 F0 1 B3 B9 7 F0 13 81 93 72 71 72 75
56ms
 70 18
83ms
 2 33 F0 1 0 6 6 F0 13 81 0 7E 7E 70 0 F6
141ms
 3 33 F0 2 0 0 8 7 F0 13 82 0 0 FE 7A 0
53ms
 0 4
85ms
 2 13 F0 1 70 76 4 F0 13 81 70 0 1 F9
139ms
 3 33 F0 2 70 0 78 5 F0 13 82 70 0 0 1 FB
124ms
 2 33 F0 1 80 86 6 F0 13 81 80 0 0 40 1
56ms
 4B
68ms
 3 33 F0 2 80 0 88 7 F0 13 82 80 0 0
55ms
 0 0 1 D
101ms
 2 33 F0 1 C0 C6 6 F0 13 81 C0 15 12 1 0
54ms
 92
86ms
 3 13 F0 2 C0 0 C8 7 F0 13 82 E0 0 1 0
56ms
 0 0 4D
84ms
 1 33 F0 2 6

Я так понимаю, что правильная скорость 9600 ?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Лучше проверку на ошибки перехватить. Тут много не стандартного Тойотовского ...

И настройки соединения из TECU покажите

Igumich
Offline
Зарегистрирован: 31.03.2022

он будет бесконечно отсылать 7 существующих сейчас ошибок(ecu на столе без датчиков)  и в постоянном цикле опрашивать

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Это не проблема - там просто более стандартный запрос должен быть !

На Subaru и по стандарту OBDII скорость 10400

P0032 текущие и сохраненные
C2 33 F1 01 01 E8
C2 33 F1 01 01 E8 86 F1 10 41 01 81 07 E9 A9 E3
C1 33 F1 07 EC
C1 33 F1 07 EC 87 F1 10 47 00 32 00 00 00 00 01
C1 33 F1 03 E8
C1 33 F1 03 E8 87 F1 10 43 00 32 00 00 00 00 FD
C1 33 F1 82 67
C1 33 F1 82 67 81 F1 10 C2 44
Это на Subaru 07 и 03 запросы ошибок текущих и из памяти через протокол OBDII
Igumich
Offline
Зарегистрирован: 31.03.2022

А что за версия проги?

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

2.3.2.9

Я снифил компорт, и потом уже сам общался с ЭБУ по "шпаргалке"...

Igumich
Offline
Зарегистрирован: 31.03.2022

какой протокол у тойоты протокол (у меня Калдина 2001г.)? если подключаюсь елм через торк,то выдаёт что 14230-2(Fast 10400), а если через прогу InCardoc то пишет 14230-4(5baud). но теку3 выдаёт скорость обмена 9600

Igumich
Offline
Зарегистрирован: 31.03.2022

в том и вопрос, на какой скорости снифить? да и с написанием скеча пока разбираюсь. как правильно отправить запрос, что должен получить в ответ. не то что бы совсем никак, могу мелочи состряпать... вот просто в дебри полез. дурная голова...

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Установите сниффер ком порта и перехватите обмен. TECU надо настраивать на нужный протокол (по крайней мере Subaru она не видела пока я не подредактировал настройки.

Igumich
Offline
Зарегистрирован: 31.03.2022

я не настраивал теку3, сам определил и подключился.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

А есть окно с настройками ? Что там ?

Igumich
Offline
Зарегистрирован: 31.03.2022

выше скидывал перехват на 9600 и 10400 скоростях снифера

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

http://web.archive.org/web/20060519041053/http://www.alfa145.co.uk/obd/14230-2s.pdf

с 17 страницы

Окно с настройками как у меня в 4 сообщении есть ???

Igumich
Offline
Зарегистрирован: 31.03.2022

Igumich
Offline
Зарегистрирован: 31.03.2022

и больше ничего не настраивал

 

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Вижу там можно галку поставить - Системный лог файл. Может там что увидим. 

Igumich
Offline
Зарегистрирован: 31.03.2022

Позже попробую, тойотамозг не при мне)). В принципе я понял где искать обороты, время впрыска и прочее, как их перевести в человеческий вид, но вот к мозгу не могу правильно подключиться.

Komandir
Komandir аватар
Offline
Зарегистрирован: 18.08.2018

Я себе сделал просмотр/сброс ошибок и сброс ECU прямо с руля посредством микроджойстика SKRHABE10 как доп. функция к основной - круиз-контроль.

Снифить лучше через Advanced Serial Port Monitor именно обмен винды по ком порту. Так надежнее. Мы видим сам обмен на более высоком уровне (что программа передает и получает) и без привязки к скорости !

Igumich
Offline
Зарегистрирован: 31.03.2022
#include <SoftwareSerial.h>
SoftwareSerial mySerial(7, 8); // RX, TX
#include "U8glib.h"
U8GLIB_SSD1309_128X64 u8g(13, 11, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
int n;
int Te1;
int tmstop = 0;
int Temp1;
int Temp2;
int UOZ;
int DAD;
int e = 0;

String s;
int pac = 0;
int tm = 10;
byte    init_obd[] = {0x81, 0x13, 0xF0, 0x81, 0x05};  // инициализация K-line шины
byte     dad_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x0B, 0x91}; // запрос оборотов двигателя
byte   temp1_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x05, 0x8B}; // запрос температуры ож
byte   temp2_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x0F, 0x95}; // запрос температуры воздуха
byte   uoz_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x0E, 0x94}; // запрос скорости автомобиля

void setup()  {
  u8g.setFont(u8g_font_chikita);
  u8g.setColorIndex(1);
  pinMode(8, OUTPUT);

  mySerial.begin(9600);


}

void loop() {

  read_CAN();

  {
    u8g.firstPage();
    do {

      u8g.setFont(u8g_font_6x12);
      u8g.setPrintPos(0, 10);
      u8g.print(Te1);
      u8g.setPrintPos(30, 10);
      u8g.print(Temp1);
      u8g.setPrintPos(70, 10);
      u8g.print(Temp2);
      u8g.setPrintPos(0, 30);
      u8g.print(e);
      u8g.setPrintPos(70, 30);
      u8g.print(pac);
      u8g.setPrintPos(30, 30);
      u8g.print(n);
      u8g.print("n");
      u8g.setPrintPos(0, 50);
      u8g.print(DAD);
      u8g.print("DAD");
      u8g.setPrintPos(35, 50);
      u8g.print(UOZ);
      u8g.print("UOZ");

    }
    while ( u8g.nextPage() );
  }
}


void read_CAN() {

  if (pac == 0) {
    delay(300);
    digitalWrite(8, LOW);
    delay(35);
    digitalWrite(8, HIGH);
    delay(15);

    for (int i = 0; i < 5; i++) mySerial.write(init_obd[i]); // отправляем команду инициализации K-line шины

  }
  else if (n == 0 && pac > 0)
  { tm--;
    if (tm < 0 && n == 0 && e == 0) {

      delay(300);
      digitalWrite(8, LOW);
      delay(35);
      digitalWrite(8, HIGH);
      delay(15);

      for (int i = 0; i < 5; i++) mySerial.write(init_obd[i]);
      tm = 10;
    }

  }
  n = mySerial.available();


  if  (n > 0 || e == 1) {
    pac++;

    char byfer[30];
    for (int i = 0; i < n; i++) byfer[i] = mySerial.read();

    String byte5 = String(byfer[5], DEC);

    String byte4 = String(byfer[4], DEC);
    String byte3 = String(byfer[3], DEC);
    // С1 (HEX) = 193 (DEC) // С1 успешный ответ

    String byte1 = String(byfer[1], DEC);
    s = String(byfer[1], DEC);
    Te1 = s.toInt();

    if  (n == 7 && byte3 ==  "-63")  { 

      tmstop = 1;
      for (int i = 0; i < 6; i++) mySerial.write(temp1_obd[i]);
      delay(5);

    }
    else if (n == 0 && e == 1 ) {
      for (int i = 0; i < 6; i++) mySerial.write(temp1_obd[i]);
      delay(5);
    }

    if (n == 7  && byte4 ==  "5" )       {
      s = String(byfer[5], DEC);
      Temp1 = s.toInt() - 40;
      for (int i = 0; i < 6; i++) mySerial.write(temp2_obd[i]);
      delay(5);

    }
    if (n == 7  && byte4 ==  "15" )
    {
      s = String(byfer[5], DEC);
      Temp2 = s.toInt() - 40;
      delay(5);

      for (int i = 0; i < 6; i++) mySerial.write(uoz_obd[i]);// 
      delay(5);
    }
    if (n == 7  && byte4 ==  "14" )
    {
      s = String(byfer[5], DEC);
      UOZ = s.toInt() / 2 - 64;
      for (int i = 0; i < 6; i++) mySerial.write(dad_obd[i]);//ответ приходит 83 F0 13 41 0B 91 63  
      delay(5);


    }
    if (n == 7  && byte4 ==  "11" )
    {
      s = String(byfer[5], DEC);

      DAD = s.toInt(); 
      e = 1;
    }
  }

}

 

Igumich
Offline
Зарегистрирован: 31.03.2022

в строке 146 отправляем запрос на считывание показаний MAP. так как он отсутствует то по диагностике показания 145 килопаскаль.

если 91 перевести из HEX в DEC  то на дисплее отображается -111 (строка 155). в стандартном калькуляторе виндовс можно выбирать количество байт, если я выбираю 1 байт то в BIN 1001 0001 (7-ой бит равен 1,значит число будет отрицательным) а если 2 байта то при переводе из HEX в DEC как раз и получается 145. как мне правильно осуществить перевод. 

Igumich
Offline
Зарегистрирован: 31.03.2022

я понимаю что необходимо преобразовать в 2 байта, но как это сделать понять пока не могу 

b707
Offline
Зарегистрирован: 26.05.2017

Igumich пишет:

если я выбираю 1 байт то в BIN 1001 0001 (7-ой бит равен 1,значит число будет отрицательным) а если 2 байта то при переводе из HEX в DEC как раз и получается 145. как мне правильно осуществить перевод. 

для того чтобы хранить число 145, совершенно необязательно переводить его в 2 байта, оно и в одном поместится:

BIN 1001 0001 - это как раз и есть 145, если формат числа беззнаковый.

Уточните вопрос, что вам все-таки нужно. Какой у вас входной формат чисел и какой должен быть выходной, а то в коде я вижу какую-то бессмыслицу - у вас данные приходят в виде байт, вы их сначала преобразуете в строку(String), а потом из нее обратно в целые:

s = String(byfer[5], DEC);
UOZ = s.toInt() / 2 - 64;

Зачем эта ерунда? Что мешает сразу взять значение byfer[5] и использовать?

 

Igumich
Offline
Зарегистрирован: 31.03.2022

почему на дисплее отображается -111 вместо 145? число всегда положительное и целочисленное в десятичной системе

Igumich
Offline
Зарегистрирован: 31.03.2022
s = String(byfer[5], DEC);

      DAD = s.toInt();

 

b707
Offline
Зарегистрирован: 26.05.2017

Igumich пишет:

почему на дисплее отображается -111 вместо 145? число всегда положительное и целочисленное в десятичной системе

потому что вы не сообщили дисплею. что ваше число беззнаковое. А по умолчанию используется знаковый тип.

b707
Offline
Зарегистрирован: 26.05.2017

Igumich пишет:

s = String(byfer[5], DEC);

      DAD = s.toInt();

 

так я вас и спросил, зачем эта бредятина с конвертацией через String?

вот так не проще?

DAD = (uint8_t) byfer[5];

 

Igumich
Offline
Зарегистрирован: 31.03.2022

#include <SoftwareSerial.h>
SoftwareSerial mySerial(14, 15); // RX, TX
#include "U8glib.h"

U8GLIB_SSD1309_128X64 u8g(52, 51, 10, 9);  // SPI Com: SCK = 13, MOSI = 11, CS = 10, A0 = 9
#include "GyverEncoder.h"
#define DT 2
#define SW 4
#define CLK 3

Encoder enc1(CLK, DT, SW);  // для работы c кнопкой
int n;
int Te1;
int tmstop = 0;
int Temp1;
int Temp2;
int UOZ;
int DAD;
int e = 0;
float INJ;
float ST;

int pac = 0;
int tm = 10;
byte    init_obd[] = {0x81, 0x13, 0xF0, 0x81, 0x05};  // инициализация K-line шины
byte     dad_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x0B, 0x91}; // запрос оборотов двигателя
byte   temp1_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x05, 0x8B}; // запрос температуры ож
byte   temp2_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x0F, 0x95}; // запрос температуры воздуха
byte   uoz_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x0E, 0x94}; // запрос скорости автомобиля
byte   inj_obd[] = {0x82, 0x13, 0xF0, 0x01, 0xE4, 0x6A};
byte   st_obd[] = {0x82, 0x13, 0xF0, 0x01, 0x06, 0x8C};
void setup()  {
  u8g.setFont(u8g_font_chikita);
  u8g.setColorIndex(1);
  pinMode(15, OUTPUT);
Serial.begin(9600);
  mySerial.begin(9600);
 enc1.setTickMode(AUTO);

}

void loop() {

  read_CAN();

  {
    u8g.firstPage();
    do {

      u8g.setFont(u8g_font_6x12);
     
      u8g.setPrintPos(30, 10);
      u8g.print(Temp1);
      u8g.setPrintPos(70, 10);
      u8g.print(Temp2);
      u8g.setPrintPos(0, 25);
      u8g.print(ST);
       u8g.print(" ST");
      u8g.setPrintPos(70, 25);
      u8g.print(pac);
      u8g.setPrintPos(45, 25);
      u8g.print(n);
      u8g.print("n");
      u8g.setPrintPos(0, 45);
      u8g.print(DAD);
      u8g.print(" DAD");
      u8g.setPrintPos(55, 45);
      u8g.print(UOZ);
      u8g.print(" UOZ");
      u8g.setPrintPos(0, 55);
      u8g.print(INJ);
      u8g.print(" INJ");

    }
    while ( u8g.nextPage() );
  }
}


void read_CAN() {

  if (pac == 0) {
    delay(300);
    digitalWrite(15, LOW);
    delay(35);
    digitalWrite(15, HIGH);
    delay(15);

    for (int i = 0; i < 5; i++) mySerial.write(init_obd[i]); // отправляем команду инициализации K-line шины

  }
  else if (n == 0 && pac > 0)
  { tm--;
    if (tm < 0 && n == 0 && e == 0) {

      delay(300);
      digitalWrite(15, LOW);
      delay(35);
      digitalWrite(15, HIGH);
      delay(15);

      for (int i = 0; i < 5; i++) mySerial.write(init_obd[i]);
      tm = 10;
    }

  }
  n = mySerial.available();


  if  (n > 0 || e == 1) {
    pac++;

    char byfer[30];
    for (int i = 0; i < n; i++) byfer[i] = mySerial.read();

    String byte5 = String(byfer[5], DEC);

    String byte4 = String(byfer[4], DEC);
    String byte3 = String(byfer[3], DEC);
    // С1 (HEX) = 193 (DEC) // С1 успешный ответ

    String byte1 = String(byfer[1], DEC);
   

    if  (n == 7 && byte3 ==  "-63")  {  // ждем инициализхации шины

      tmstop = 1;
      for (int i = 0; i < 6; i++) mySerial.write(temp1_obd[i]);
      delay(5);

    }
    else if (n == 0 && e == 1 ) {
      for (int i = 0; i < 6; i++) mySerial.write(temp1_obd[i]);
      delay(5);
    }

    if (n == 7  && byte4 ==  "5" )       { // читаем температуру ОЖ двигателя из 12-го байта пакета
      Temp1 = (uint8_t)byfer[5];
      Temp1 = Temp1 - 40;
      for (int i = 0; i < 6; i++) mySerial.write(temp2_obd[i]);
      delay(5);

    }
    if (n == 7  && byte4 ==  "15" )
    {
      Temp2 = (uint8_t)byfer[5];
      Temp2 = Temp2 - 40;
      delay(5);

      for (int i = 0; i < 6; i++) mySerial.write(uoz_obd[i]);
      delay(5);
    }
    if (n == 7  && byte4 ==  "14" )
    {
      UOZ = (uint8_t)byfer[5];
      UOZ = UOZ / 2 - 64;
      for (int i = 0; i < 6; i++) mySerial.write(inj_obd[i]);
      delay(5);


    }
     if (n == 7  && byte4 ==  "-28" )
    {
      INJ = (uint8_t)byfer[5];
      INJ = INJ/2.0*0.256;
   //   INJ = float INJ
      for (int i = 0; i < 6; i++) mySerial.write(st_obd[i]);
      delay(5);


    }
     if (n == 7  && byte4 ==  "6" )
    {
      ST = (uint8_t)byfer[5];
      ST = (ST-128)*100/128;
   //   INJ = float INJ
      for (int i = 0; i < 6; i++) mySerial.write(dad_obd[i]);
      delay(5);


    }
    if (n == 7  && byte4 ==  "11" )
    {
      DAD = (uint8_t)byfer[5];
      e = 1;
    }
  }

}

 

Не понимаю, почему на ардуино 2560 про не видит ответ от ЭБУ, хотя сниффером я вижу и запрос и ответ(этот же код на ардуино нано работает исправно)

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

У меня несколько вопросов:

1. Зачем Вы используете СофтСериал, если на Меге есть 4 аппаратных порта?

2. Что делает строка №35?

3. Почему Вы обращаетесь с вопросами на этот форум, а не на форум Гайвера?

Igumich
Offline
Зарегистрирован: 31.03.2022

1 рекомендации на форуме при диагностики по К-линии

2 35-я строка использует пин 15 в качестве инициализации с ЭБУ (строки 82-87)

3 потому что тема диагностики затрагивалась ранее на просторах форума.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

0. Прежде всего я бы порекомендовал проверить схему: если в районе 14-го пина сигнал есть, а Мега его не видит, вероятно, нет контакта.

1. Что за рекомендации? Рекомендации в любом случае довольно странные, т.к. СофтСериал - это абсолютное зло, которое следует использовать только тогда, когда нет другого выхода. В случае с Мегой выход, очевидно, есть. Ну и, кроме того, потенциальный источник всяких несовместимостей и аппаратных конфликтов.

2. Так для чего используется 15-й пин? Для ЭБУ или для СофтСериал?

3. Гайвер - талантливый блоггер, но весьма посредственный программист. Его библиотеки изобилуют ошибками. Поэтому рекомендуется либо не использовать его библиотеки, либо разбираться с ними на форуме Гайвера.

Igumich
Offline
Зарегистрирован: 31.03.2022

andriano пишет:

0. Прежде всего я бы порекомендовал проверить схему: если в районе 14-го пина сигнал есть, а Мега его не видит, вероятно, нет контакта.

1. Что за рекомендации? Рекомендации в любом случае довольно странные, т.к. СофтСериал - это абсолютное зло, которое следует использовать только тогда, когда нет другого выхода. В случае с Мегой выход, очевидно, есть. Ну и, кроме того, потенциальный источник всяких несовместимостей и аппаратных конфликтов.

2. Так для чего используется 15-й пин? Для ЭБУ или для СофтСериал?

3. Гайвер - талантливый блоггер, но весьма посредственный программист. Его библиотеки изобилуют ошибками. Поэтому рекомендуется либо не использовать его библиотеки, либо разбираться с ними на форуме Гайвера.


15 пин используется для активации работы ЭБУ по к-линии.
Я понял что софт сериал зло, самое интересное что на Нано этот скеч работает. Да кстати на 14 и 15 Пине есть сигналы. Пины переназначал на другие, всё равно не видит ответ от ЭБУ

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

СофтСериал предназначен именно для Ардуино на базе Атмега328. И только для этого. Соответственно, на других моделях он как бы работать и не обязан.

Вы лучше скажите, Вы пробовали хоть что-то из того, что я Вам порекомендовал?

И какой результат?

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Igumich пишет:

Да кстати на 14 и 15 Пине есть сигналы. Пины переназначал на другие, всё равно не видит ответ от ЭБУ

*

2. Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).
Igumich
Offline
Зарегистрирован: 31.03.2022

ua6em пишет:

Igumich пишет:

Да кстати на 14 и 15 Пине есть сигналы. Пины переназначал на другие, всё равно не видит ответ от ЭБУ

*

2. Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 14, 15, 50, 51, 52, 53, A8 (62), A9 (63), A10 (64), A11 (65), A12 (66), A13 (67), A14 (68), A15 (69).


Да, видел ранее, поэтому и использовал 14,15. Менял на 50 и 53

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

Igumich пишет:
Да, видел ранее, поэтому и использовал 14,15. Менял на 50 и 53

надо найти источник проблемы, мне видится проблема в конфликте с библиотекой энкодера, Гайверовскую не смотрел, но другие используют PCINTы которые также использует SoftSerial

Отставить, библиотека подключена, инициализирована, но не используется, значит надо смотреть по распиновке
конфликт с библиотекой дисплея...другого не вижу...

MaksVV
Offline
Зарегистрирован: 06.08.2015

Рекомендую попробовать этот скетч , или лучше этот. Разумеется немного под свой авто поправить . Для клайн Использовать только хардсериал