Ну да, ты же коды в порт кидаешь, вот их ASCII в симуляции и видишь.
10400 выставляется без проблем:
Config Com1 = 10400 , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Бортовой комп через K-line....
Сообщений 31 страница 55 из 55
Поделиться312013-06-06 08:15:57
Поделиться322013-06-06 14:02:01
Хорошо.
Допустим я передал PRINTBINом 82 10 F1 21 01 A5 (запрос параметров) в ответ мне пришло 80 F1 10 26 61 01 3B…… бла бла бла , как мне собрать то что пришло , INPUTBINом или INPUTа хватит?
Поделиться332013-06-24 15:02:10
Здравствуйте всем. А на индикатор для модинга приборной доски в идеале бы выводить не толко обороты но и скорость и температуру. Останется только уровень топлива например как здесь http://www.club.azlk.ru/index.php3?mode … p;id=55565 получилась бы прекрасная альтернатива дорогим платным приборкам , для тех кто умеет паять.
Поделиться342014-02-03 18:27:50
доброго времени суток ! объяснити пожалуста как получить данные inputbin-ом,ответ эбу по длине на разные запросы разный...
Поделиться352014-03-10 16:43:38
Доброго времени суток!
Вторые сутки не сплю
может кто подскажет как на C# реализовать:
исходя из того что ТxD это PORTА.1
porta.1 = 1
waitms 300
porta.1 = 0
waitms 25
porta.1 = 0
waitms 25
Адаптер спаял, проверил, рабочий.
Сторонняя программа (ECU Editor) работает. Ошибки сбрасывает, картинку показывает 
Надо дальше двигаться
а я застрял 
Не обязательно на С# можно на C подобном языке. Или на ассемблере.
Заранее спасибо!!!!!!
Отредактировано Panda (2014-03-10 18:01:34)
Поделиться362014-03-11 07:42:12
Вторые сутки не сплю может кто подскажет как на C# реализовать:
Это вопрос к Radan
Чего не на Bascom?
Отредактировано sasha_1973 (2014-03-11 07:43:43)
Поделиться372014-03-11 09:31:37
Вторые сутки не сплю может кто подскажет как на C# реализовать:
исходя из того что ТxD это PORTА.1
Как то так.
#include <avr/io.h>
#include <util/delay.h>
#define PORT_A PORTA
#define DDR_A DDRA
#define BIT_A (1<<PA1)
int main(void)
{
DDRA |= BIT_A;
while (1)
{
PORT_A ^= BIT_A;
_delay_ms(300);
PORT_A ^= BIT_A;
_delay_ms(50);
}
}Отредактировано sva-don (2014-03-11 09:32:20)
Поделиться382014-03-11 10:13:15
Не пойму я, каким боком C# относится к внутреннему коду микроконтроллера?
Поделиться392014-03-11 11:24:51
и к сайту/бэйсику
Поделиться402014-03-11 11:54:26
Прошу прощение, если не туда написал.
И в мыслях не было обидеть коллег пишущих на бэйсик 
Это единственное место в инете, где упоминается что на TxD необходимо перед StartComunication подать такие сигналы.
Осциллограф тоже это показал.
Подумал, что все мы люди..... как то так 
Спасибо за ответ, буду пробовать с этой стороны.
Поделиться412014-03-11 12:14:25
Давайте более полную информацию.
У вас есть программа на C#, с помощью которой вы хотите общаться с контроллером?
И для начала вам нужно подать определённую логику на TxD, чтобы он вошёл в режим?
Поделиться422014-03-11 12:14:45
Главное надо понять, какие сигналы получить, а на каком языке дальше писать - вторично. По этому изначально возник вопрос о "некорректности" подхода к ресурсу. 
Поделиться432014-03-11 13:16:20
Давайте более полную информацию.
У вас есть программа на C#, с помощью которой вы хотите общаться с контроллером?
Собрал K-line адаптер на микросхеме FT232RL
Проверил, подключил к диагностическому разъему своего мотоцикла. Подключил осциллограф, Запустил программу ECUEditor.
Наблюдаю картину, перед тем как отправить последовательность байт 81 10 f1 81 03 это приложение выставляет 0 на 25 м.с., потом 1-у на 25 мс., и только потом последовательность на коммуникацию.
Начал разбираться и попал к вам 
И для начала вам нужно подать определённую логику на TxD, чтобы он вошёл в режим?
Да, именно так.
Споткнулся на том что. Общение организовал через виртуальный com порт
port4 = new SerialPort(myPortSelect, 10400, Parity.None, 8, StopBits.One);
port4.Write(data_write, 0, data_write.Length);
Так вот, если просто послать 0 как байт, а потом sleep на 25 мс, то на TxD наблюдаю именно передачу байта т.е _____--_____
Как заставить сигнал продержаться 25 мс не понимаю пока.
Подозреваю что проблема в стоповом бите. Вот изучаю потихоньку вопрос......
Прежде чем к адаптеру K-Line, прикрутить AVR (это в планах), мне необходимо разобраться в сути вопроса, на простом примере.
Еще раз извините, если не в той ветке.
Отредактировано Panda (2014-03-11 13:17:38)
Поделиться442014-03-11 14:00:33
Попробуйте напрямую дёргать TxD, не используя Write.
Я думаю это можно сделать через любую библиотеку для управления портами IO, предварительно узнав адрес TxD.
А уже затем предавать данные с помощью Write.
Поделиться452014-08-18 18:01:00
Кто может поделится рабочим исходным кодом инициалзации, обмена данными по k-line?
Поделиться462014-09-16 04:44:31
Кто может поделится рабочим исходным кодом инициалзации, обмена данными по k-line?
тебе для какого авто надо-то?
есть куски экспериментов с ВАЗовским KWP-2000, алгоритм такой: шлём статком, ждём ответ, нету - повторяем через определённое время. если ошибка - посылаем разрыв связи и повторяем попытку соединиться. если есть положительный ответ - посылаем rli ass, читаем переменные методом выколупывания нужных байтов из буфера, после этого чистим буфер и повторяем запрос. контрольную сумму тут не считал, код пробный. время между попытками по таймеру, ибо проц в реальном времени занимается графикой, задержками делать нельзя. куча переменных нарастающих по таймеру E_cntr это скажем так - универсальные "счётчики". код - бардак, но в сути разобраться можно. исходник комбинации приборов пока выкладывать не буду, ибо проект пока что коммерческий )
из интересного - адов древний ВОШЬ 1.5.4 вывозит практически любую наглость во временных пределах, отвечает на команды через 100мс после предыдущей, инициализация тупо "статком", никаких закидонов с 0-1 перед инитом ему не надо. января под руками сейчас нету. протокол тут Е2, у Е3 ответ на RLI_ASS длиннее, но это всё можно вычитать в документухе по KWP2000 от ВАЗа.
вообще суть проекта - приборка на дешманской меге с диагностикой, цветным дисплеем и стрелочными указателями на шаговиках. коммер делал на stm32f103 и qvga дисплее, с дурью ARMa просто сказка, после него это повторить на AVR - это как пытаться подбить танк чайной ложкой, в принципе возможно, но выглядит смешно
$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 , 18
'Lcd "CN"
Ecu_mode = 2
Clear Serialin
Recieved_data = 1
Readmode = 1
End If
If _rs232inbuf0(ex + 5) = &H61 Then ' если ответ 61 - То данные по переменным пошли
'Locate 1 , 18
'Lcd "RD"
' Ecu_mode = 1
Gosub Conversion
Recieved_data = 1 '
Clear Serialin
End If
If _rs232inbuf0(ex + 4) = &H58 Then ' если ответ 58 - То данные по ошибкам пошли
'Locate 1 , 18
'Lcd "RE"
' Ecu_mode = 1
Recieved_data = 1
Clear Serialin
End If
If _rs232inbuf0(ex + 4) = &H54 Then ' если ответ 54 - То ошибки сброшены
'Locate 1 , 18
'Lcd "CE"
Readmode = 1
Recieved_data = 1
Clear Serialin
End If
If _rs232inbuf0(ex + 4) = &H7F Then ' если ответ 78 - То отказ, будем рестартить
'Locate 1 , 18
'Lcd "ER"
' Ecu_mode = 0
' Readmode = 0
Recieved_data = 1
Clear Serialin
End If
If Recieved_data = 0 Then
'Locate 1 , 18
'Lcd "D0"
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Отредактировано phantom36 (2014-09-16 04:59:47)
Поделиться472015-05-11 19:22:24
http://autoelectric.by/index.php/progra … vag-kw1281
Вот разобрался с инициализацией на VAG Bosch дизель 1.9 проверено работает. Шнурок - простой без контроллера K-line
На C# Sleep работает нормально
Отредактировано sanyagans (2015-05-11 19:23:56)
Поделиться482018-01-24 13:48:40
День добрый) Делаю (пытаюсь) бортКомп. Из-за нехватки знаний, застрял в написании кода. А именно не могу понять, как вытащить нужный байт параметра. То есть : принтбином отправил "запрос" в эбу. Инпутбином принял "ответ" который находится в массиве "М". Ответ представляет из себя последовательные байты
"&hb2 &hf1 &h44 &h58 &h00 &h2f &h45 &h23 &h75 &h55".
Как мне из этого вытащить 9ый байт (&h75) чтобы потом с ним работать??? (Это байт напряжения борт сети по формуле х/10=__вольт, то есть hex75-> dec117/10=11,7вольт) может оператором FOR как-то можно это сделать или ещё чем???
На форуме есть код товарища, но не могу понять куда смотреть.
UART программный (на 13ой тиньке ноги настроил).
Спасибо.
Поделиться492018-01-24 14:00:26
Инпутбином принял "ответ" который находится в массиве "М". Ответ представляет из себя последовательные байты "&hb2 &hf1 &h44 &h58 &h00 &h2f &h45 &h23 &h75 &h55". Как мне из этого вытащить 9ый байт (&h75)
А просто обратиться к этому массиву не получается ?
Dim напряжение_сырое As Byte
напряжение_сырое = М(9) ' Берем из указанной ячейки массива нужный байт
...
преобразуем в нужную форму...
Поделиться502018-01-24 14:47:50
Или
Dim m(10) as byte
Dim U_bat overlay m+9
А вааще чё за проект?
Чо за ЭБУ и чо за авто???
Поделиться512018-01-24 19:46:08
Большое спасибо за советы, я попробую))) простой проект сделать бк для опеля, чтобы показывал напряжение, температуру и уровень топлива, так как стрелки на приборке показывают не точно
Поделиться522018-01-24 20:29:46
простой проект сделать бк для опеля, чтобы показывал напряжение, температуру и уровень топлива, так как стрелки на приборке показывают не точно
"Стрелки" откуда информацию берут ?
Поделиться532018-01-24 22:03:43
Как раз с опеля
Поржал 
Поделиться542018-01-24 22:06:07
Как раз с опеля Поржал
Поржать я тоже люблю... 
Изменим формулировку...
Панель приборов считывает информацию каким путем ?
Напрямую от датчиков или от ЭБУ (если он есть) ?
Модель и возраст авто не определены... 
Отредактировано Nord (2018-01-24 22:07:19)
Поделиться552018-01-25 12:54:52
Вангую::: этот проект никогда не встанет на ноги.