Показано с 1 по 10 из 64

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1
    Пользователь Аватар для murano
    Регистрация
    18.01.2008
    Сообщений
    92
    Вес репутации
    235

    По умолчанию Re: OBD-II диагностика на Carduino (Arduino)

    Есть информация по подключению к nissan. Известно что подключение производится в моем случае по протоколу ISO-14230 (fast init). Использую вот такой алгоритм:
    1. на выход K-line подаю HIGH не менее 300 мс
    2. на выход K-line подаю LOW 25 мс
    3. на выход K-line подаю HIGH 25 мс
    4. далее StartCommunication на скорости 10400
    5. прием ответа
    Код HTML:
    #include <LiquidCrystal.h>
    
    #define K_IN  0 
    #define K_OUT 1 
    
    //create object to control an LCD.
    enum { LCD_WIDTH = 16, LCD_HEIGHT = 2 };
    
    LiquidCrystal lcd(7, 6, 4, 5, 2, 3);
    
    void setup()  { 
      pinMode(K_IN, INPUT); 
      pinMode(K_OUT, OUTPUT); 
    } 
    
    void loop()
    { 
      lcd.clear();
      lcd.print("ECU init..."); 
      obdConnect();
      delay(1000); 
    } 
    
    void obdConnect()
    { 
      int n,i; 
      byte buf[20];
      
      buf[0]=0x81;
      buf[1]=0x10;
      buf[2]=0xFC;
      buf[3]=0x81; 
      buf[4]=0x0E; 
      
      serial_tx_off();                          
      serial_rx_off();                              
          
      digitalWrite(K_OUT, HIGH);               
      delay(300); 
      digitalWrite(K_OUT, LOW);   
      delay(25);  
      digitalWrite(K_OUT, HIGH);     
      delay(25); 
      Serial.begin(10400);   // switch now to 10400 bauds 
      for(i=0;i<5;i++)
      {    
        Serial.write(buf[i]);
      }
      lcd.clear();
      n=Serial.available();
      if (i > 0)
      {
        for (i=0;i<n;i++)
        {
          buf[i]=Serial.read();;      
        }
        lcd.clear();
        lcd.print("OK"); 
      }
      else
      {
        lcd.clear();
        lcd.print("Error");  
      }
    } 
    
    void serial_rx_off() { 
      UCSR0B &= ~(_BV(RXEN0));   
    } 
    
    void serial_tx_off() { 
       UCSR0B &= ~(_BV(TXEN0));   
       delay(20);                                
    }
    Но ECU ответа не дает. Знающие, помогите в чем может быть проблема.
    Есть сомнения в моменте переключения на скорость 10400. Может быть проблема в самом подходе к решению задачи?

  2. #2
    Пользователь Аватар для murano
    Регистрация
    18.01.2008
    Сообщений
    92
    Вес репутации
    235

    По умолчанию Re: OBD-II диагностика на Carduino (Arduino)

    Цитата Сообщение от murano Посмотреть сообщение
    Но ECU ответа не дает.
    Проблему решил. Нужно было добавить паузу после посылки запроса и еще объединить минус arduino c минусом авто (до этого запитывал arduino с нетбука)
    Последний раз редактировалось murano; 17.10.2012 в 20:13.

  3. #3
    Местный
    Регистрация
    10.11.2010
    Сообщений
    144
    Вес репутации
    211

    По умолчанию Re: OBD-II диагностика на Carduino (Arduino)

    Цитата Сообщение от murano Посмотреть сообщение
    Проблему решил. Нужно было добавить паузу после посылки запроса и еще объединить минус arduino c минусом авто (до этого запитывал arduino с нетбука)
    В каком месте Вашего скетча забита пауза?

  4. #4
    Пользователь Аватар для murano
    Регистрация
    18.01.2008
    Сообщений
    92
    Вес репутации
    235

    По умолчанию Re: OBD-II диагностика на Carduino (Arduino)

    В представленном выше есть некоторые неточности. А паузу надо выдержать между записью запроса и приемом ответа.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •