Отговори на тема  [ 29 мнения ]  Отиди на страница Предишна  1, 2
Как се пише протокол за връзка 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Съб Сеп 25, 2004 12:32 pm
Мнения: 8382
Местоположение: София
Мнение 
Predator_MF написа:
Рек, не пълня цялата структура, масива "data[2048]" го пълня с това което получа по канала, ако получа 1 байт, пиша само в първия елемент. Кода го извадих от един тестови проект с ARM7, с който си играя в момента, въпреки това съм го използвал на много места, просто споделих моето виждане. Мога да го напиша с динамично алокиране на памет, може и с указател към буфер, в случая съм го написал така заради улеснения в debug-а...принципно, ако искаш и 10 байта можеш да си отделиш. Сигурен съм, че има хиляди стандарти, като Modbus, I2C, S.N.A.P., ZigBee и пр...аз използвам това, което показах.


Въпроса ми беше не с какво и колко го пълниш, а как го пращаш. Обикновено данните се предават побайтово.
А това с динамичното алокиране как става в един ембедед проект? :? Това май си е отделна тема, ще я пусна по-нататък. :)


Пет Ное 10, 2006 10:02 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Фев 22, 2006 6:27 pm
Мнения: 376
Местоположение: plovdiv
Мнение 
¶ написа:
Струва ми се, че заорахте темата в неправилна посока. При това свързване, 2 TxD линии на късо към една RxD на 3 UART модула, каквито и протоколи да разпишете, каквито и буфери да използвате, протокола ще се продънва :)


Значи тези TxD линии за с оптрон на изхода което ще рече отворен колектор и няма как да бачкат заедно защото мастера контролра кои да му отговаря. Иначе не се бях замислял какво ще е нивото на изхода на мълчащият контролер. Ако забива в 0 линията начи ще трябва ад се модифицира май.
Иначе в момента само 2 платки не успявам да свържа но получих нужно парче инфо от темата така че остава само да дебъгвам до успех.


Пет Ное 10, 2006 2:09 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Окт 07, 2004 1:22 pm
Мнения: 1949
Местоположение: София
Мнение 
Реконструктор написа:
Въпроса ми беше не с какво и колко го пълниш, а как го пращаш. Обикновено данните се предават побайтово.
А това с динамичното алокиране как става в един ембедед проект? :? Това май си е отделна тема, ще я пусна по-нататък. :)


E как да го пращам, правя функция, на която подавам параметри указател към данните, които искам да пратя, командата която да се изпълни, ID на приемника...функцията ми смята CRC и изпраща под формата на пакет (поредица от байтове с определена последователност) към приемника...примерно, имам ID = 0xDEAD , CMD = 0x80 , DATA = 0x01, 0x02, 0x03 ...викам функцията с тия параметри (е, Data е указател)...функцията ми смята CRC примерно 0xF713 и изпраща във следния вид:
Код:
<ID> <CMD> <SIZE> <DATA> <CRC>

в случая изпраща
Код:
0xDE 0xAD 0x80 0x03 0x01 0x02 0x03 0xF7 0x13

Аз ли не мога да разбера въпроса ти, или ти нещо не разбра какво имам в предвид :oops:

PS: Относно динамичното алокиране, казах че мога да го напиша, ама друг е въпроса дали ще се компилира :D Някъде четох скоро, че GCC за подържа dynamical memory allocation ама така и не съм пробвал...тва е ембедед, дори и да можеше става прекалено сложно...но не вярвам да не може, в ucLinux например няма ли такъв тип алокиране :)


Пет Ное 10, 2006 5:47 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Фев 25, 2005 1:58 pm
Мнения: 4585
Местоположение: US
Мнение 
Оптроните трябва така да са свързани, че да не инвертират сигнала, иначе трябва като приемеш байт да го инвертираш, което не е болка за умиране, но ако не го предвидиш, ще загубиш сума време да дебъгваш :wink:

_________________
Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....


Пет Ное 10, 2006 8:02 pm
Профил WWW
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Това с масива ..... Рек, нали не мислиш че микроконтролерите поддържат динамични структури? Т.е. те самите няма какво да поддържат, но динамичната памет изисква вече истински RTOS не такъв дето само да превключва таскове, а в повечето случаи такъв RTOS не е нуженм при ARM вече им аи ресурси и защо а се ползва, но при малките контролери ..... в най-добрия случай някой таск манагер.

А относно темата, с оптрони може да стане, то и без оптрони може да стане, въпроса е какво точно целиш, какво рзстояние се надяваш да покриеш, при каква скорост. Реално с оптрони на 9600 имах едни пожароизвестителни централи които си комуникираха на по 4-500 м в индустриални условия, ама .... някой 485 ще ти спести много мъчения.


