This is just another OBD2 solution for monitoring the sensors in a verhicle. It supports the K-line OBD2 serial communication between a verhicle and a microcontroller. This K-line communication is also known as ISO 9141-2 or ISO 14230-4 (also known as Keyword Protocol 2000 or KWP). Both ISO's are almost similar. This solution differs from the rest that is low cost (for less than 10 euro!!). It is low cost in the way that you don't need an arduino, raspberry pi or smart phone. Just a microcontroller and LCD display so you can use your smartphone for other purposes.

Main features:

  • Shows verhicle engine load, temperature, speed and RPM on a LCD display
  • Optically displaying the engine load via a LED by changing the intensity using the microcontroller PWM module
  • When temperature exceeds 93 degrees a buzzer will be triggered
  • A watchdog will quard communication problems between microcontroller and verhicle ECU

To do:

  • Display stored diagnostic trouble codes in mode 0x03 (routine is included but I have to wait till my car gets troubles)
  • Clear trouble codes / Malfunction indicator lamp (MIL) / Check engine light (routine is included but untested)
  • Support "fast init"

It is tested with a Citroen C1 gasoline (2013) and VW Touran gasoline (2003). Probably it will work for a Peugeot 107 and Toyota Aygo of 2013 as well since they are technically identical. From what I read on the internet there are many flavours on K-line around so there is a possibility it will not suit your car. Maybe some changes are needed to make it work. The source code is provided so you can investigate and change when needed. Maybe you can help extending this list of cars to help others!

Have fun!

Found this site where you can check if your car supports K-line:


Step 1: Parts

1 x OBD2 Connector 16 Pin Male

1 x Microchip 16f886 microcontroller

1 x 16x2 LCD HD44780 or compatible

1 x BC547 or 2N3940 transistor

1 x LM7805 1A regulator

1 x 330nF ceramic capacitor

1 x 100nF ceramic capacitor

1 x 510 Ohm resistor

1 x 2.2K Ohm resistor

1 x 47K Ohm resistor

1 x 33K Ohm resistor

1 x 100 Ohm resistor, optional (for blue led, please use appropriate resistor for other colors)

1 x LED, optional

2 x 10K Ohm trim resistor

1 x Buzzer 5 volt (< 20mA), optional

Step 2: K-line Initialization and Response

Both ISO's 9141 and 14230 knows a 5 baud initialization sequence. The microcontroller must start this init by transmitting byte 0x33 to the verhicle at 5 bits per second. The total transmit time for transmitting byte 0x33 takes about 2 seconds. After this initialization it is expected to continue communicating at 10k4 baud.

ISO 9141-2 initialization response:

For ISO 9141-2 the verhicle ECU will respond with synchronization byte 0x55. After this, the verhicle will respond with key bytes 0x08 and 0x08 or 0x96 and 0x96. The sync byte with key bytes of the verhicle must be acknowledged by the microcontroller by inverting the second key byte. This will end the initialization part of ISO 9141-2.

ISO 14230 initialization response:

The response of ISO 14230 is slightly different. The verhicle ECU will also respond with synchronization byte 0x55. Only the key bytes are different. In case of a VW Touran of 2003 the key bytes are 0xef and 0x8f. Also here the second key byte must be acknowledged by the microcontroller by inverting it.

Step 3: Stimulus Response

After the initialization process it is possible to submit a request to the verhicle ECU. A request is a sequence of bytes where adressing, a mode, a PID and a checksum is present. The following are example requests:

For ISO 9141-2 this sequence of bytes is 0x68, 0x6a, 0xf1, 0x01, 0x0d and 0xd1.

For ISO 14230 this sequence of bytes is 0xc2, 0x33, 0xf1, 0x01, 0x0d and 0xf4.

The first three bytes are for addressing. The fourth is the mode field. The fifth byte is the data field with the PID and the last byte is the checksum.

In this example mode 1 is used. This mode will show "current data" as how it is at this moment. This mode is perfect for displaying actual information. The data field contains the PID. In this case 0x0d which is the verhicle speed. The checksum is the sum of the bytes with mod 256. See this link for a list of PIDs:


The response is almost similar. The data field reflects actual data which will probably change every request. The following are example responses with 0x00 as data (which is verhicle speed 0).

For ISO 9141-2 : 0x48, 0x6b, 0x10, 0x41, 0x0d, 0x00, 0x11.

For ISO 14230 : 0x83, 0xf1, 0x10, 0x41, 0x0d, 0x00, 0xd2.

