Быстрый заказ, позвонить +7-978-708-85-73
Дроссель Amadeus Productions. Быстрый заказ по телефону.
(Viber, WhatsApp, Telegram)
Amadeus Productions Дроссельный узел на Lancer IX 1.6 (4G18), 2.0 (4G63) и другие моторы
Ремкомплект РХХ на Mitsubishi Lancer IX, 1.6 (4G18), MD619857, 1450A116
Облегченный маховик на 1.6 (4G18) и другие моторы
Облегченные шкивы на 1.6 (4G18) и другие моторы
One-touch или "Ленивые поворотники"

> Проект: считывание/стирание ошибок ECU + часы + немного охраны = вместо штатных часов
AZM.SU
сообщение 15.6.2011, 15:46
Сообщение #1


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 54
Регистрация: 8.5.2011
Из: Новосибирск
Вне форума
Авто: Mitsubishi Lancer IX '03 (4G13)

Репутация:   1  


Так как я крайне не люблю часы с 12-ти часовым форматом времени, то решил заменить в машине штатные часы на собственной разработки, а раз уж всё одно делать на микроконроллере, то счёл правильным дополнить функционал возможностью считывать/сбрасывать ошибки ECU и сделать возможность выдавать некий сигнал на какое либо исполнительное устройство, если обороты двигателя привысят некое число XX но до этого не проведена какая либо специальная процедура (пусть даже элементарная, например не поднесён магнит с крытому геркону).
Итого, хочется получить:
+ Часы с 24х часовым ворматом отображения времени;
+ Считывание/сброс ошибок ECU;
+ Дополнительную охранную систему, которая беспрепятственно позволяет заводить двигатель дистанционно, на прогрев, но блокировать его работу если не сняли с охраны но попытались двигаться (подняли обороты выше XX).

Пока это проект, так как устройство собрано, но работает лишь как часы, все попытки научить его соединяться с ECU были тщетны.
Девайс сейчас выглядит так:
Прикрепленное изображение
Схема (уж простите что не причёсана, ведь пока проект):
Прикрепленное изображение

Процедура иницимализации соединения с ECU которую пробовал:
CODE
Take K Line High
Pause 300ms

'Send 0x01 (00000001) at rate of 5 baud (LSB) with a Start Bit and a Stop bit

'Send Startbit
Set K line low (0)
Pause 200ms

'Now to send out 0x01
'Send out bit0
Set K line high (1)
pause 200ms
'Send out bit1
Set K line low (0)
pause 200ms
'Send out bit2
Set K line low (0)
pause 200ms
'Send out bit3
Set K line low (0)
pause 200ms
'Send out bit4
Set K line low (0)
pause 200ms
'Send out bit5
Set K line low (0)
pause 200ms
'Send out bit6
Set K line low (0)
pause 200ms
'Send out bit7
Set K line low (0)
pause 200ms

'Send Stopbit
Set K line high (1)
Pause 200ms

Switch to 15625 baud

Receive C0 55 EF 85
send FE
Receive E4 ' First Byte of ECU ID
Send FF
Receive B3 ' Second byte of ECU ID
Send FE
Receive E4 ' First Byte of ECU ID
Send FF
Receive B3 ' Second Byte of ECU ID
Send FD
Receive 20
Send FD
Receive 20
Send FD
Receive 20


Соответственно в си это выглядит у меня так:
CODE
WHdisplayClear();
WHdisplayPrint("CONNECT TO ECU..");
#asm("cli")
UBRR0H=0;
UBRR0L=0;
UCSR0B=0;
UCSR0A=0;
UCSR0C=0;
#asm("sei")

PORTD.1=0; // В обычном состоянии, когда зажигание выключено USART отключен а линию держим в состоянии "High", что бы через нагрузочный резистор на 510 ом не кушать аккумулятор и резистор не греть
delay_ms(3000); // Сделаем задержку на 3 сек, что бы этот переход с лог 1 на лог 0 не воспринимался как что то нужное

// Slow Init
PORTD.1=1;
delay_ms(300);
// Send 0x01 (00000001) at rate of 5 baud (LSB) with a Start Bit and a Stop bit
PORTD.1=0; // стартовый бит
delay_ms(200);
PORTD.1=1; // первый бит байта x01
delay_ms(200);
PORTD.1=0;
delay_ms(1400); // 7 бит =0
PORTD.1=1; // стоповый бит
delay_ms(200);
PORTD.1=0; // опустили стоповый бит