Пет Ное 10, 2006 8:27 pm
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Фев 22, 2006 6:27 pm
Мнения: 376
Местоположение: plovdiv
Мнение 
ToHu написа:

А относно темата, с оптрони може да стане, то и без оптрони може да стане, въпроса е какво точно целиш, какво рзстояние се надяваш да покриеш, при каква скорост. Реално с оптрони на 9600 имах едни пожароизвестителни централи които си комуникираха на по 4-500 м в индустриални условия, ама .... някой 485 ще ти спести много мъчения.

3 Платки в 2 кутия разтоянието е сантиметри. В предното си устройство предавах на подобно разстояние данни по SPI То беше жисоковолтово и претърпях поредица модификации и зор докато не направих паралелна шина с оптрони вместо SPI и работата заспа. Сега не е толкова високоволтово но смятам да предавам по UART и да го разуча но вно проблемът ми е в ОС то оест в начинът по който обработвам защото протоколът ми е горе долу като гореописаните принципи с малки различия които ще премахна. Смятам да постна малко кода да му се порадвате с коментари хиени :D


Съб Ное 11, 2006 12:34 am
Профил
Ранг: Почетен член
Ранг: Почетен член
Аватар

Регистриран на: Пет Авг 19, 2005 11:38 am
Мнения: 978
Местоположение: Europe -> BG
Мнение 
ToHu написа:
Това с масива ..... Рек, нали не мислиш че микроконтролерите поддържат динамични структури? Т.е. те самите няма какво да поддържат, но динамичната памет изисква вече истински RTOS не такъв дето само да превключва таскове, а в повечето случаи такъв RTOS не е нуженм при ARM вече им аи ресурси и защо а се ползва, но при малките контролери ..... в най-добрия случай някой таск манагер.

А относно темата, с оптрони може да стане, то и без оптрони може да стане, въпроса е какво точно целиш, какво рзстояние се надяваш да покриеш, при каква скорост. Реално с оптрони на 9600 имах едни пожароизвестителни централи които си комуникираха на по 4-500 м в индустриални условия, ама .... някой 485 ще ти спести много мъчения.


питай balkana дали не поддържат -> malloc :lol:
Не, сериозно -> той имаше една интересна задачка -> беше ни разказал на мен , цецо и сашо / ако не се лъжа.
100% на мен да :-D Та беше успял да направи нещо такова, което вярно няма да е на 100% динамично :-D
но в основите си , задаленя, унищожаване -> освобождаване на заделена памет.
И защо да го намя и при някои PIC18 (24 теоритично абсолютно :-) ). Но си прав и аз мисля така, та затова и отгоре писах към Predator-a относно масива така деклариран.

_________________
един факт :-)
Съжалявам , че исках да помогна ...


Съб Ное 11, 2006 1:50 am
Профил ICQ
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Значи основния проблем при РС ти е нивата. Самия РС няма еактивно състояние, освен някои лаптопи които някак си пращат изходите в нещо като вискимпедансно ... а може би просто им спират тока.
Та когато на еиния изход имаш +12 а другия иска да го докара в -12 не се зане дли ще стане, т.е. няма да ти с епредват правилно сигналите. Тук вариант е да не предаваш точно така. Да си сложиш един пъл уп към +5 да речем, а оптроните да комутират към -12. Нормално и двтат ще трябва да са запушени, т.е нормалното състояние на линията е 1-ца. Така ще имаш ИЛИ, разбира се има и много други варианти, а за няколка сантиметра не ти трябва двупроводно, ако ползваш екраниран кабел спокойно може да минеш с ТТЛ нива, та дори и без него но .... Другия вариант е това което по горе беше преложено, да препредваш, нещо от сра на токен ринг.


Съб Ное 11, 2006 1:51 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Фев 22, 2006 6:27 pm
Мнения: 376
Местоположение: plovdiv
Мнение 
ToHu написа:
Значи основния проблем при РС ти е нивата. Самия РС няма еактивно състояние, освен някои лаптопи които някак си пращат изходите в нещо като вискимпедансно ... а може би просто им спират тока.
Та когато на еиния изход имаш +12 а другия иска да го докара в -12 не се зане дли ще стане, т.е. няма да ти с епредват правилно сигналите. Тук вариант е да не предаваш точно така. Да си сложиш един пъл уп към +5 да речем, а оптроните да комутират към -12. Нормално и двтат ще трябва да са запушени, т.е нормалното състояние на линията е 1-ца. Така ще имаш ИЛИ, разбира се има и много други варианти, а за няколка сантиметра не ти трябва двупроводно, ако ползваш екраниран кабел спокойно може да минеш с ТТЛ нива, та дори и без него но .... Другия вариант е това което по горе беше преложено, да препредваш, нещо от сра на токен ринг.