This OBD2 solution displays the calculated engine load (PID 0x04), engine
coolant temperature (PID 0x05), verhicle speed (PID 0x0d) and engine RPM (PID 0x0c) on a LCD display.

Step 4: Schematic

The verhicle will supply the circuit with 12 volt via pins 5 and 16 of the ODB2 connector. The voltage regulator will create 5 volt out of this for the microcontroller and LCD.

K-line signals of pin 7 will be converted to appropriate levels via an interface of resistors and a transistor.

The two trimm resistors are used to control the contrast and backlight of the LCD.

On port RC1 you can connect a LED (optional). With help of the PWM module of the microcontroller the intensity of the LED will be controlled by the calculated engine load (PID 0x04).

On port RC7 you can connect a buzzer (optional). When the engine coolant temperature (PID 0x05) exceeds the 93 degrees this port will be enabled.

Step 5: Code

The Microchip XLCD peripheral routines with some small changes are used for the external LCD module (less blurry result with fast changing data compared with other LCD routines).

A routine for displaying and clearing stored diagnostic trouble codes is included. This can be initiated by pressing the switch for 2 seconds. This routine is untested and will most probably not work. Feel free to try if you have a car with trouble codes.

The 5 baud init is also called "slow init". There is also a "fast init". The fast init does not use the 5 baud init as descibed above but starts directly at 10.4 kbps. A StartCommunication request 0xc1, 0x33, 0xf1, 0x81, 0x66 must be submitted prior submitting requests. I don't have a car which supports this fast init so maybe someone can help including it in this code to help others.

You can easily change the code if you want to have miles instead of km.

For simplicity no checksum is checked.

The code can be imported in Microchip MPLAB X IDE v3.20 with compiler XC8 v1.36. For programming the 16f886 microcontroller you need a programmer like pickit2 or pickit3.

A hex file is included in case you want to program the 16f886 with your own programming software/device.

Step 6: Have Fun

I hope you like this project. Have lots of fun building it and monitoring your verhicle!

If you are interested but not able to buid yourself just contact me. Maybe I can help with a programmed microcontroller or complete kit.

"This most beautiful system of the sun, planets and comets,
could only proceed from the counsel and dominion
of an intelligent and powerful Being."

