Перейти к содержанию

inmixxx

Members
  • Постов

    20
  • Зарегистрирован

  • Посещение

Информация о inmixxx

  • День рождения 14.12.1994

Контакты

  • Skype
    inmixxx
  • ICQ
    564907075

Информация

  • Пол
    Мужчина
  • Город
    Ульяновск

Электроника

  • Стаж в электронике
    3-5 лет
  • Сфера радиоэлектроники
    Усилители НЧ, питание
  • Оборудование
    Мультиметр, Паяльник.

Достижения inmixxx

Новичок

Новичок (1/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Ребят есть такой вопрос. Имеется автомобиль ваз 2112 и ЭБУ январь 7.2+. Хочу собрать бортовой компьютер в панель приборов на atmega 32. общатся будут по к-линии по протоколу kwp2000. Программу пытаюсь писать на bascom avr. На сайте есть БК с дисплеем от сименса, но я в моем городке не смог найти такой телефон. Облазил все мастерские по ремонту телефонов. Там есть исходники на С, но я в С я не разбираюсь, хотел бы выводить данные на дисплее 1602 (можно и 0802) нашел исходники в просторах интернета в Bascom. Но по этому коду не хочет подключаться. Адаптер к-линии сделан на LM193. Вставляю код: $regfile = "m128def.dat" '$crystal = 16000000 $crystal = 8000000 $hwstack = 512 $swstack = 512 $framesize = 512 $baud = 10400 ' объявы порта Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0 Config Serialin = Buffered , Size = 255 ', Bytematch = All Declare Sub Ecu_data Config Pinf.0 = Input Config Pinf.1 = Input Config Timer2 = Timer , Prescale = 8 On Ovf2 Tim2_isr Enable Interrupts ' переменные работы мотора Dim Temp As Byte Dim Alf As Single Dim Throttle As Byte Dim Frx As Byte Dim Wfrx As Byte Dim Acc As Single Dim Tinj As Single Dim Tinjcorr As Single Dim Rpm As Word Dim Frpm As Word Dim Wrpm As Word Dim Uoz As Word Dim Spd As Byte ' till here ' байт смещения данных в буфере от заголовка Dim Ex As Byte ' доп.счёчики на таймере, пока без имян Dim E_cntr1 As Word Dim E_cntr2 As Word Dim E_cntr3 As Word Dim E_cntr4 As Word Dim E_cntr5 As Byte Dim Ecu_mode As Byte '0 - очистка '1 - тупняк '2 - соединяемся '3 - соединились ' режим чтения из ЭБУ Dim Readmode As Byte '0 - запрос характеристики работы '1 - чтение ответа характеристики работы '2 - запрос ошибок '3 - чтение ошибок Dim Recieved_data As Bit Enable Timer2 Start Timer2 Do 'Incr Counter_z ' режим 0 - посылка разрыва связи, резерв, борьюа с глюками и отваливаниями связи If Ecu_mode = 0 Then If E_cntr2 => 3000 Then Gosub _spc E_cntr2 = 0 Ecu_mode = 1 ' Readmode = 1 End If End If ' режим 1 - посыл старткомма If Ecu_mode = 1 Then If E_cntr2 => 3000 Then Gosub _stc E_cntr2 = 0 ' Ecu_mode = 1 ' Readmode = 1 End If End If ' опрос принятого If E_cntr2 => 1000 Then Recieved_data = 0 Call Ecu_data End If ' если связь установлена If Ecu_mode = 2 Then ' запросы 1 - перменные, 2 - ошибки, 3 - запрос сброса ошибок If E_cntr1 >= 1000 Then 'If E_cntr1 >= 1500 Then Clear Serialin Select Case Readmode Case 0 Case 1 Gosub _rdbli Case 2 Gosub _rdtcbs Case 3 Gosub _cdi End Select E_cntr1 = 0 E_cntr2 = 0 End If End If ' кнопка переключение режимов чтения If Pind.7 = 1 Then Waitms 500 If Pind.7 = 1 Then Incr Readmode If Readmode > 3 Then Readmode = 1 End If End If Loop Conversion: ' DOC +4 ' ex - длина запроса, задаётся при посылке запроса ' температура ' толкаем в переменные то, что вычитали из буфера с положительным ответом по Temp = _rs232inbuf0(ex + 15) - 40 ' Е2 - соотношение воздух/топливо, Р83 - коэфф. коррекции CO Alf = _rs232inbuf0(ex + 16) Alf = Alf + 128 Alf = Alf * 14.7 Alf = Alf / 256 ' дроссель Throttle = _rs232inbuf0(ex + 17) ' положение РХХ Frx = _rs232inbuf0(ex + 20) ' желаемое положение РХХ Wfrx = _rs232inbuf0(ex + 21) ' напряжение бортсети Acc = _rs232inbuf0(ex + 25) * 0.05 Acc = Acc + 5.2 ' коэффициент коррекции времени впрыска Tinjcorr = _rs232inbuf0(ex + 22) + 128 Tinjcorr = Tinjcorr / 256 ' обороты Rpm = _rs232inbuf0(ex + 18) * 40 ' обороты на холостом ходу Frpm = _rs232inbuf0(ex + 19) * 10 ' желаемые обороты ХХ Wrpm = _rs232inbuf0(ex + 26) * 10 ' угол опережения зажигания Uoz = _rs232inbuf0(ex + 23) / 2 ' скорость Spd = _rs232inbuf0(ex + 24) ' время впрыска Tinj = _rs232inbuf0(ex + 29) ' * 256 'Tinj = Tinj + _rs232inbuf0(ex + 29) Return Sub Ecu_data: If _rs232inbuf0(ex + 4) = &HC1 Then ' если ответ C1 - То подключились Locate 1 , 1 Lcd "CN" Ecu_mode = 2 Clear Serialin Recieved_data = 1 Readmode = 1 End If If _rs232inbuf0(ex + 5) = &H61 Then ' если ответ 61 - То данные по переменным пошли Locate 1 , 1 Lcd "RD" ' Ecu_mode = 1 Gosub Conversion Recieved_data = 1 ' Clear Serialin End If If _rs232inbuf0(ex + 4) = &H58 Then ' если ответ 58 - То данные по ошибкам пошли Locate 1 , 1 Lcd "RE" ' Ecu_mode = 1 Recieved_data = 1 Clear Serialin End If If _rs232inbuf0(ex + 4) = &H54 Then ' если ответ 54 - То ошибки сброшены Locate 1 , 1 Lcd "CE" Readmode = 1 Recieved_data = 1 Clear Serialin End If If _rs232inbuf0(ex + 4) = &H7F Then ' если ответ 78 - То отказ, будем рестартить Locate 1 , 1 Lcd "ER" ' Ecu_mode = 0 ' Readmode = 0 Recieved_data = 1 Clear Serialin End If If Recieved_data = 0 Then Locate 1 , 1 Lcd "Data0" E_cntr1 = 0 Ecu_mode = 0 Clear Serialin End If End Sub ' чтение ошибок ' 88 F1 10 58 02 04 43 E0 14 26 E0 24 ' 02 - количество, E0 - разделители _rdtcbs: Ex = 8 Printbin &H84 Printbin &H10 Printbin &HF1 Printbin &H18 Printbin &H00 Printbin &H00 Printbin &H00 Printbin &H9D Return ' старткомм _stc: ' ответ на стартком 83 F1 10 C1 6B 8F 3F Ex = 5 Printbin &H81 Printbin &H10 Printbin &HF1 Printbin &H81 Printbin &H03 Return ' стопкомм _spc: 'Ответ на стопком 81 F1 10 C2 44 / C2 = 7F - отказ Ex = 5 Printbin &H81 Printbin &H10 Printbin &HF1 Printbin &H82 Printbin &H04 Return ' переменные работы мотора ' 80 f1 10 24 _rdbli: Ex = 6 Printbin &H82 Printbin &H10 Printbin &HF1 Printbin &H21 Printbin &H01 Printbin &HA5 Return ' сброс ошибок _cdi: Ex = 7 Printbin &H83 Printbin &H10 Printbin &HF1 Printbin &H14 Printbin &H00 Printbin &H00 Printbin &H98 Return Tim2_isr: Portg.1 = Not Portg.1 Portg.1 = Not Portg.1 Incr E_cntr1 Incr E_cntr2 Incr E_cntr3 Incr E_cntr4 Incr E_cntr5 Return Обмен БК (бортового компьютера ,ноутбука AVR-контроллера и проч.) начинается так см картинку startCommunication БК startCommunication ЭБУ __________>300mC___________ <------25mC------------><-------25mc---------> _______________ ___ |____________________| ||||||||||| ||||||||||||| Интервары 25мС с точностью +-1мс ! После подключения к диагностической линии (у меня раз'ем ODB-II) надо выждать не менее 0.3 сек потом подать "0"-на 25мС потом "1"-на 25мС и тут-же (+-1мС) такую посылку HEX кодов ----> 81 10 f1 81 03 которая означает СООБЩЕНИЕ начала соединения с ЭБУ "startCommunication". Эбу в ответ присылает свое СООБЩЕНИЕ (у меня такое)---> 83 f1 10 c1 6b 8f 3f -называется положительный ответ Подкорректировав код под Дисплей1602 выводил данные ecudata выводит Data0, мне кажется что чтото с таймерами не так, вместо таймеров вставлял waitms10, то БК то подключается, то нет, т.е. работает с перебоями. Заранее спасибо, кому не сложно было взглянуть на код
×
×
  • Создать...