Реклама

Collapse

Съобщение

Collapse
No announcement yet.

Fiat Live Data Reader [Bosch EDC15 ECU протокол ?]

Collapse
X
 
  • Филтър
  • Час
  • Покажи
Clear All
new posts

    #91
    Излишно е да искаш старт на диагностиката. И без това ЕКУ-то ще я откаже.Направо започвай да рекуестваш диагностични данни. 0x21 0xXX.Описание има и в ПДФ-а и в .def файловете на UniDiag.Имай в предвид, чe K линията е инвертирана в iso.hОтносно кода ти.Гледам, че конфигурираш USART-a... Тази библиотека не го използва. Използва бит-банг усарт.Ако искаш си преправи iso.h така, че да работи с usat-a.Имай в предвид:1. Кварца ти трябва да е на честота кратна на 10400 (което е почти невъзможно)2. Трябва да помислиш как ще направип INIT таймингите през USART-а.3. Пращай fast init докато получиш правилен отговор. Обикновенно се връзва от първия път, но след старт на мотора ще ти откаже няколко пъти.4. CS не са оборотите, а чек сумата, която съм сметнал от съобщението. Трябва да съвпада с тази от съобщението.5. Формата на рекуеста малко е грешен:написал си : {0x81, 0x0A, 0xF1, 0x10, 0x81}в този случай е 0х82 - защото пращаш два байта данни.0x82, 0x0A, 0xF1, 0x21, 0x30, CSТрябва да получиш0x84, 0xF1, 0x0A, 0x61, 0x30, 0xXX, 0xXX, CS4 означава 4 байта данни. 0х61 е правилен отговор на 0х21.0х30 е отговора на въпроса 0х30следват два байта с оборотите.Прочети хубаво първата страница на темата.След инициализация може да пропуснеш предаването на адресите 0xf1 0x0a (0x10).ако не ги изпращаш тогава съощенията изглеждат така:RQ: 0x02, 0x21, 0x30, CSRSP: 0x04, 0x61, 0x30, 0xXX, 0xXX, CSЖелателно е да имаш осцилоскоп (ако ще и през звуковата карта) или логически анализатор.Таймингите са много критични.Вързал си LCD С хардуера до къде си ?
    04/2000 Fiat Brava 1.9 JTD 105+

    Коментар


      #92
      Като за начало ти предлагам да процедираш така:Направи си хардуера. После си напиши програма, която само да слуша какво минава по К линията.Не изпращай нищо. Единственото, което правиш е каквото прочетеш да го дисплейваш на LCD-то или го пусни към лаптопа прес uart-a (ако е останал свободен).Пускаш UniDiag-a или FES-а и подслушваш.Така ще си си сигурен, че четеш правилно от К линията.
      04/2000 Fiat Brava 1.9 JTD 105+

      Коментар


        #93
        Първи опит - неуспешен. Имам 2 предположения:1. Проблем с хардуера2. Проблем с таймингитеСледвам тази схема за K-Line:Транзисторите, които ползвам са: Един BC556B и 3 BC548B. Резисторите са като в схемата.Този Activity Led премигва за кратко всеки път като захраня платката и си седи угаснал след това :D.Ползвам кристал и съм сетнал фюзовете за 16MHz. F_CPU ми е 16000000UL. Мисля, че кода е ок.
        Код:
        int main(void){    lcd_init();    lcd_clrscr();    wdt_disable();  // make sure the watchdog is not running    UBRRH = UART_BAUDRATE>>8;       // set baud rate    UBRRL = UART_BAUDRATE;    UCSRB =((1<<RXCIE)|(1<<RXEN)|(1<<TXEN));    // enable Rx & Tx, enable Rx interrupt    UCSRC =((1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0));  // config USART; 8N1    serial_msg_pntr = (signed char *)&serial_msg_buf[0];  // init serial msg pointer      iso_glob.uart_n_baud = N_10400;  // set baud rate to 10,4kBaud        iso_hardware_init();  // init ISO hardware    iso_uart_init();  // init ISO software UART        ident();  // send identification to terminal    serial_putc(’>’);  // send initial command prompt      sei();  // enable interrupts    int iSuccess = 0;    int n=0;    while(iSuccess == 0 && n < 100) {        lcd_clrscr();        if(iso_fast_init() == ISO_RETURN_CODE_OK) {            lcd_puts("ECU Connection:");            lcd_goto(40);            lcd_puts("Successful!");            iSuccess = 1;        } else {            lcd_puts("ECU Connection:");            lcd_goto(40);            lcd_puts("Error!");        }        _delay_ms(100);        n++;    }    _delay_ms(500);    if(iSuccess == 1) {        //unsigned char diagmode[5] = {0x81, 0x0A, 0xF1, 0x10, 0x81};        sei();        unsigned char return_code;        //return_code = iso_send_msg(diagmode, sizeof(diagmode));        unsigned char time_count = 0;        unsigned char msg_buff[260];        timeout_multiplier = 0x19;        int db, cs, res, i;        /*if(return_code == ISO_RETURN_CODE_OK) {            do            {                iso_recv_msg(msg_buff);                 ++time_count;                   db = msg_buff[0] & FMT_MSG_LENGTH;                cs = 0;                for(i = 0; i < db + 1; i++) {                    cs += msg_buff[i];                }                if ((msg_buff[db + 1]==cs) && (msg_buff[0]!=0)) {                    res = 1;                } else {                    res = 0;                }            } while((time_count < timeout_multiplier) && (res == 0));         }*/        unsigned char rpm_request[5] = {0x82, 0x0A, 0xF1, 0x21, 0x30};        int rpm1=0, rpm2=0;        char text[16], rpm_str1[5], rpm_str2[5];        while(1) {            return_code = iso_send_msg(rpm_request, sizeof(rpm_request));            time_count = 0;            db=0;            cs=0;            res=0;            if(return_code == ISO_RETURN_CODE_OK) {                do                {                    iso_recv_msg(msg_buff);                     ++time_count;                       db = msg_buff[0] & FMT_MSG_LENGTH;                    cs = 0;                    for(i = 0; i < db + 1; i++) {                        cs += msg_buff[i];                    }                    if ((msg_buff[db + 1]==cs) && (msg_buff[0]!=0)) {                        res = 1;                    } else {                        res = 0;                    }                } while((time_count < timeout_multiplier) && (res == 0));                 if(msg_buff[3] == 0x61) {                    rpm1 = msg_buff[5]; // RDBLI_2000, 0x21, 0x30, "Engine speed", 1, "Engine speed", 1, "#scaling unsigned 2 X*1 RPM";                    rpm2 = msg_buff[6];                    lcd_clrscr();                    strcpy(text, "RPM: ");                    itoa(rpm1, rpm_str1, 10);                    itoa(rpm2, rpm_str2, 10);                    strcat(text, rpm_str1);                    strcat(text, " ");                    strcat(text, rpm_str2);                    lcd_puts(text);                    _delay_ms(150);                }            }        }    }    return 0;}
        Между другото без да съм дал на контакт, без вкаран ключ дори, като си пъхна кабелите в обд порта платката се захранва и дисплея светва, което ме смущава защото джаджата няма да се изключва и ще ми точи акумулатора.Чакам си новата батерия за лаптопа, че със старата докато зареди в колата и вече е свършила :D. Какво е USB устройството, с което се свързваш с платката?Съжалявам ако досаждам с глупави въпроси, но съм просто любител на електрониката и от време на време си правя по някой хоби проект. Повече ме влече програмирането, но за да си завърша този проект трябват и двете. :D

        Коментар


          #94
          Виж в по-горния ми пост няколкото забележки.Използваш УСАРТ-а на контролера, а iso.h не работи с него!Схемата ти е права, не инвертираща. Тогава разкарай тези редове:
          Код:
          #define	ISO_K_LINE_OUT_NEG	// define K line output level inverted by hardware#define	ISO_L_LINE_OUT_NEG	// define L line output level inverted by hardware#define	ISO_K_LINE_IN_NEG		// define K line input level inverted by hardware
          Къде си свързал транзисторите ?УСБ-то е програматора, другото е УСБ-УСАРТ за дебъг.Платката работи и без контакт, защото има постоянни 12 волта на обд буксата. Като го направиш да работи, вземи ток след контактния ключ.
          04/2000 Fiat Brava 1.9 JTD 105+

          Коментар


            #95
            Когато коментирам:
            Код:
            //#define    ISO_K_LINE_OUT_NEG    // define K line output level inverted by hardware//#define    ISO_L_LINE_OUT_NEG    // define L line output level inverted by hardware//#define    ISO_K_LINE_IN_NEG        // define K line input level inverted by hardware
            Програмата засича на iso_fast_init() и не ми показва нищо на екрана. Установих, че засичането идва от този ред:iso_wait_idle(); // wait for bus idle timeКогато ги откоментирам тръгва, но не ме свързва с ECU-то.

            Коментар


              #96
              Ето един монтиран в Мареа.
              04/2000 Fiat Brava 1.9 JTD 105+

              Коментар


                #97
                Здравейте,Преди два дни един колега ми даде едно устройство за поправка. Нещо вързал кабелите наопаки...Ремонтирах го и го пуснах за тест. Колегата не е ресетвал трип А от 01/02/2014. Навъртял е 5531 km, 497 lt, 432 h. Много готино се почувствах Ето и клип: https://www.youtube.com/watch?v=tS3FNF9UVUQ
                04/2000 Fiat Brava 1.9 JTD 105+

                Коментар


                  #98
                  vgeorgiev написа:
                  Здравейте,Преди два дни един колега ми даде едно устройство за поправка. Нещо вързал кабелите наопаки...Ремонтирах го и го пуснах за тест. Колегата не е ресетвал трип А от 01/02/2014. Навъртял е 5531 km, 497 lt, 432 h. Много готино се почувствах
                  Е затова си струва човек да си размърда мозъка!Не винаги парите са най-важни!
                  OVB X18XE1 седан+ГИ

                  Коментар

                  Working...
                  X