~ Isaac Newton, Principia
<p>Hi,</p><p>Could i use a 16f628 chip? </p>
<p>no</p><p>it have low capaCITY OF flash memory </p>
<p>Thanks milani, today i bought 16f886 and will try it.</p>
thanks mr richard<br>i am sure that sagem s2000 suppurts two protocol of can and iso9141<br>but in this ecu i have connected to kline port....<br>.............<br>what is it the name of ecu you connected them??<br>...................<br>dear mr richard<br>what is it your country and city...??<br><br>
Hi Milani,<br><br>I use it in my Citroen C1 of 2013. I also tried VW Touran of 2003.<br><br>Richard
What is it the name and version of your car ecu???
mr richard<br>i am tested the sagem s2000 with elm327obd china kit<br>in the menu of the android aplication writed iso14230-4kwp fast<br>Correct you, be<br>it seems that protocol of my ecu iso14230-4kwp fast and not iso9141<br>any way..<br>can this source connect to iso14230-4kwp???<br>what is it need to change??
Hi Milani,<br><br>If it is KWP 2000 fast (as described in ISO 14230-4) then you can try deleting lines 79-89, 97, 100-126 and 128-154. This will remove the 5 baud initialization sequence which is not needed when KWP 2000 fast is used. I did not test this since I don't have a car which support this protocol. Can you help me by deleting the lines and test on your ecu?<br><br>Kind regards,<br><br>Richard
Hi mr richard..<br>Thanks for helping<br>I have accsee to some ecu with some protocol<br>I want developed this project and<br>Set fast init of kwp2000 with this circuits<br>I will change the code from 5 baud init to fast init of kwp2000 ... and test on my ecu....<br>I know that citroen xantia supoorted slow init of kwp2000<br>Iwant to test on this car
that is logic analayzer sch<br>and show rx and tx channel pulse..<br><br>http://www.sharefile.ir/uploads/1496334699.jpg<br>..............................<br>dear mr richard<br>i am repairman of car ecu and new modern car electronic system ....<br>i am working on ecu for example<br>sagem s2000 - pl4 - sl96 ,...<br>valeo j35 j34<br>magnet marrelli ecu<br>siemens ecu<br>bosch ecu for example bosch7.3 and 5.2 and 7971<br>and ....................<br>i am sure that wiring from pic circuits to ecu is ok<br>i am testing all of the ecu on desk<br>for testing ecu i have powered up ecu and powered on key switch wire of ecu...<br>and connected kline of the ecu circuits...<br>......................<br>i have a professional diagnostic system for connecting to the ecu...<br>i have connected on desk to ecu with my diag successfully<br>...............<br>but problem is<br>why this circuits dont connect???<br>....................<br><br>i dont have access to video...<br>where is it???<br>...........................<br>
Hi Milani,<br><br>You are an expert of car ecu. According ISO 9141/14230 specifications the ecu should respond to the 5 baud initialization sequence (0x33). The ecu should respond with 0x55 at 10k4 baud. If there is no response it means that ecu is not according ISO 9141 or still an error somewhere. I read that sagem s2000 can be for Citroen C3 which can be CAN and KWP fast protocols. Can this be the problem?<br><br>Kind regards,<br>Richard
<p>hi</p><p>i try and searched</p><p>this ecu protocol is kwp2000 or iso14230 fast</p><p>now question </p><p>can i change the source for this protocol??</p><p>which one of ecu supported iso9141 protocols???</p><p>are have have refrence about ecu supported protocols??</p>
hi mr richard<br>i am created new project in the mplab ....source code compiling is ok<br>but is not any diffrenc from pic16f886 and 883 ...<br>but the cpacity of flashmemory of the 886 is large<br>any way...<br>in the my circuit all of the wire or componet is ok<br>i have tested all of the componet...<br>and the transitor circuits for trans or reciving is ok....<br>i have connected pin rx and tx of micro to logic analayzer<br>micro send some code...<br>but dont recive any code from ecu....<br>it have send this logic bit...in rc6 port<br> PORTCbits.RC6 = 1;<br> __delay_ms(200);<br> PORTCbits.RC6 = 0;<br> __delay_ms(400);<br> PORTCbits.RC6 = 1;<br> __delay_ms(400);<br> PORTCbits.RC6 = 0;<br> __delay_ms(400);<br> PORTCbits.RC6 = 1;<br> __delay_ms(400);<br> PORTCbits.RC6 = 0;<br> RCSTAbits.SPEN = 1; //enable eusart<br> RCSTAbits.CREN = 1; //receive enable<br> WDTCONbits.SWDTEN = 1;<br><br> int iso;<br> while (RCIF == 0);<br><br>i have debuging the source code....when program going to while (RCIF == 0);<br>program rseseted and begin......Regularly repeats<br>and program in the while (RCIF == 0); stoped and repeated from begin of source code...<br>it means that micro is ok and send command code.... but not recive any code from ecu...<br>circuit and micro is ok<br>i have tested with sagem s2000 and sagem sl96 citroen and peugeot ecu<br>the protocol of sagem s2000 ecu is iso9141.....<br>i have uploaded pic of my project and logic analayzer...<br><br>http://www.sharefile.ir/uploads/1496254799.jpg<br><br>
Hi Milani,<br><br>I see the initialization sequence in the picture you are referring to. It looks correct but the timing is not visible. Can you check if the timing is 5 bits per second as described in step 2? Just to be sure since you are using not original program software. Also visible is the watchdog of your microcontroller since there is no response from ecu in time. So far so good. I see that you are not connecting this project to a car but to the device of the car where the ecu is located. Then you must know that ecu will only respond when the car is started (please see the video before step 1). Not sure if you can achieve this state since it is not connected to a car. Anyhow, you need to focus on ecu or circuit between microcontroller and ecu. Do you have better picture of circuit?<br><br>Kind regards,<br>Richard<br><br>
picture of seted fusebit in tnm5000 universal programmer<br>http://www.sharefile.ir/uploads/1496321901.jpg<br><br>picture of pulse of rx and tx pin pic16f883<br>http://www.sharefile.ir/uploads/1496295021.jpg<br>in the picture show that micro send code but not recive any code from ecu...<br>
<p>now question is it......why buzzer songed continously???</p><p>but i dont conncet to ecu ......</p><p>it seems that micro have no action....</p><p>the circuits is ok..........doesnt have problem....</p>
Hi Milani,<br><br>What exactly makes you conclude that &quot;micro have no action&quot;?<br>Can you share your pbc? Is it possible to show how everything is connected?<br><br>Regards,<br><br>Richard
hi<br>i made this circuits<br>i use pic16f883 instead of pic16f886<br>i have programmed hex file to micro controller with universal programmer<br>and in fusebit select internal rc clock<br>i have made this circuits...<br>when powerup the circuits<br>in lcd show &quot;start init&quot;<br>but buzzer songed continously<br>dont show parametr<br>it have conncted kline of to sagem s2000 citroen ecu with iso9141<br><br>please help me<br>what is it the problem????
Hi Milani,<br><br>The hex file you found in step 5 is for the 16f886, not 16f883. I think the code does not fit in a 16f883 because the program memory is too small. Anyhow, I read in your comment that you managed to program the 16f883 and see &quot;start init&quot; on the LCD. Are you able to verify the communication between the 16f883 and ecu? You should see the same as described in step 2 and 3.<br><br>Kind regards,<br>Richard
<p>Maybe an idea to create a new project in mplabx, import the code and compile for the 16f883 instead of 16f886. If it compiles correctly it is better to use this hex file instead of the one in step 5.</p>
<p>i have changed pic16f886 to 883 in file and propertis menu of the mplab </p><p>and copmiled very successfully.</p><p>the compiler doesnt have problem and create hex file</p><p>its ok</p><p>in programmer i have write to flash memory of micro and verify successfully....</p><p>it means that code without change copied to the micro memory</p><p>........</p>
Hi<br>How are you<br>Thank you for helping<br>I havr added all of c file to project..<br>And compile it<br>Compiled seccessfully ...<br>I want to draw pcb and test circuits...<br>And change the pid of prarnetr <br>Thanks very mach.....<br>
<p>hi</p><p>how are you mr <a href="https://www.instructables.com/member/RichardvdK" rel="nofollow">RichardvdK<br></a></p><p>i have uploaded my mplab project...</p><p>please download ... and help me..</p><p><a href="http://www.sharefile.ir/uploads/1494715294.rar" rel="nofollow">this link..<br></a></p><p><a href="http://www.sharefile.ir/uploads/1494715294.rar" rel="nofollow">http://www.sharefile.ir/uploads/1494715294.rar<br></a></p><p>my erorr is :</p><p>all off the text</p><p>make -f nbproject/Makefile-default.mk SUBPROJECTS= .build-conf<br>make[1]: Entering directory 'E:/cheap obd pic/cheap obd pic.X'<br>make -f nbproject/Makefile-default.mk dist/default/production/cheap_obd_pic.X.production.hex<br>make[2]: Entering directory 'E:/cheap obd pic/cheap obd pic.X'<br>&quot;D:\Program Files\Microchip\xc8\v1.42\bin\xc8.exe&quot; --pass1 --chip=16F886 -Q -G --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto &quot;--errformat=%f:%l: error: (%n) %s&quot; &quot;--warnformat=%f:%l: warning: (%n) %s&quot; &quot;--msgformat=%f:%l: advisory: (%n) %s&quot; -obuild/default/production/main.p1 main.c <br>main.c:108: warning: (373) implicit signed to unsigned conversion<br>main.c:220: warning: (373) implicit signed to unsigned conversion<br>main.c:223: warning: (373) implicit signed to unsigned conversion<br>main.c:227: warning: (373) implicit signed to unsigned conversion<br>main.c:232: warning: (373) implicit signed to unsigned conversion<br>main.c:260: warning: (373) implicit signed to unsigned conversion<br>main.c:263: warning: (373) implicit signed to unsigned conversion<br>main.c:290: warning: (373) implicit signed to unsigned conversion<br>main.c:316: warning: (373) implicit signed to unsigned conversion<br>main.c:319: warning: (373) implicit signed to unsigned conversion<br>main.c:323: warning: (373) implicit signed to unsigned conversion<br>main.c:328: warning: (373) implicit signed to unsigned conversion<br>main.c:356: warning: (373) implicit signed to unsigned conversion<br>main.c:359: warning: (373) implicit signed to unsigned conversion<br>main.c:362: warning: (359) illegal conversion between pointer types<br>pointer to unsigned char -&gt; pointer to const unsigned char<br>main.c:407: warning: (373) implicit signed to unsigned conversion<br>main.c:410: warning: (373) implicit signed to unsigned conversion<br>main.c:411: warning: (373) implicit signed to unsigned conversion<br>main.c:412: warning: (373) implicit signed to unsigned conversion<br>main.c:413: warning: (373) implicit signed to unsigned conversion<br>main.c:414: warning: (373) implicit signed to unsigned conversion<br>main.c:416: warning: (358) illegal conversion of pointer to integer<br>main.c:418: warning: (358) illegal conversion of pointer to integer<br>main.c:420: warning: (358) illegal conversion of pointer to integer<br>main.c:422: warning: (358) illegal conversion of pointer to integer<br>main.c:424: warning: (358) illegal conversion of pointer to integer<br>main.c:436: warning: (359) illegal conversion between pointer types<br>pointer to unsigned char -&gt; pointer to const unsigned char<br>main.c:487: warning: (373) implicit signed to unsigned conversion<br>&quot;D:\Program Files\Microchip\xc8\v1.42\bin\xc8.exe&quot; --chip=16F886 -G -mdist/default/production/cheap_obd_pic.X.production.map --double=24 --float=24 --opt=default,+asm,+asmfile,-speed,+space,-debug --addrqual=ignore --mode=free -P -N255 --warn=-3 --asmlist --summary=default,-psect,-class,+mem,-hex,-file --output=default,-inhx032 --runtime=default,+clear,+init,-keep,-no_startup,-osccal,-resetbits,-download,-stackcall,+clib --output=-mcof,+elf:multilocs --stack=compiled:auto:auto &quot;--errformat=%f:%l: error: (%n) %s&quot; &quot;--warnformat=%f:%l: warning: (%n) %s&quot; &quot;--msgformat=%f:%l: advisory: (%n) %s&quot; --memorysummary dist/default/production/memoryfile.xml -odist/default/production/cheap_obd_pic.X.production.elf build/default/production/main.p1 <br>Microchip MPLAB XC8 C Compiler (Free Mode) V1.42<br>Build date: Apr 12 2017<br>Part Support Version: 1.42<br>Copyright (C) 2017 Microchip Technology Inc.<br>License type: Node Configuration<br><br>:: warning: (1273) Omniscient Code Generation not available in Free mode<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:538: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:541: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:757: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:805: warning: (359) illegal conversion between pointer types<br>pointer to unsigned char -&gt; pointer to const unsigned char<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1259: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1305: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1306: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1316: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1317: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1489: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1500: warning: (373) implicit signed to unsigned conversion<br>D:\Program Files\Microchip\xc8\v1.42\sources\common\doprnt.c:1524: warning: (373) implicit signed to unsigned conversion<br>main.c:500: warning: (520) function &quot;_DelayFor18TCY&quot; is never called<br>main.c:506: warning: (520) function &quot;_DelayPORXLCD&quot; is never called<br>main.c:512: warning: (520) function &quot;_DelayXLCD&quot; is never called<br>main.c:410: warning: (759) expression generates no code<br>main.c:411: warning: (759) expression generates no code<br>main.c:412: warning: (759) expression generates no code<br>main.c:413: warning: (759) expression generates no code<br>main.c:414: warning: (759) expression generates no code<br>:0: error: (500) undefined symbols:<br> _WriteCmdXLCD(dist/default/production\cheap_obd_pic.X.production.obj) _putrsXLCD(dist/default/production\cheap_obd_pic.X.production.obj) _OpenXLCD(dist/default/production\cheap_obd_pic.X.production.obj) _BusyXLCD(dist/default/production\cheap_obd_pic.X.production.obj) <br>(908) exit status = 1<br>nbproject/Makefile-default.mk:119: recipe for target 'dist/default/production/cheap_obd_pic.X.production.hex' failed<br>make[2]: Leaving directory 'E:/cheap obd pic/cheap obd pic.X'<br>nbproject/Makefile-default.mk:78: recipe for target '.build-conf' failed<br>make[1]: Leaving directory 'E:/cheap obd pic/cheap obd pic.X'<br>nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed<br>make[2]: *** [dist/default/production/cheap_obd_pic.X.production.hex] Error 1<br>make[1]: *** [.build-conf] Error 2<br>make: *** [.build-impl] Error 2<br><br>BUILD FAILED (exit value 2, total time: 14s)</p><p></p>
<p>Hi Milani,</p><p>You are missing the .c files or the xlcd.h file in your project hence you get errors that symbols are missing. I attached an image to this reply of how the .c and .h files must be in mplabx. Please verify.</p><p>All the best,</p><p>Richard</p>
thanks for your simple or cheap obd project<br>i install mplab &amp; xc8 software.....<br>i want to compile or change the source code for other pid codes....<br>but<br>your code have erorss..<br>please uplod all of mplab project in the zip file.........<br>i added all of the headers and c source file to project ... but i have erorr with complieing this project............ or makeing hex file<br>thanks...
Hi Milani,<br><br>What are the errors you get?<br><br>Regards,<br><br>Richard
Hi<br>Your uplouded file is not in the mplab project pack<br>But<br>I have created mplab project and added your file in the my project....<br>But i have some erorr about compiling the project...<br>I will send to you my error...<br>But<br>Please upload all of the project in the one pack on a zip file... <br>Thanks<br>Bahram.milani
<p>hi</p><p>how are you</p><p>i want to copy c source code in ccs compiler</p><p>please help me</p><p>i have sim eror</p><p>what is it xc.h header file ???</p>
Hi Milani,<br><br>The code in this project is for MPLABX IDE with XC8 compiler where xc.h is present. Please use this compiler as described in step 5.<br><br>Kind regards,<br><br>Richard
<p>what is it the internal clock of pic micro controller???</p>
It is set to 8MHz here:<br><br>OSCCONbits.IRCF = 0b111;
<p>Hello Richard,<br><br>I'm having problems with my Citro&euml;n C-Elys&eacute;e, it's not returning any values to my computer. I'm using Arduino Due with sn65hvd230 waveshare transceiver as shown in the picture. <br>Do you have an idea on what is the protocol that the C-Elys&eacute;e uses and what can be causing this problem (hard and soft). Thanks in advance</p>
Hi BadisS,<br><br>For some reason I can't find the C-Elys&eacute;e in the list. Also not here:<br><br>https://www.blafusel.de/obd/obd2_scanned.php<br><br>You have a beautiful car but without information what protocol to use it will be difficult. Can someone else help BadisS with the information?<br><br>Richard
<p>Hi Richard, can you explain what you mean by </p><p>The sync byte with key bytes of the verhicle must be acknowledged by the microcontroller by inverting the second key byte. How does the microcontroller do this?</p>
Hi Geomeo,<br><br>It is this part in the code:<br><br>TXREG = ~key2;<br><br>Here the second key byte is inverted and send to the ECU of the car.<br><br>Kind regards,<br>Richard
<p>HI,</p><p>what about if K-line only use 3PIN (Power, K-Line and Ground)?</p><p>in your diagram use pin 15 and 7,</p><p>please help</p><p>thx</p>
Hi, the pins 5, 7 and 16 are used for K-line. Please see the schematic.<br><br>Take care!
<p>hi richard pls help me with hex file can u send to me</p>
<p>Hi, a hex file is included now in step 5. I didn't test it so please try and feel free to reply if something is not ok.</p><p>Enjoy!</p>
please help how to write file on pic ihave pickit 2 how to convert file to. hex<br>or if you can give me hex file<br>realy want it quickly pls
Hi,<br><br>Just press the &quot;Build Main Project&quot; button and the hex file will be created in the &quot;dist&quot; folder of your project. This hex file can be imported in your pickit2 programmer application and after setting the config bits you can put it in the microcontroller.<br><br>Take care,<br><br>Richard
pls richardvdk give me hex file <br>icant creat with this program always give me error
<p>How did you know what are the first three bytes to send to the ECU? And if someone is able to convert on the arduino? I do not have prgramator to the PIC. THX for Help.</p>
Hi,<br><br>These first 3 bytes are described in the ISO 9141-2 and ISO 14230-4 documentation. These can be obtained from www.iso.org.<br><br>Have a nice day
<p>I have a problem with my Peugeot ISO 14230-4. If i ask the ECU using the terminal for anything then seys NO DATA. I have only one parameter as the answer - RMS. I suppose that ELM327 asks in a standard way. And it is possible that the first 3 bytes are different because the data is not read</p>
<p>Did you initiate the 5 baud initialization sequence prior sending the bytes you show above? Without this initialization sequence there will be no response (in my case).</p>
<p>I built a terminal - listened ELM327. But ... see the photo <a href="http://www.elektroda.pl/rtvforum/viewtopic.php?p=16062430#16062430" rel="nofollow"> http://www.elektroda.pl/rtvforum/viewtopic.php?p=...</a></p><p>Srting from ELM</p><p>FFFFFFC133FFFFFFF13E23FFFFFF81FFFFFFF1107E0</p>
<p>I want use original interface. Connected and listen what he says. Use ArduMega + LCD serial10400 . Now i must wait for the ISO bus converter. I write when i done.</p>
<p>www.iso.org want 38CHF this is to much for me.</p>
Really cool!

About This Instructable




Bio: idea + energy = instructable
More by RichardvdK:Cheap OBD2 communications on K-line (ISO 9141-2 and ISO 14230-4) 
Add instructable to: