| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| AVR ISO 9141/14230-2 Interface http://mcu-bg.com/mcu_site/viewtopic.php?f=11&t=11120 |
Страница 1 от 2 |
| Автор: | vgeorgiev [ Сря Фев 20, 2013 12:52 pm ] | |||||||||||||
| Заглавие: | AVR ISO 9141/14230-2 Interface | |||||||||||||
Здравейте, Немерих в нета малко код и схема за нещо подобно на ELM327. Този стандард е наречен още KWP2000. Устройството може да се сврърже с ECU-то на колата по K или KL линия, от другата страна терминал. Прилагам кода и схемата. По-надолу имам няколко забележки и проблема, които искам да споделя с вас и да ги обсъдим. 1) Кварцовият резонатор на схемата е 4MHz, а в мейк файла е 7,372800MHz. 2) Няма готов HEX файл, за това изтеглих една приставка на Atmel Studio, за създаване на проект от мейк файл (Create Project form Makefile Extension (Beta) extension), обаче гърми компилацията със следната грешка:
3) Опитах се да направя проекта без мейк файл - само .c и .h файловете. Компилатора ми каза, че SIGNAL(SIG_OVERFLOW0) и SIGNAL(SIG_INTERRUPT0) са deprecated. тук прочетох как да ги заменя съответно с TIMER0_OVF_vect и INT0_vect. След, което успях да компилирам. 4) Функците за инициализация на протокола изобщо не се извикват никъде в кода. Става дума за char iso_5_baud_init(unsigned char addr) или char iso_fast_init(void). Благодаря предварително за всяко мнение или препоръка.
|
||||||||||||||
| Автор: | CarBeta [ Сря Фев 20, 2013 1:06 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
ELM327 е изграден с PIC18F2480. Не всичко дето лети е АТМЕЛ |
|
| Автор: | vgeorgiev [ Сря Фев 20, 2013 1:36 pm ] | |||||||||
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface | |||||||||
Знам, че е ПИК.Това, което намерих е с Atmega8. Смятам коментара ти за абослютен спам. П.С. Оправи си аватара. Правилното е 極太 |
||||||||||
| Автор: | CarBeta [ Сря Фев 20, 2013 1:59 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Прав си, написал си ...нещо подобно на ELM327 та в първия момент не схванах, че става дума за някакъв незнаен клонинг. Успех в борбата! Смятам коментара ти за абсолютен спам на моя спам. П.П. Опитай пак... поне езика да уцелиш... |
|
| Автор: | vgeorgiev [ Сря Фев 27, 2013 3:14 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Здравейте колеги, Имам малък напредък с проекта. 1. Поправих кода така, че да се компилира. 2. Направих хардуерната част. 3. Извиках инициализиращата функция. Опитах да се свържа с ECU-то.... Без успех. Бързата комуникация се инициира по следния начин: 1. 25ms ниско ниво на линията. 2. 25ms високо ниво на линията. 3. 10400bps се изпраща 0xC1, 0x33, 0xF1, 0x81 където: C1 - формат байт 33 - адреса на ECU-то F1 - адреса на тестера 81 - рекуест за старт на комуникацията Накрая се праща чек сума. В случая 66 След голямо ровене установих, че адреса на моето еку е 0А. Пробвах да инициирам комуникация с 0xC1, 0x0А, 0xF1, 0x81 3D е чек сумата в този случай. От ECU-то трябва да получа: 0x83, 0xF1, 0x0A, 0xC1, 0xYY, 0xZZ, 0xCS, където YY и ZZ са ключови думи, а CS е чек сумата. Отново неуспех. Изнервих се и вързах устройствто към един USB-TTL адаптер и пуснах терминала да видя какво ще получа. Получавам 0xC1, 0x0А, 0xF1, 0x81, 0x3D, което е правилната комбинация, но понякога получавам: 0xC1, 0x0А, 0xF1, 0x81, 0xBD. Имам проблем с последния байт, а именно чек сумата (само с него). Каквото и да подам чек сумата мърда понякога с 0x10000000. Като се има в предвид, че LSB се предава първи, а MSB последен си мисля, че понякога последняи предаден бит е грешен. Някой занимавал ли се е с подобен проект ? Нека помогне. |
|
| Автор: | rumen65 [ Сря Фев 27, 2013 3:40 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
На мен ми прилича на грешка в скоростите. Повечето USB-TTL адаптери не могат да сетват нестандартни скорости или ги сетват с по големи грешки. Пробвай да смениш на твоето устройство и на адаптера скоростта на 9600, за да се убедиш, че е от това. |
|
| Автор: | vgeorgiev [ Сря Фев 27, 2013 4:49 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
От няколко дни преглеждам кода за инициализация за грешки. Няма.... Просто е написан като за 6+. Довечера ще пробвам да се вържа отново с ECU-то. |
|
| Автор: | vgeorgiev [ Чет Фев 28, 2013 10:35 am ] | |||||||||
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface | |||||||||
Здравейте, Пробвах да настроя скоростта на 9600, както каза колегата по-горе. Наистина тогава всичко е точно. Върнах пак на 10400. Опитах да се свържа, но ЕКУ-то не реагира. Реших да видя какво изпраща Unidiag-а. 25ms ниско 25ms високо 0x81 на 10400. Въпроса ми е защо не изпраща другите байтове ?!? След това реших да видя с осцилоскоп какво става. 1) Моето устройство праща: 25ms ниско 25ms високо 0xC1, 0x33, 0xF1, 0x81 на 10400. 2) Unidiag-а: 25ms ниско 25ms високо 0x81 на 10400. |
||||||||||
| Автор: | amdatlon [ Чет Фев 28, 2013 9:26 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Е , Unidiag свързва ли се към ЕКУ-то? Ако Да, то копирай му поведението. Т.е. и ти пращай каквото праща и то. Може по стандарт протокола да е както си написал, ама троето ЕКУ да е някакъв по вид и да иска по различна инициализация. |
|
| Автор: | vgeorgiev [ Пон Мар 04, 2013 11:29 am ] | |||||||||
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface | |||||||||
Здравейте, Свързах го!!! Най - накрая. Правилната комбинация се оказа 0x81, 0x0А, 0xF1, 0x81, 0xBD. Това го видях от дебъг лога на unidiaga. Пусках тази последователност и пак не стана. Най-накрая пак с осцилоскопа и видях, че между байтовете нямам никакви паузи. Един байт се предава като: 1. един старт бит. 2. 8 дита 3. стоп бит Общо 10 бита. При скорост 10400kbs това прави 10/10400 ~ 1ms. Ето какво изкарва Unidiaga като го "затапя" (TxD<->RxD):
Както се вижда имаме по 7ms между байтовете. Тоест имаме по 6ms пауза между байтовете. Направих същия времеви интервал и най-накрая инициализирах връзката! Утре ще пробвам няколко PID команди с терминала. П.С. Намерих много добър материал за OBD командите. Ето го: http://obdexplained.hit.bg/OBD_protocols_explained.zip Разбрах формата на съобщението. Има много изключения от правилото, но ще обясня, това, което се използва от EDC17 и Unidiag-a. [Format byte] [Target] [Source] [Data]...[Data] [CS] Където: Format byte: битове XXLL LLLL. Ако XX = 10 -> физически адрес (използваният от нас) Ако XX = 11 -> функционален адрес LLLLLL определя дължината на данние и/или дали ще има байт за дължина на данните. Ако LLLLLL = 000000 - тогава имаме байт за дължина (това не е нашия случай). Ако LLLLLL е различно от 000000 тогава това число определя броя на байтовете с данни. Target: 0x0A адреса на ECU-то. Source: 0xF1 адреса на тест устройството. Data: данните, които предаваме, или приемаме CS: Чек сума. Смята се като сума на всички байтве с данни и от полученото число се взимат последните 8 бита. Пример за инициализация: 1) 25ms ниско ниво 2) 25ms високо ниво Това е еднократно (освен ако няма тайм аут от 5 сек.) 1) може да се постигне ако се прати 0x00 на 360bps. 3) 0x81 0x0A 0xF1 0x81 0xFD 0x81: 1000 0001. Имаме физическо адресиране и един байт данни 0x0A: адреса на еку-то 0xF1: адреса на тестера 0x81: Start Communication Request 0xFD: чек сума. Еку-то трябва да отговори с: 0x83 0xF1 0x0A C1 0xYY oxZZ 0xCS 0x83 от тук се вижда, че байтовете са три. 0xF1 и 0x0A са съответно адресите на тестера и еку-то. 0xC1 е подтвърждение на рекуеста 0x81. 0xXX , 0xYY са ключовата дума. С това инициализацията приключва. Успях да получа данни от ЕКУ-то. Интерфейса е 99% както на ELM327. След инициализацията трябва да се поиска startDiagnosticSession . Тук хватката е да се diagnostic mode = fa или по-фолямо число. Това са дисгностични режими на Фиат. Тук бях ударил на камък. Но всичко си го пише в документа, няколко поста по-нагоре. изпращам: 82 0a f1 10 fa получавам: 7F 10 12 . Това според документа е отказ за диагностика: subFunctionNotSupported След това може да се изискат данни от ЕКУ-то: Километраж: От Unidiag def файла: RDBLI_2000, 0x21, 0x03, "Odometer", 1, "Odometer", 1, "#scaling unsigned 3 X*1 km"; изпращам: 82 0a f1 21 03 получавам: 61 03 68 80 6E. 61 03 е отговора на 21 03 заявката. 68 80 6Е са данние. Това е 6848622 десетично число. Въпроса е как да го сметна ??? километража в момента е на 198997км. "scaling unsigned 3" scaled числата са мащабирани. Тоест би трябвало да го разделя на 3 или на 10^3, не съм сигурен, но и по двата начина не става. Напрежение на акумулатора: От Unidiag def файла: RDBLI_2000, 0x21, 0x43, "Battery voltage", 1, "Battery voltage", 1, "#scaling unsigned 2 (X*20.372 + 700)/1000 Volt"; изпращам: 820af12143 получавам: 61 43 02 44 61 43 е отговора на 21 43 заявката. 02 44 са данние. Това дава 580 десетично число. (580 *20.372 + 700)/1000 Volt = 12,51V Това е напрежение е ОК, обаче километража не е ОК. |
||||||||||
| Автор: | Cekins [ Вто Мар 12, 2013 10:35 am ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Ами простичко - изваждаш си данните на километража, караш 10 километра, пак четеш и гледаш с колко се е променило. Ще ти покаже къв точно е скейла. Ама както казваш че колата е на 198х.км. най вероятно си е втора употреба. Ако не си и първи собственик въобще не можеш да бъдеш сигурен че това са и истинските километри. Напоследък даже италианците спестяват на нашите тарикати тази работа |
|
| Автор: | vgeorgiev [ Сря Мар 13, 2013 11:46 am ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Успях да изкарам данни на LCD. Видео: [/quote]
|
|
| Автор: | bobyk [ Чет Мар 14, 2013 7:48 am ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Здравей, с каква кола тестваш? Би ли показал актуалния проект. Просто ми е любопитно, преди време си бях играл малко с тези работи но без успех. |
|
| Автор: | bobyk [ Чет Мар 14, 2013 2:45 pm ] |
| Заглавие: | Re: AVR ISO 9141/14230-2 Interface |
Мойте опити бяха на Фиат Мареа 1.6, ЕКУ Marelli IAW-49F Не съм се задълбочавал, но освен Виза-та нищо друго не иска да си говори с него. Ама ако някой ден се видя в свободно време може да си поиграя пак. |
|
| Страница 1 от 2 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|