Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

Помощ за RS485 протокол?
http://mcu-bg.com/mcu_site/viewtopic.php?f=7&t=3678
Страница 1 от 3

Автор:  milenjs [ Нед Фев 04, 2007 8:39 pm ]
Заглавие:  Помощ за RS485 протокол?

Не съм работил до сега с този протокол, по точно с режим на USART-а Master-Slave и днес като си свърших останалата работа реших да се занимая с това.
До колкото разбрах идеята е следната /Рic/ - мастера изпраща данни в 9 битов формат, като 9 бит се използва да се индицира от слейв устройството като адрес. След това очаква отговор от устройството със съвпадащ адрес.
При подчинените устройства се слуша линията за данни с дължина 9 бита, ако е така 8-те бита се използват за адрес и се сравняват с зададения адрес и ако съвпада - прави си нещо - или минава в режим на приемане на данни или изпраща нещо към мастера.
Написах си програмка за слейв устройството, реших да си я симулирам в Proteus-a. Не знам дали аз бъркам нещо или симулатора ме лъже но без значение дали предавам към него данни с 1 или 2 стоп бита /с 2-рия стоп бит реших да симулирам адресния 9-ти бит/ RCSTA.0 /RX9D/ винаги ми се установява и ми се генерира прекъсването от USART модула. RCSTA съм го конфигурирал така - 11011000.
Не знам дали сте ме разбрали :( но ако някой помогне със съвет или примерен софт ще ми помогне доста.
Иначе утре ми пристигат процесорчетата и ще си ги пробвам както си му е реда...

Автор:  evc [ Нед Фев 04, 2007 10:33 pm ]
Заглавие: 

RS485 не е протокол, а хардуерен леер за данни!

Автор:  Syrius-B [ Пон Фев 05, 2007 12:11 am ]
Заглавие: 

Втория стопов бит е просто традиция.
Няма никакъв протоколен смисъл.
Ползва се само да даде още една глътка време на бавни приемници, нищо повече.
485 наистина е само физическата среда - не е протокол, но трябва да управляваш с отделен изход трансмитера, защото линията е само полудуплекс.
Включваш предавателя, предаваш, и веднага изключваш

Автор:  milenjs [ Пон Фев 05, 2007 9:10 am ]
Заглавие: 

Ясно ми е какво представлява 485, по лесно ми е да си мисля че е протокол :D Иначе какво - среда за пренос по която трябва да реализирам асинхронно предаване на данни в полудуплексен режим с мастер - слейв устройства.
Интересно ми е дали аз бъркам или виртуалния терминал в Протеуса ми генерира 9 битови данни защото в слейв устройството при получаване на данни постоянно ми се дига RX9D без начение как се опитвам да настроя терминала - с един стоп бит или с два стоп бита, флага се вдига дори и като си избера режим 7N1 8O
Но явно никой не се е блъскал с него, днес ще го пробвам на хардуера, до тогава приемам че всичко с кода си е ОК :D

Автор:  Cvetanov [ Пон Фев 05, 2007 10:22 am ]
Заглавие: 

Не мога да разбера защо си включил и 9 бит. В твоя случай не е необходим.

Автор:  milenjs [ Пон Фев 05, 2007 10:28 am ]
Заглавие: 

Цитат:
cvetanov
Не мога да разбера защо си включил и 9 бит. В твоя случай не е необходим.


Ами за да се знае че това което се предава по линията е адрес за някой от слейв устройствата. Наистина може да се мине и без него, но съществува вероятност някой от предаваните данни да съвпаднат с адрес на слейв устройство и тогава - каша, ще приказват 2 устройства едновременно...

Автор:  Cvetanov [ Пон Фев 05, 2007 10:53 am ]
Заглавие: 

Правил съм подобна система и там предавах пакет от 3 байта - 0хАА,адрес,инвертиран адрес. Като никое устройство няма адрес 0хАА. В твоя случай можеш да минеш с предаване само на един байт - адреса. Стига да гарантираш, че в отговорите на слейв устройството няма да се съдържа адреса на някое друго слейв устройство.

Автор:  milenjs [ Пон Фев 05, 2007 11:26 am ]
Заглавие: 

Там е проблема че отговорите на слейв устройствата са от 00000000 до 11111111 и затова не може да се гарантира такова условие, трябва да си ползвам 9-тия бит!

Автор:  MYXATA [ Пон Фев 05, 2007 11:45 am ]
Заглавие: 

milenjs,
aз бих те посъветвал да разделиш малко нещата...так ще стане по-ясно..и на теб и на нас...
имаш задача да спретнеш комуникационна система която позва като физически интерфейс RS485, и ти трябва логически да адресираш до ххх устройства така ли? трябва ли ти корекция на грешките по линията или само с CRC ще детекваш грешен пакет...ако са ти пактено ориентирани данните...

Автор:  milenjs [ Пон Фев 05, 2007 12:02 pm ]
Заглавие: 

Максимум 16 устройства, корекция на грешките няма да има, само CRC, мастера ще запитва с - <ID 9бит> <CMD> <CRC> подчиненито с съвпадащ адрес ще връща <ID 8бит> <DATA> <CRC>.
Физическата час - 16Ф688 - 16Ф877, хардуерен USART, 9600, sn75176a, максимална дължина около 150 м.
Като софт съм го нахвърлял, както казах пробвах със симулация в протеуса ама ударих на камък, ще го направя както си му е реда с платките и тогава ще стане ясно :? . Дано да няма проблеми...

Автор:  MYXATA [ Пон Фев 05, 2007 12:09 pm ]
Заглавие: 

бе тия 150 метра... ако си в индустриална среда...ще опреш и до шумоустойчиво кодиране......
ама предполагам като тестваш протипите ще се похвалиш/оплачеш :) от ефектите

Автор:  Syrius-B [ Пон Фев 05, 2007 11:57 pm ]
Заглавие: 

Закачи се за модбъс L - ASCII варианта.
Протокола е свободен, има литература доста в мрежата, и е удобен за закачване на малки процесори.
Колкото до 485 - има и са евтини и достъпни чипчета - 8 крака, с предавател и приемник и управление, с много добри показатели

Автор:  evc [ Вто Фев 06, 2007 12:25 am ]
Заглавие: 

milenjs написа:
... корекция на грешките няма да има, само CRC...
както казах пробвах със симулация в протеуса ама ударих на камък, ще го направя както си му е реда с платките и тогава ще стане ясно :? . Дано да няма проблеми...


CRC е корекция на грешките или поне проверка на грешките! Както и да е!
Хвърли "Протеус"-а и ще сполучиш!
Не е абсолютно задължително да използваш стандартен (утвърден в практиката) протокол за обмен, но понякога ... помага!

Автор:  fuser [ Вто Фев 06, 2007 10:18 am ]
Заглавие: 

аз правя така - разрешил съм прекъсване при получаване на 9 битва дума, съответно тя си има определено значение. Всички устройства "слушат" за следващите - вече 8 бита - "номера" на устройството което ще адресираме. Всички останали излизат от режим "слушане". Не е сложно пък и работи :)

Автор:  MYXATA [ Вто Фев 06, 2007 11:32 am ]
Заглавие: 

evc,
незнам дали ти е ясно животното CRC.....
то не е за корекция на грешки(пък за "проверка" на грешки да не говорим щото ще си умра от смях), а за откриване на разлики в съобщението...т.е. за откриване на евентуални грешки внесени от транспортната медия(комуникационната среда)...
така че си прав само, че симулацията е добра като начало ама в самото начало.... после трябва екперименти на живо

Страница 1 от 3 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/