Администрация форума не несёт ответственности за достоверность информации и оставляет за собой право редактировать или в особых случаях даже удалять посты без предупреждения. Спасибо за понимание.

Программирование ATMEL в BASCOM.

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Бортовой компьютер Daewoo


Бортовой компьютер Daewoo

Сообщений 1 страница 25 из 25

1

Всем привет, хочу собрать себе в машину бортовой компьютер. Схему и печатку нарисовал теперь дошло дело до программы.
Нашел подобную конструкцию с подробным описанием и исходником(правда на с)
http://cxem.net/avto/electronics/4-145.php
Вот пытаюсь в протеусе разобратся с обменом данными.
При посылки запроса в uart готовым БК запрос выглядит как положено F45601B5
Когда я пытаюсь сделать то же самое принт битом в симуляторе отражаются краказябры

Printbin &HF4
Printbin &H56
Printbin &H01
Printbin &HB5

Из исходника на с понял что этот запрос выводится через массив, как объявить нашел, а как заполнить в одну строчку не найду.
Должно ж быть типа
M(4) = [F4,56,01,B5]
Подскажите пожалуйста.

0

2

boida написал(а):

а как заполнить в одну строчку не найду.

Printbin &HF4; &H56; &H01; &HB5

0

3

sasha_1973
Спасибо, но вы привели пример отправки в порт одной строчкой, а я спрашиваю про заполнение массива.
например создаем переменную и предварительно присваиваем ей значение:
Dim A as byte
A= 37
Do

Как это выглядит с массивом
Dim A(4) as byte
A()=  ????
Do

0

4

Вызываем так
F= Lookup(a(1) , Dta)
объявляем так
Dta:                                                       
   Data &Hf4 , &H56 , &H01 , &Hb5
только зачем?

0

5

kip написал(а):

только зачем?

вот именно?

0

6

Может там строка передается?

Код:
Print "F45601B5"

0

7

kip написал(а):

F= Lookup(a(1) , Dta)
объявляем так
Dta:                                                       
   Data &Hf4 , &H56 , &H01 , &Hb5

Это не массив, это таблица



Массив:

Dim Счётчик_элементов_массива As Byte
Dim Переменная_byte(размер массива) As Byte

For Счётчик_элементов_массива = 1 to размер массива

    Printbin Переменная_byte(Счётчик_элементов_массива)

Next Счётчик_элементов_массива

0

8

sasha_1973 написал(а):

Это не массив, это таблица

Но функция Lookup работает с таблицей как с массивом, т. е. возможно чтение данных по произвольному индексу.

0

9

Mrshilov Спасибо, насчет переключения не знал, теперь отображает правильно.

Пётр написал(а):

Может там строка передается?

В первом сообщении есть ссылка на бк с исходником на с в котором я вообще ничего не понимаю.

kip написал(а):

только зачем?

Пока не представляю себе как правильно принять ответ от ЭБУ и обработать его. Может быть будет проще через массив.
Помню что в паскале когда нужно было обработать данные из файла было удобно загнать его в массив и работать с элементами.
Тут может надо числа перегнать в символы, а уж для символов куча операторов.
Буду экспериментировать!

0

10

Сегодня связал ноут и ЭБУ, программой для мониторинга компорта записал обмен.
Запрос от ПК:
F4 56 01 B5
Ответ от ЭБУ:
F4 56 01 B5 F4 92 01 26 6F 00 00 33 B9 13 00 00
FF 00 00 00 8D 00 00 80 80 00 00 93 93 C6 00 FE
FE FF FF 32 B9 76 00 00 22 23 48 12 30 00 00 AF
80 80 80 00 00 FE 00 00 00 08 01 01 00 F8 20 00
60 00 00 94

Вначале почему то повторяется запрос, длинна сообщения всегда одна.
Как это дело принять мк?

Начну с простого - отправить запрос, получить ответ, вывести на дисплей.

Как отправить запрос разобрался, как это все принять

$regfile = "m32def.dat"
$crystal = 16000000

$baud = 8200

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0

ConfigLCD ....

Dim A as Single

Do

Printbin &HF4
Printbin &H56
Printbin &H01
Printbin &HB5

Как принять все 68 байт InputBIN'ом

LCD A

Loop
end

Почему применяется Print bin и Input Bin надо принять/передать  же число в HEX есть же Input Hex и Print Hex ?

0

11

На форуме есть тема о БК через К-Line из последней программы видно что автор не использовал Input, а принимал данные по другому:
Если я правильно понял был объявлен после конфигурации сом-порта некий буфер

Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Serialin = Buffered , Size = 255

При обработки ответа брались данные из буфера и в этой же строчки преобразовывались

Spd = _rs232inbuf0(ex + 24)

В справке ни чего об этом нету, может кто то объяснит?
Спасибо.

0

12

boida написал(а):

как это все принять

кудаж проще! В хелпе всё есть

You may also specify an additional numeric parameter that specifies how many bytes will be read. This is convenient when you are filling an array.
Inputbin ar(1) , 4 ' will fill 4 bytes starting at index 1.

т.е. Вам надо Inputbin ar(1) , 68
Не забудьте их объявить

0

13

kip написал(а):

В хелпе всё есть

где этот хелп?

kip написал(а):

Вам надо Inputbin ar(1) , 68

Объясните как работает эта строчка?
Принять данные из порта в двоичной форме в массив ar в первый элемент, всего элементов 68. Так?

Вот набросал, что не так?

Код

$regfile = "m16def.dat"
$crystal = 16000000
$baud = 8200

Config Lcdpin = Pin , Db4 = Portb.4 , Db5 = Portb.5 , Db6 = Portb.6 , Db7 = Portb.7 , E = Portb.3 , Rs = Portb.2
Config Lcd = 20 * 4
Config Com1 = Dummy , Synchrone = 0 , Parity = None , Stopbits = 1 , Databits = 8 , Clockpol = 0
Config Pind.2 = Input                                       'кнопка 1
Config Pind.3 = Input                                       ' кнопка 2
Config Portd.4 = Output                                     'светодиод

Dim Dat(68) As Byte
Dim A As Byte
Dim Q As Bit

Cursor Off
Initlcd
Cls
Q = 0
Do
If Pind.2 = 0 Then
Set Portd.2
Locate 1 , 7
Lcd ">>CONNECT>>"
Printbin &HF4
Printbin &H56
Printbin &H01
Printbin &HB5
Waitms 1                                                    'нужна ли тут задержка?


'/////////////////////
Inputbin Dat(1) , 68
'/////////////////////


Cls
Locate 1 , 6
Lcd ">>COMPLETE>>"
Reset Portd.2
Q = 1
End If
If Portd.3 = 0 Then
If Q = 1 Then
Cls
For A = 1 To 68
Lcd Dat(a) ; " "
Next A
Else
Cls
Locate 1 , 3
Lcd "Please connect"
End If
End If
Loop
End

Отредактировано boida (2016-01-25 21:45:44)

0

14

boida написал(а):

где этот хелп?

В папке с баскомом.
Запускаете баском и жмете на F1.

boida написал(а):

Объясните как работает эта строчка?

http://avrhelp.mcselec.com/inputbin.htm

0

15

Пётр
Спасибо изучаю, гляньте код.

0

16

Правильно ли я понимаю, через K-Line нельзя получить данные с датчика расхода топлива?

0

17

Датчика расхода топлива в этой машине нет но его можно вычислить по данным из эбу чем я и займусь.
Если вы имели веду датчик уровня топлива то да эта информация не поступает в ЭБУ и не передается в К-Линию.

0

18

Я тоже делаю бортовой компьютер на баскоме, и пока собираю информацию о том, что полезного можно отображать на дисплее помимо оборотов двигателя. Хотелось бы отображать текущий расход топлива, как это умеет делать ВАЗовский бортовой компьютер, а также подсчитывать общий расход, например, с момента заправки.

0

19

beginer
Это все мелочи- математика. мне главное принять данные и уметь вытягивать нужные мне фрагменты. Холодно сейчас не какого желания мерзнуть. У тебя есть наработки, как принимаешь ответ от эбу. на практике пробовал?

0

20

На данный момент куплен OBD2 разъём, разведена плата МК+дисплей+обвес. Ищу информацию по протоколу и жду тепла, чтобы попробовать.

0

21

Может попробовать от обратного? Прикупить на али вот такое Ссылка,оно есть c BT,WiFi,USB.Подцепиться в самом устройстве к uart и посмотреть что там шлет эбу.К этому устройству идут в комплекте проги для андроида и компа,если есть умение,тоже можно попробовать реверснуть.

0

22

Sergik07
Реверс занятие очень трудоемкое, легче купить готовый бк.
Мне повезло нашел статью с хорошим описанием и сам протокол с формулами нашел в интернете.
Подключился к машине через ком монитор все согласно протоколу :).
beginer
что за машина?

0

23

В конструкции БК применил дисплей 132Х32 на контроллере ST7565P для его работы применяю
библиотеку glcdeadogm128x6.lbx . Текст и картинки выводятся но есть неудобство.
По команде Cls стирается область в 128 точек в ширину, а у меня 132 в итоге кусок остается справа. Как это исправить? Заполнять пробелами очень медленно.

Отредактировано boida (2016-02-01 23:36:29)

0

24

Mrshilov
Спасибо попробую, а одноименный файл с расширением lbx не нужен?

$regfile = "m32def.dat"
$crystal = 16000000
$lib "glcdeadogm132x32.lib"
$include "Font6x8.font"
Config Graphlcd = 128 * 64eadogm , Cs1 = Portd.0 , A0 = Portd.2 , Si = Portd.4 , Sclk = Portd.3 , Rst = Portd.1
Glcdcmd 35
Do
Cls
Setfont Font6x8
Lcdat 1 , 1 , "Test"
Wait 2
Loop
End

В сторке конфигурации LCD писать
Config Graphlcd = 128 * 64eadogm ,
или
Config Graphlcd = 132 * 32eadogm , ??

0

25

Благодарю!

0


Вы здесь » Программирование ATMEL в BASCOM. » Вопросы - ответы » Бортовой компьютер Daewoo