Вверх ↑
Этот топик читают: Гость
Ответов: 188
Рейтинг: 2
#31: 2023-03-08 01:44:23 ЛС | профиль | цитата
Не стал создавать новую тему. Люди добрые подскажите пожалуйста, изучаю шину LIN и столкнулся с такой проблемой мне нужно в ком порт отправить первоначально 13 (нулевых(0000000000000)) бит потом байт синхронизации 0х55(1010101) ,а уже потом pid.
Так вот байт синхронизации отправляется без проблем и я его вижу на логическом анализаторе(все четко), но перед байтом синхронизации должны быть вот эти 13нулевых бит. Так называемое поле BREAK. через конвертеры либо отправляется каждый ноль как отдельный байт либо в шину вообще ничего не идет.

Add(MainForm,2953706,21,105)
{
Width=384
Height=315
Point(onClose)
link(onCreate,15332512:doOpen,[])
link(onClose,15332512:doClose,[])
}
Add(COMEX,15332512,420,119)
{
Port=3
Point(onDCD)
Point(onError)
link(onRead,14951341:doAdd,[(610,132)(610,251)])
link(onError,5336595:doMessage,[])
}
Add(ListBox,14951341,623,245)
{
Left=25
Top=55
Width=135
Height=190
}
Add(Message,5336595,469,147)
{
}
Add(Timer,10079860,28,245)
{
Interval=500
link(onTimer,2331623:doNext,[])
}
Add(CounterEx,2331623,154,245)
{
Max=30
Point(doReset)
link(onNext,9000179:doCompare,[])
}
Add(If_else,9000179,203,245)
{
Op2=Integer(100)
link(onTrue,14133347:doEvent1,[])
link(onFalse,5875242:doConvert,[(300,258)(300,146)])
}
Add(Hub,14133347,252,245)
{
link(onEvent1,2331623:doReset,[(278,251)(278,226)(144,226)(144,258)])
link(onEvent2,14951341:doClear,[])
}
Add(Convertor,5875242,315,140)
{
Mode=8
Digits=13
link(onResult,15332512:doWrite,[(387,146)(387,139)])
link(Data,13882260:Text,[])
}
Add(Edit,13882260,315,84)
{
Left=20
Top=20
Width=85
Text="000000000000"
DataType=2
}
Add(StreamConvertor,16100116,364,182)
{
Mode=3
Point(Data)
}



Эта осцилограмма показывает как происходит на самом деле.





а вот так вот должно быть. Поле breake неразрывно на байты. а целиком и полностью 13 бит одним словом.

Вопрос, Как это сделать посредством hiasm?

Редактировалось 2 раз(а), последний 2023-03-12 22:37:06
карма: 0

0
Ответов: 8888
Рейтинг: 823
#32: 2023-03-08 10:25:40 ЛС | профиль | цитата
zhorik5, наверное никак через СОМ -- он же работает байтами (8) плюс старт/стоп (2), плюс бит чётности, если установлен, максимум 11 периодов, а нужно минимум 15. подобрать 2 байта с нужной конфигурацией можно, но старт-стоповые биты не уберёшь же, разве что аппаратно
карма: 19

0
Ответов: 8888
Рейтинг: 823
#33: 2023-03-09 17:38:26 ЛС | профиль | цитата
zhorik5, вспомнил (давно не работал с COM портом), что порт для сохранения синхронизации в случае, когда подряд идут "0" или "1", меняет полярность. Не удержался и таки проверил. Для получения вашего BREAK можно передать символ "я" (FF в шестнадцатеричном коде), порт вместо 8 единиц передаст 8 нулей, хотя и не 11, но попробуйте, т.е. ваши команды должны начинаться с FF55хххххх. Посмотрите осциллограммы (настоящие, на настоящем осциллографе )
01.jpg
FF.jpg
карма: 19

0
Ответов: 490
Рейтинг: 162
#34: 2023-03-09 21:18:01 ЛС | профиль | цитата
zhorik5, как-то давно тоже нужно было отправлять сообщение в не стандартизированное оборудование (свой протокол) благо скорость была не большая и пакет маленький..) воспользовался (извращённым методом ) через DTR com Porta. Набросок примера.)
Пример
Осцил
zhorik5, а передача через LIN трансивер?

Редактировалось 1 раз(а), последний 2023-03-10 00:04:10
карма: 4

0
Ответов: 188
Рейтинг: 2
#35: 2023-03-10 00:10:40 ЛС | профиль | цитата
Леонид писал(а):
можно передать символ "я" (FF в шестнадцатеричном коде), порт вместо 8 единиц передаст 8 нулей, хотя и не 11

описание в протоколе гласит что длина поля BREAK должна быть от 13 нулевых бит до 30.
13 нулевых бит это минимум. Да, тут кроме как аппаратно понижать уровень сигнала.

tig-rrr писал(а):
через DTR com Porta.

после совета Леонида разве что аппаратно
я тоже об этом способе подумал, но не успел реализовать, времени не было. А сейчас зашел на форум и увидел ваш способ, значит так и будет! Буду пробовать.
Вот тут меня подтолкнули на мысль использовать DTR
https://www.radioradar.net/repair_electronic_technics/autoelectronic_repair/using_local_lin_car.html



Описание Осцилограммы

Заголовок состоит из четырех частей:

- пауза в синхронизации;