Ами да за не използвам +-12 волта ами свързвам 3 микроконтролера през УАРТите им. И казва 2 слушат и отговарят.


Съб Ное 11, 2006 9:34 am
Профил
Ранг: Популярен
Ранг: Популярен
Аватар

Регистриран на: Сря Фев 22, 2006 6:27 pm
Мнения: 376
Местоположение: plovdiv
Мнение 
ToHu написа:
Значи основния проблем при РС ти е нивата. Самия РС няма еактивно състояние, освен някои лаптопи които някак си пращат изходите в нещо като вискимпедансно ... а може би просто им спират тока.
Та когато на еиния изход имаш +12 а другия иска да го докара в -12 не се зане дли ще стане, т.е. няма да ти с епредват правилно сигналите. Тук вариант е да не предаваш точно така. Да си сложиш един пъл уп към +5 да речем, а оптроните да комутират към -12. Нормално и двтат ще трябва да са запушени, т.е нормалното състояние на линията е 1-ца. Така ще имаш ИЛИ, разбира се има и много други варианти, а за няколка сантиметра не ти трябва двупроводно, ако ползваш екраниран кабел спокойно може да минеш с ТТЛ нива, та дори и без него но .... Другия вариант е това което по горе беше преложено, да препредваш, нещо от сра на токен ринг.

Ами да за не използвам +-12 волта ами свързвам 3 микроконтролера през УАРТите им. И казва 2 слушат и отговарят като най вероятне е само единият да отговаря а другият само да слуша но по добре ще е и да отговаря защото трябва да потвърди че е чул праивлно.


Съб Ное 11, 2006 9:36 am
Профил
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Да но и със самите изходи е подобно положението, те също са си пречат, н лесно можеш да се справиш с това. Ще ги държиш като входове, и когато трбва да предаваш ги правиш на изходи, вече зависи какво ползваш като контролер, на някой това може да стане само с една команда, примерно пика, едно писане в трис-а, на други с няколо, а на сигнала дето го позлвам сега ... може да се окаже це подобна манипулация обърква всичко заради приоритетната матрица. Реално може да минеш без нищо, но това са си CMOS нива които могат лесно а бъдат смутенни. В никакъв случай не ставяй входа на приемника висящ към два изхода във високоимпеансно, сложи му и резистор.


Съб Ное 11, 2006 10:47 am
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Мар 14, 2006 12:01 am
Мнения: 6
Местоположение: Пловдив
Мнение Комуникация
Хайде и аз да споделя опита ми при свързването на устройства по USART. Имаме централа (master) която говори с 16 зони, като във всяка зона има до 4 устройства (в моя случай ограничението е от консумацията). Физически връзката е RS-485 на 9600kbs. Каналите се превключват с релета (не съм го измислил аз, така го заварих). Софтуерния протокол е много подобен на споменатия и най-грубо е

<ID> <CMD> <DATA> <CRC>

и отговора е

<ID> <DATA> <CRC>

За удобство гледаш всички команди и отговори да са с еднаква големина (байтове), за да разбираш по-лесно кога е получена цяла команда. Като се напълни масива, проверяваш командата и CRC и ако е валидно нещото - изпълняваш, ако не - игнорираш и нулираш масива. Чак динамична памет в такъв случай не е необходима.
В моя случай ID е сериения номер на изделието и така по-лесно след това казвам (пиша на дисплея) в кое устройство има дадено събитие.


Нед Ное 12, 2006 12:40 pm
Профил ICQ WWW
Online
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Нед Сеп 26, 2004 9:21 pm
Мнения: 30686
Местоположение: София
Мнение 
Хм .. с релета .... интересно защо така е измислено. Къде са ти релеттаа на мастера и ти превклучват линиите или ?


Нед Ное 12, 2006 1:43 pm
Профил
Ранг: Минаващ
Ранг: Минаващ

Регистриран на: Вто Мар 14, 2006 12:01 am
Мнения: 6
Местоположение: Пловдив
Мнение 
ToHu написа:
Хм .. с релета .... интересно защо така е измислено. Къде са ти релеттаа на мастера и ти превклучват линиите или ?


Да, на мастера са. Той си ги превключва. Като изключим, че са бавни, други големи недостъци не виждам - работи си стабилно, което е най-важното в една индустриална среда ... голяма скорост не се търси.


Нед Ное 12, 2006 2:04 pm
Профил ICQ WWW
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 29 мнения ]  Отиди на страница Предишна  1, 2

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 4 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни