| Автор |
Съобщение |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
 Помощ за RS485 протокол?
Не съм работил до сега с този протокол, по точно с режим на USART-а Master-Slave и днес като си свърших останалата работа реших да се занимая с това.
До колкото разбрах идеята е следната /Рic/ - мастера изпраща данни в 9 битов формат, като 9 бит се използва да се индицира от слейв устройството като адрес. След това очаква отговор от устройството със съвпадащ адрес.
При подчинените устройства се слуша линията за данни с дължина 9 бита, ако е така 8-те бита се използват за адрес и се сравняват с зададения адрес и ако съвпада - прави си нещо - или минава в режим на приемане на данни или изпраща нещо към мастера.
Написах си програмка за слейв устройството, реших да си я симулирам в Proteus-a. Не знам дали аз бъркам нещо или симулатора ме лъже но без значение дали предавам към него данни с 1 или 2 стоп бита /с 2-рия стоп бит реших да симулирам адресния 9-ти бит/ RCSTA.0 /RX9D/ винаги ми се установява и ми се генерира прекъсването от USART модула. RCSTA съм го конфигурирал така - 11011000.
Не знам дали сте ме разбрали  но ако някой помогне със съвет или примерен софт ще ми помогне доста.
Иначе утре ми пристигат процесорчетата и ще си ги пробвам както си му е реда...
|
| Нед Фев 04, 2007 8:39 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
RS485 не е протокол, а хардуерен леер за данни!
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Нед Фев 04, 2007 10:33 pm |
|
 |
|
Syrius-B
Ранг: Форумен бог
Регистриран на: Пон Яну 30, 2006 2:48 am Мнения: 1248 Местоположение: София
|
Втория стопов бит е просто традиция.
Няма никакъв протоколен смисъл.
Ползва се само да даде още една глътка време на бавни приемници, нищо повече.
485 наистина е само физическата среда - не е протокол, но трябва да управляваш с отделен изход трансмитера, защото линията е само полудуплекс.
Включваш предавателя, предаваш, и веднага изключваш
|
| Пон Фев 05, 2007 12:11 am |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Ясно ми е какво представлява 485, по лесно ми е да си мисля че е протокол  Иначе какво - среда за пренос по която трябва да реализирам асинхронно предаване на данни в полудуплексен режим с мастер - слейв устройства.
Интересно ми е дали аз бъркам или виртуалния терминал в Протеуса ми генерира 9 битови данни защото в слейв устройството при получаване на данни постоянно ми се дига RX9D без начение как се опитвам да настроя терминала - с един стоп бит или с два стоп бита, флага се вдига дори и като си избера режим 7N1
Но явно никой не се е блъскал с него, днес ще го пробвам на хардуера, до тогава приемам че всичко с кода си е ОК 
|
| Пон Фев 05, 2007 9:10 am |
|
 |
|
Cvetanov
Ранг: Новодошъл
Регистриран на: Пон Фев 21, 2005 2:14 pm Мнения: 191 Местоположение: Varna
|
Не мога да разбера защо си включил и 9 бит. В твоя случай не е необходим.
_________________ Шанс едно на милион, обикновено се случва девет от десет пъти.
|
| Пон Фев 05, 2007 10:22 am |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Ами за да се знае че това което се предава по линията е адрес за някой от слейв устройствата. Наистина може да се мине и без него, но съществува вероятност някой от предаваните данни да съвпаднат с адрес на слейв устройство и тогава - каша, ще приказват 2 устройства едновременно...
|
| Пон Фев 05, 2007 10:28 am |
|
 |