- окончание синхронизации;

- поле синхронизации;

- поле идентификатора.

Опишем каждую из них.

Пауза в синхронизации (synch break)

Представляет собой не менее 13-ти битов, пересылаемых доминантным уровнем, что в вычислительной технике расценивается как передача не менее 13-ти "нулей". Блоки LIN Slave имеют возможность настроиться на прием телеграммы, ибо в тексте самой телеграммы не может быть подобной информации и столь долгая передача только доминантного уровня подсказывает блокам, что после этого поля последуют другие.

Окончание синхронизации (synch delimiter)

Эта часть передается рецессивным уровнем (около 12 В), что соответствует передаче "единицы" и сообщает блокам LIN Slave о том, что пауза закончилась и необходимо приготовиться к синхронизации.

Поле синхронизации (synch field)
Эта часть заголовка служит для непосредственной настройки блоков LIN Slave на работу с блоком управления LIN Master. Поле состоит из последовательности доминантных и рецессивных битов, то есть последовательности "нулей" и "единиц". Таким образом синхронизируется частота, на которой блоки LIN Slave должны работать по шине LIN, принять поле идентификатора и последующие за ним данные.

Поле идентификатора

Это поле состоит из восьми бит. В первых 6-ти битах передаются адрес блока LIN Slave для его опознавания (идентификации) и количество полей для передачи данных, отведенных для ответа (от 0 до 8). Два оставшихся бита предназначены для передачи контрольной суммы. Контрольная сумма вычисляется согласно определенному алгоритму и необходима для того, чтобы избежать ошибок в передаче. При совпадении контрольной суммы оборудование считает что информация передана корректно.

Редактировалось 5 раз(а), последний 2023-03-10 00:18:03
карма: 0

0
Ответов: 490
Рейтинг: 162
#36: 2023-03-10 00:46:28 ЛС | профиль | цитата
zhorik5 писал(а):
Буду пробовать.

zhorik5, к сожалению управление через DTR, RTS медленное и не стабильное, скорости может не хватит...
карма: 4

0
Ответов: 188
Рейтинг: 2
#37: 2023-03-10 02:41:04 ЛС | профиль | цитата
tig-rrr писал(а):
к сожалению управление через DTR, RTS медленное и не стабильное, скорости может не хватит...

шина LIN тоже не резкая.
у меня получилось следующее
Add(MainForm,2953706,21,105)
{
Width=384
Height=315
Point(onClose)
link(onCreate,15332512:doOpen,[])
link(onClose,15332512:doClose,[])
}
Add(COMEX,15332512,588,119)
{
Port=1
Point(onDCD)
Point(onError)
Point(doDTR)
link(onRead,14951341:doAdd,[(778,132)(778,251)])
link(onError,5336595:doMessage,[])
}
Add(ListBox,14951341,791,245)
{
Left=25
Top=55
Width=135
Height=190
}
Add(Message,5336595,637,147)
{
}
Add(Timer,10079860,28,245)
{
Interval=300
link(onTimer,2331623:doNext,[])
}
Add(CounterEx,2331623,154,245)
{
Max=30
Point(doReset)
link(onNext,9000179:doCompare,[])
}
Add(If_else,9000179,203,245)
{
Op2=Integer(100)
link(onTrue,14133347:doEvent1,[])
link(onFalse,1512863:doEvent1,[(245,258)(245,181)])
}
Add(Hub,14133347,252,245)
{
link(onEvent1,2331623:doReset,[(278,251)(278,226)(144,226)(144,258)])
link(onEvent2,14951341:doClear,[])
}
Add(Edit,13882260,483,84)
{
Left=20
Top=20
Width=85
Text="55"
DataType=2
}
Add(StreamConvertor,13168833,483,133)
{
Mode=3
Point(Data)
link(onResult,15332512:doWrite,[])
link(Data,13882260:Text,[])
}
Add(Hub,1512863,252,175)
{
OutCount=3
link(onEvent1,3935071:doData,[(350,181)(350,195)])
link(onEvent2,11600006:doSleep,[(326,188)(326,237)])
link(onEvent3,2970458:doSleep,[(350,195)(350,146)])
}
Add(DoData,3935071,434,189)
{
Data=Integer(0)
link(onEventData,16605609:doEvent1,[])
}
Add(DoData,11325171,434,224)
{
Data=Integer(1)
link(onEventData,16605609:doEvent2,[(490,229)(522,230)(522,202)])
}
Add(Hub,16605609,532,189)
{
InCount=2
link(onEvent1,15332512:doDTR,[(562,195)(562,146)])
}
Add(Sleep,2970458,434,133)
{
Delay=50
link(onSleep,13168833:doConvert,[])
}
Add(Sleep,11600006,385,224)
{
Delay=5000
link(onSleep,11325171:doData,[])
}


в схему пришлось добавить транзистор кт3102 был просто под рукой. сигналом DTR я через транзистор подтягиваю TXD к земле. и впринцепи сигнал стал похожим на то что требуется. в реальной работе еще не проверял.Но кажется иду верной дорогой.
вот что получилось

а это установленный параметр анализ шины lin в анализаторе.

Все четко!

Редактировалось 1 раз(а), последний 2023-03-10 02:47:00
карма: 0

0
37
Сообщение
...
Прикрепленные файлы
(файлы не залиты)