// Переключаемся на 15625 бит/сек
// USART initialization
// Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: On
// USART Transmitter: On
// USART0 Mode: Asynchronous
// USART Baud Rate: 15625
#asm("cli")
UCSR0A=0x00;
UCSR0B=0x98;
UCSR0C=0x06;
UBRR0H=0x00;
UBRR0L=0x0F;
#asm("sei")
Buffer_clear();

// начало для теста (в течение 5 сек попробуем принять что нам ответит ECU и покажем это на дисплей)
for(TmpIndexInRecivSnd=0; TmpIndexInRecivSnd<8; TmpIndexInRecivSnd++){MassivECUid[TmpIndexInRecivSnd]=0;}
TmpTimer0=0;
TmpIndexInRecivSnd=0;
TmpFlagConnectOk=0;
while (TmpTimer0<5 && TmpFlagConnectOk ==0){
if (TmpIndexInRecivSnd < 7){
TmpRecivChar=Buffer_getchar();
if (rx_buffer_empty0 ==0){
MassivECUid[TmpIndexInRecivSnd]=TmpRecivChar; TmpIndexInRecivSnd++;
}
}else{TmpFlagConnectOk=1;}
} // while (TmpTimer0<5 && TmpFlagConnectOk ==0)
if (TmpFlagConnectOk ==0){ErrorECUconnect(2,99); return;}
WHdisplayClear();
WHdisplayPrint("ECU CONNECT OK");
sprintf(OULCD_bufferStr0, "%02X%02X%02X%02X%02X%02X%02X%02X", MassivECUid[0], MassivECUid[1], MassivECUid[2], MassivECUid[3], MassivECUid[4], MassivECUid[5], MassivECUid[6], MassivECUid[7]);
WHdisplaySetKursor(0, 1);
WHdisplayPrint(OULCD_bufferStr0);
delay_ms(5000);
WHdisplayClear();
return;
// конец для теста


В общем столкнулся с проблемой: ничего ECU в ответ на такой инит не шлёт.
Изначальна информация по иниту связи взята по адресу:
http://www.myrollingroad.com/showthread.php?t=60
но там встречается и упоминание что надо слать на 5 бод не байт 01 а байт 33, в общем всё мутно.

Соответственно прошу помощи - может быть кто то может помочь осциллограммами связи с ECU, скажем снять осциллограмму с K-line при соединении какой ни будь софтины через шнурок на FT232 или так располагает ясными и чёткими сведениями о том, что за сигналы нужно передать/принять?

P.S. Если у кого какие идеи есть что ещё желательно прикрутить в готовый девайс, то озвучивайте, постараюсь уложить, по окончании работ над девайсом выложу схему причёсанную, прошивку и платку.
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post
 
Start new topic
Ответов
AZM.SU
сообщение 21.6.2011, 6:01
Сообщение #2


Начинающий Технический Маньяк
**

Группа:
Технический Маньяк
Сообщений: 54
Регистрация: 8.5.2011
Из: Новосибирск
Вне форума
Авто: Mitsubishi Lancer IX '03 (4G13)

Репутация:   1  


Кто ни будь, растолкуйте, вот здесь http://evoecu.logic.net/wiki/MUT_Requests есть запросы на получение температуры:
07 | CoolantTemp | Coolant Temp | F | x*1.8+32
10 | CoolantTempScaled | Coolant Temp Scaled | F | 1.8*x-40
какая температура всё же правильная?
По идее формула "x*1.8+32" говорит нам что ECU в ответ на этот запрос выдаёт температуру в градусах цельсия/2, ибо 2*1.8+32 аккурат 35,6F, что и равно 2 градуса цельсия.
Удивляет, что по этой формуле отрицательных величин быть не может, или возвращаемый байт надо интерпретировать как байт со знаком?

Ещё момент - по формуле:
235*[InjPulseWidthW]/1000000*[RPM]*2
где 235 это пропускная способность форсунок у движка 4G13,
получается, что в моей машине движок жрёт бензина 1,07 литра в час, однако много!
Никто не знает где можно уточнить, сколько родные форсунки льют, что бы верное число ввести?

Ну и наконец последний момент - растолкуйте мне, человеку далёкому от ДВС, по русски, что означают параметры из таблички http://evoecu.logic.net/wiki/MUT_Requests хотя бы самые важные, что бы понять за какими следить желательно, например:
27 | OctaneFlag | Octane Level -- что это?
2C | AirVol | Air Volume -- а это для чего?
ну и так далее, исключая очевидные вроде "Injector Pulse Width" (длительность открытия форсунок), "Battery Level" (напряжение на аккумуляторе) и "Engine RPM" (обороты двигателя).

