|
Виж темите без отговор | Виж активните теми
Дата и час: Вто Юли 28, 2026 1:37 am
Как се пише протокол за връзка
| Автор |
Съобщение |
|
Реконструктор
Ранг: Форумен бог
Регистриран на: Съб Сеп 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 |
|
 |
|
asp
Ранг: Популярен
Регистриран на: Сря Фев 22, 2006 6:27 pm Мнения: 376 Местоположение: plovdiv
|
Значи тези TxD линии за с оптрон на изхода което ще рече отворен колектор и няма как да бачкат заедно защото мастера контролра кои да му отговаря. Иначе не се бях замислял какво ще е нивото на изхода на мълчащият контролер. Ако забива в 0 линията начи ще трябва ад се модифицира май.
Иначе в момента само 2 платки не успявам да свържа но получих нужно парче инфо от темата така че остава само да дебъгвам до успех.
|
| Пет Ное 10, 2006 2:09 pm |
|
 |
|
Predator_MF
Ранг: Форумен бог
Регистриран на: Чет Окт 07, 2004 1:22 pm Мнения: 1949 Местоположение: София
|
E как да го пращам, правя функция, на която подавам параметри указател към данните, които искам да пратя, командата която да се изпълни, ID на приемника...функцията ми смята CRC и изпраща под формата на пакет (поредица от байтове с определена последователност) към приемника...примерно, имам ID = 0xDEAD , CMD = 0x80 , DATA = 0x01, 0x02, 0x03 ...викам функцията с тия параметри (е, Data е указател)...функцията ми смята CRC примерно 0xF713 и изпраща във следния вид:
в случая изпраща
Аз ли не мога да разбера въпроса ти, или ти нещо не разбра какво имам в предвид
PS: Относно динамичното алокиране, казах че мога да го напиша, ама друг е въпроса дали ще се компилира  Някъде четох скоро, че GCC за подържа dynamical memory allocation ама така и не съм пробвал...тва е ембедед, дори и да можеше става прекалено сложно...но не вярвам да не може, в ucLinux например няма ли такъв тип алокиране 
|
| Пет Ное 10, 2006 5:47 pm |
|
 |
|
¶
Ранг: Форумен бог
Регистриран на: Пет Фев 25, 2005 1:58 pm Мнения: 4585 Местоположение: US
|
Оптроните трябва така да са свързани, че да не инвертират сигнала, иначе трябва като приемеш байт да го инвертираш, което не е болка за умиране, но ако не го предвидиш, ще загубиш сума време да дебъгваш 
_________________ Ето аз дишам, работя, живея и програми пиша тъй както умея, с проца под вежди се гледаме строго и боря се с него доколкото мога....
|
| Пет Ное 10, 2006 8:02 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Това с масива ..... Рек, нали не мислиш че микроконтролерите поддържат динамични структури? Т.е. те самите няма какво да поддържат, но динамичната памет изисква вече истински RTOS не такъв дето само да превключва таскове, а в повечето случаи такъв RTOS не е нуженм при ARM вече им аи ресурси и защо а се ползва, но при малките контролери ..... в най-добрия случай някой таск манагер.
А относно темата, с оптрони може да стане, то и без оптрони може да стане, въпроса е какво точно целиш, какво рзстояние се надяваш да покриеш, при каква скорост. Реално с оптрони на 9600 имах едни пожароизвестителни централи които си комуникираха на по 4-500 м в индустриални условия, ама .... някой 485 ще ти спести много мъчения.
|
| Пет Ное 10, 2006 8:27 pm |
|
 |
|
asp
Ранг: Популярен
Регистриран на: Сря Фев 22, 2006 6:27 pm Мнения: 376 Местоположение: plovdiv
|
3 Платки в 2 кутия разтоянието е сантиметри. В предното си устройство предавах на подобно разстояние данни по SPI То беше жисоковолтово и претърпях поредица модификации и зор докато не направих паралелна шина с оптрони вместо SPI и работата заспа. Сега не е толкова високоволтово но смятам да предавам по UART и да го разуча но вно проблемът ми е в ОС то оест в начинът по който обработвам защото протоколът ми е горе долу като гореописаните принципи с малки различия които ще премахна. Смятам да постна малко кода да му се порадвате с коментари хиени 
|
| Съб Ное 11, 2006 12:34 am |
|
 |
|
the_real_maniac
Ранг: Почетен член
Регистриран на: Пет Авг 19, 2005 11:38 am Мнения: 978 Местоположение: Europe -> BG
|
 |  |  |  | ToHu написа: Това с масива ..... Рек, нали не мислиш че микроконтролерите поддържат динамични структури? Т.е. те самите няма какво да поддържат, но динамичната памет изисква вече истински RTOS не такъв дето само да превключва таскове, а в повечето случаи такъв RTOS не е нуженм при ARM вече им аи ресурси и защо а се ползва, но при малките контролери ..... в най-добрия случай някой таск манагер.
А относно темата, с оптрони може да стане, то и без оптрони може да стане, въпроса е какво точно целиш, какво рзстояние се надяваш да покриеш, при каква скорост. Реално с оптрони на 9600 имах едни пожароизвестителни централи които си комуникираха на по 4-500 м в индустриални условия, ама .... някой 485 ще ти спести много мъчения. |  |  |  |  |
питай balkana дали не поддържат -> malloc
Не, сериозно -> той имаше една интересна задачка -> беше ни разказал на мен , цецо и сашо / ако не се лъжа.
100% на мен да  Та беше успял да направи нещо такова, което вярно няма да е на 100% динамично
но в основите си , задаленя, унищожаване -> освобождаване на заделена памет.
И защо да го намя и при някои PIC18 (24 теоритично абсолютно  ). Но си прав и аз мисля така, та затова и отгоре писах към Predator-a относно масива така деклариран.
|
| Съб Ное 11, 2006 1:50 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Значи основния проблем при РС ти е нивата. Самия РС няма еактивно състояние, освен някои лаптопи които някак си пращат изходите в нещо като вискимпедансно ... а може би просто им спират тока.
Та когато на еиния изход имаш +12 а другия иска да го докара в -12 не се зане дли ще стане, т.е. няма да ти с епредват правилно сигналите. Тук вариант е да не предаваш точно така. Да си сложиш един пъл уп към +5 да речем, а оптроните да комутират към -12. Нормално и двтат ще трябва да са запушени, т.е нормалното състояние на линията е 1-ца. Така ще имаш ИЛИ, разбира се има и много други варианти, а за няколка сантиметра не ти трябва двупроводно, ако ползваш екраниран кабел спокойно може да минеш с ТТЛ нива, та дори и без него но .... Другия вариант е това което по горе беше преложено, да препредваш, нещо от сра на токен ринг.
|
| Съб Ное 11, 2006 1:51 am |
|
 |
|
asp
Ранг: Популярен
Регистриран на: Сря Фев 22, 2006 6:27 pm Мнения: 376 Местоположение: plovdiv
|
 |  |  |  | ToHu написа: Значи основния проблем при РС ти е нивата. Самия РС няма еактивно състояние, освен някои лаптопи които някак си пращат изходите в нещо като вискимпедансно ... а може би просто им спират тока. Та когато на еиния изход имаш +12 а другия иска да го докара в -12 не се зане дли ще стане, т.е. няма да ти с епредват правилно сигналите. Тук вариант е да не предаваш точно така. Да си сложиш един пъл уп към +5 да речем, а оптроните да комутират към -12. Нормално и двтат ще трябва да са запушени, т.е нормалното състояние на линията е 1-ца. Така ще имаш ИЛИ, разбира се има и много други варианти, а за няколка сантиметра не ти трябва двупроводно, ако ползваш екраниран кабел спокойно може да минеш с ТТЛ нива, та дори и без него но .... Другия вариант е това което по горе беше преложено, да препредваш, нещо от сра на токен ринг. |  |  |  |  |
Ами да за не използвам +-12 волта ами свързвам 3 микроконтролера през УАРТите им. И казва 2 слушат и отговарят.
|
| Съб Ное 11, 2006 9:34 am |
|
 |
|
asp
Ранг: Популярен
Регистриран на: Сря Фев 22, 2006 6:27 pm Мнения: 376 Местоположение: plovdiv
|
 |  |  |  | ToHu написа: Значи основния проблем при РС ти е нивата. Самия РС няма еактивно състояние, освен някои лаптопи които някак си пращат изходите в нещо като вискимпедансно ... а може би просто им спират тока. Та когато на еиния изход имаш +12 а другия иска да го докара в -12 не се зане дли ще стане, т.е. няма да ти с епредват правилно сигналите. Тук вариант е да не предаваш точно така. Да си сложиш един пъл уп към +5 да речем, а оптроните да комутират към -12. Нормално и двтат ще трябва да са запушени, т.е нормалното състояние на линията е 1-ца. Така ще имаш ИЛИ, разбира се има и много други варианти, а за няколка сантиметра не ти трябва двупроводно, ако ползваш екраниран кабел спокойно може да минеш с ТТЛ нива, та дори и без него но .... Другия вариант е това което по горе беше преложено, да препредваш, нещо от сра на токен ринг. |  |  |  |  |
Ами да за не използвам +-12 волта ами свързвам 3 микроконтролера през УАРТите им. И казва 2 слушат и отговарят като най вероятне е само единият да отговаря а другият само да слуша но по добре ще е и да отговаря защото трябва да потвърди че е чул праивлно.
|
| Съб Ное 11, 2006 9:36 am |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Да но и със самите изходи е подобно положението, те също са си пречат, н лесно можеш да се справиш с това. Ще ги държиш като входове, и когато трбва да предаваш ги правиш на изходи, вече зависи какво ползваш като контролер, на някой това може да стане само с една команда, примерно пика, едно писане в трис-а, на други с няколо, а на сигнала дето го позлвам сега ... може да се окаже це подобна манипулация обърква всичко заради приоритетната матрица. Реално може да минеш без нищо, но това са си CMOS нива които могат лесно а бъдат смутенни. В никакъв случай не ставяй входа на приемника висящ към два изхода във високоимпеансно, сложи му и резистор.
|
| Съб Ное 11, 2006 10:47 am |
|
 |
|
iko
Ранг: Минаващ
Регистриран на: Вто Мар 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 |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
Хм .. с релета .... интересно защо така е измислено. Къде са ти релеттаа на мастера и ти превклучват линиите или ?
|
| Нед Ное 12, 2006 1:43 pm |
|
 |
|
iko
Ранг: Минаващ
Регистриран на: Вто Мар 14, 2006 12:01 am Мнения: 6 Местоположение: Пловдив
|
Да, на мастера са. Той си ги превключва. Като изключим, че са бавни, други големи недостъци не виждам - работи си стабилно, което е най-важното в една индустриална среда ... голяма скорост не се търси.
|
| Нед Ное 12, 2006 2:04 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 4 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|