|
Cvetanov
Ранг: Новодошъл
Регистриран на: Пон Фев 21, 2005 2:14 pm Мнения: 191 Местоположение: Varna
|
Правил съм подобна система и там предавах пакет от 3 байта - 0хАА,адрес,инвертиран адрес. Като никое устройство няма адрес 0хАА. В твоя случай можеш да минеш с предаване само на един байт - адреса. Стига да гарантираш, че в отговорите на слейв устройството няма да се съдържа адреса на някое друго слейв устройство.
_________________ Шанс едно на милион, обикновено се случва девет от десет пъти.
|
| Пон Фев 05, 2007 10:53 am |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Там е проблема че отговорите на слейв устройствата са от 00000000 до 11111111 и затова не може да се гарантира такова условие, трябва да си ползвам 9-тия бит!
|
| Пон Фев 05, 2007 11:26 am |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
milenjs,
aз бих те посъветвал да разделиш малко нещата...так ще стане по-ясно..и на теб и на нас...
имаш задача да спретнеш комуникационна система която позва като физически интерфейс RS485, и ти трябва логически да адресираш до ххх устройства така ли? трябва ли ти корекция на грешките по линията или само с CRC ще детекваш грешен пакет...ако са ти пактено ориентирани данните...
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Пон Фев 05, 2007 11:45 am |
|
 |
|
milenjs
Ранг: Форумен бог
Регистриран на: Сря Мар 08, 2006 2:12 pm Мнения: 2017 Местоположение: Котел
|
Максимум 16 устройства, корекция на грешките няма да има, само CRC, мастера ще запитва с - <ID 9бит> <CMD> <CRC> подчиненито с съвпадащ адрес ще връща <ID 8бит> <DATA> <CRC>.
Физическата час - 16Ф688 - 16Ф877, хардуерен USART, 9600, sn75176a, максимална дължина около 150 м.
Като софт съм го нахвърлял, както казах пробвах със симулация в протеуса ама ударих на камък, ще го направя както си му е реда с платките и тогава ще стане ясно  . Дано да няма проблеми...
|
| Пон Фев 05, 2007 12:02 pm |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
бе тия 150 метра... ако си в индустриална среда...ще опреш и до шумоустойчиво кодиране......
ама предполагам като тестваш протипите ще се похвалиш/оплачеш  от ефектите
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Пон Фев 05, 2007 12:09 pm |
|
 |
|
Syrius-B
Ранг: Форумен бог
Регистриран на: Пон Яну 30, 2006 2:48 am Мнения: 1248 Местоположение: София
|
Закачи се за модбъс L - ASCII варианта.
Протокола е свободен, има литература доста в мрежата, и е удобен за закачване на малки процесори.
Колкото до 485 - има и са евтини и достъпни чипчета - 8 крака, с предавател и приемник и управление, с много добри показатели
|
| Пон Фев 05, 2007 11:57 pm |
|
 |
|
evc
Ранг: Напреднал
Регистриран на: Пет Окт 21, 2005 8:45 am Мнения: 499
|
CRC е корекция на грешките или поне проверка на грешките! Както и да е!
Хвърли "Протеус"-а и ще сполучиш!
Не е абсолютно задължително да използваш стандартен (утвърден в практиката) протокол за обмен, но понякога ... помага!
_________________ Простотията е Божи дар, но човек не бива да парадира с подаръците си!
|
| Вто Фев 06, 2007 12:25 am |
|
 |
|
fuser
Ранг: Ориентиран
Регистриран на: Сря Юли 05, 2006 1:54 pm Мнения: 279
|
аз правя така - разрешил съм прекъсване при получаване на 9 битва дума, съответно тя си има определено значение. Всички устройства "слушат" за следващите - вече 8 бита - "номера" на устройството което ще адресираме. Всички останали излизат от режим "слушане". Не е сложно пък и работи 
|
| Вто Фев 06, 2007 10:18 am |
|
 |
|
MYXATA
Ранг: Форумен бог
Регистриран на: Пон Юни 05, 2006 1:48 pm Мнения: 4906 Местоположение: където небето среща земята, ракията е Jameson, а бирата Guinness
|
evc,
незнам дали ти е ясно животното CRC.....
то не е за корекция на грешки(пък за "проверка" на грешки да не говорим щото ще си умра от смях), а за откриване на разлики в съобщението...т.е. за откриване на евентуални грешки внесени от транспортната медия(комуникационната среда)...
така че си прав само, че симулацията е добра като начало ама в самото начало.... после трябва екперименти на живо
_________________ ... ако трети ден не ти се работи... това означава, че е сряда !
|
| Вто Фев 06, 2007 11:32 am |
|
|