По намёку Главного, создал отдельную тему, где надеюсь, соберётся со временем полнейшая информация о каждом параметре:
MUT протокол: запросы и ответы - что есть что и о чём говорит?
Go to the top of the page
¬
Вставить ник в форму быстрого ответа
+Quote Post

Сообщений в этой теме
- AZM.SU   Проект: считывание/стирание ошибок ECU + часы + немного охраны = вместо штатных часов   15.6.2011, 15:46
- - Titus   Хм, идея просто обалденная по инфе - кто-то из ре...   15.6.2011, 16:44
- - AZM.SU   Соединение с ECU проходило, просто у меня в сишнем...   15.6.2011, 16:55
- - DmitryVS   Предложение по функционалу: не по оборотам блокиро...   15.6.2011, 21:49
- - Titus   AZM.SU, давай доделывай, можно будет запустить воо...   15.6.2011, 22:11
- - AZM.SU   Цитата(DmitryVS @ 15.6.2011, 22:49) Предл...   15.6.2011, 23:08
|- - Titus   Цитата(AZM.SU @ 15.6.2011, 23:08) Коммерч...   15.6.2011, 23:30
- - Titus   Ёжик вот: http://forum.amadeus-project.com/index.p...   15.6.2011, 23:31
- - alkrymov   Обалдеть идея. Жду продолжения с нетерпением =)   16.6.2011, 6:46
- - SSh   Если поможет разобраться с обменом - проект MUTLog...   16.6.2011, 8:12
- - AZM.SU   SSh, мне попадались куски этого проекта но весь ц...   16.6.2011, 16:38
- - SSh   AZM.SU, спрашиваю просто ради интереса... Я тоже п...   16.6.2011, 17:17
- - AZM.SU   Импульсный сигнал то легко снять и обработать даже...   16.6.2011, 17:38
- - Mihail V   Интересно было бы построить подобный прибор, типа ...   16.6.2011, 17:42
- - AZM.SU   Mihail V, если ECU знает эти параметры и может их ...   16.6.2011, 19:10
- - SSh   Цитатано не на К176ИЕ3 же их делать Я, кстати, в б...   16.6.2011, 19:37
- - AZM.SU   С утра пораньше сходил к машине с девайсом. Соглас...   17.6.2011, 5:49
|- - Gummi_bear   Цитата(AZM.SU @ 17.6.2011, 6:49) Если у к...   10.1.2015, 10:12
|- - Gummi_bear   Цитата(AZM.SU @ 17.6.2011, 6:49) С утра п...   12.1.2015, 7:31
- - ByKA   В прошлом году пытался подружить атмегу с лансом. ...   17.6.2011, 9:27
- - AZM.SU   ByKA, за ссылку "Тыц" спасибо, особенно ...   17.6.2011, 10:16
- - AZM.SU   CONNECT TO ECU OK Vbat: 12.02612 Другими словами ...   18.6.2011, 4:14
- - SSh   Код ошибки имеет опред. структуру, которая определ...   18.6.2011, 6:29
- - AZM.SU   SSh, спасибо конечно, но это общие сведения и каса...   18.6.2011, 8:13
- - SSh   AZM.SU, я нигде не смог найти конкретного алгоритм...   18.6.2011, 10:33
- - AZM.SU   SSh, этот вариант я оставляю всё же на крайний слу...   18.6.2011, 10:53
- - SSh   Честно говоря - не знаю, в то время когда игрался ...   18.6.2011, 11:04
- - SSh   Вот еще что нашел относительно декодирования откли...   18.6.2011, 15:41
- - AZM.SU   Кто ни будь, растолкуйте, вот здесь http://evoecu....   21.6.2011, 6:01
|- - zhuns   Цитата(AZM.SU @ 21.6.2011, 7:01) Никто не...   19.1.2012, 15:45
- - BpyH   Всем доброго времени суток. Наткнулся на интересн...   17.2.2012, 12:00


Fast ReplyReply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 



Быстрый заказ, позвонить +7-978-708-85-73
Дроссель Amadeus Productions. Быстрый заказ по телефону.
(Viber, WhatsApp, Telegram)
Amadeus Productions Дроссельный узел на Lancer IX 1.6 (4G18), 2.0 (4G63) и другие моторы
Ремкомплект РХХ на Mitsubishi Lancer IX, 1.6 (4G18), MD619857, 1450A116
Облегченный маховик на 1.6 (4G18) и другие моторы
Облегченные шкивы на 1.6 (4G18) и другие моторы
One-touch или "Ленивые поворотники"