ПредишенСледващото

Добро време на деня!

Искам да приложи протокол за пренос на данни, в която данните ще бъдат предадени чрез UART единствен 9-битов парцел.

Структура парцели трябва да са както следва:

0 - започнете малко

5. 7 - три бита данни
8 - стоп бит

Как най-добре да използват?

Тогава друг вид тема показва "защо да не приемем факта, че изпрати"

Е, хората твърди, че такива неща не го правят. Така че аз сега съм объркан :)

Разбира се, можете да опитате преследва по трансфер на данни и т.н. Аз може в действителност, в един байт могат да се срещнат. За отстраняване на грешки "нестандартни решения" Имам log.analizator.

В началото, аз наистина влезе в мисленето, че за начало и край бита трябва да се съдържа в рамките на пакетите (данни): rolleyes:

Това ще позволи в бъдеще (и най-вероятно той е там), за да промените броя на команди към роба, и може да искате да изпратите отговор от роба.
Защо 8bitnaya вместо 9? По-лесно е да хванем "нормално компютър COM-порт", както и необходимостта за това е вероятно да се случи.

Общият ви протокол:
прехвърлите от капитана да робуваш
Първата байт -
Втори байт -
.
Ny байт -
отговор от роб на капитана е един и същ (ако е необходимо)
Първата байт -
Втори байт -
.
Ny байт -
в тази структура може да бъде "нормално" за пренос на данни (къси, дълги) - да ги опаковат по-голям брой байтове (тук също има опции, които могат да се движат данните, е възможно да се опаковат бита от висок ред в последния байт данни).

За сметка на данни, набора от данни и байтове Б:
такова нещо като структура (структура) и обединение (съюз).
Във вашия случай, може да се изписва така:
структура
usigned знак на вр. 4;
usigned Чар данни. 4;
> Pac;


// позоваване на полета:
Pac.Addr = 0;
Pac.Data = 5;
В моя случай:

# определят DATA_LEN 1
структура
unsiged овъгляване Addr;
unsiged харак данните [DATA_LEN];
unsiged харак DataLen; // броя на получените данни
> Pac;
В моята версия на сложно приемането и обработването. ако не е нужно да - спрете в първоначалния си вид.

PS студент отношение, не всеки завършил (начинаещ инженер) се натъква на такава задача.

Е, че всички така случайно, то е точно това, което ви трябва на превозното средство. И надеждност се проверява за милиони на проби, а дори и на императора на галактиката е удостоверила, цялата работа. И си купи готов разтвор, можете;) И ние натоварва мозъка. Казах ти, че когато билото беше минал, евреина няма нищо общо. И украинския сайт беше. ) Браво.

Е, че всички така случайно, то е точно това, което ви трябва на превозното средство. И надеждност се проверява за милиони на проби, а дори и на императора на галактиката е удостоверила, цялата работа. И си купи готов разтвор, можете;) И ние натоварва мозъка. Казах ти, че когато билото беше минал, евреина няма нищо общо. И украинския сайт беше. ) Браво.
Аз не разбирам от страна за принадлежността към определена националност. Сайтът, тъй като описанието на прост език, това е по-лесно с концепцията. Без да мисли къде е той, и там е сайт, добре.
Сертификация общо с това. Как да го отстрани по темата.
Кой говори за продажба или покупка?
А фактът, че много от оборудването работи по този протокол, така че направих така, такъв, какъвто е.
TC никой сили ", peredirat" протокол, или да се прилагат, но идеята, че можеш да вземеш, толкова повече "2. Всички са отглеждани / закупени."

1. Всички супа на една дъска.
2. Всичко се разрежда / закупили.
3. Възможно ли е да се направи без потвърждение

Това ще позволи в бъдеще (и най-вероятно той е там), за да промените броя на команди към роба, и може да искате да изпратите отговор от роба.
Защо 8bitnaya вместо 9? По-лесно е да хванем "нормално компютър COM-порт", както и необходимостта за това е вероятно да се случи.


За 8-битов съгласен, но ако паметта ми служи 9-битов режим предаване / приемане като същата може да се включи в параметрите на една и съща-FT232 (USB-UART). Тук са само режим на 9-малко не е необходимо да ме :) Аз просто не осъзнават в началото на структура пакет и си помислих, че като старт и стоп бит е включен в бита 8-9 с информацията, съхранявана в пакета (в байтове): о

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

В действителност от капитана, че трябва да изпрати следващия набор от команди:

1 [111] - определя на RC2 високо ниво т.е. към канал
2 [000] - настроен на RC2 на ниско ниво, т.е. изключите канала
3 [001] - прилагат за 10ms дължина RC1 импулсни
4 [011] - прилагат за 50ms дължина RC1 импулсни
5 [100] - запитване за състоянието на RC1
6 [101] - запитване за състоянието на RC2
7 [110] - отпадане на устройството да спи преди рестартиране т.е. изключите канала и не получава команди.


На свой ред, на роба ще бъдат изпратени да овладеят следващия набор от реакции;

I [111] - канал успешно включени (положителен отговор на командата 1)
II [000] - каналът е изключен успешно (положителен отговор на командата 2)
III [001] - излъчване импулс хранени (положителен отговор на команди 3, 4)
IV [011] - свръхток! (Отрицателен отговор на инструкцията 1, 2, 3, 4)
V [100] - ON (отговор на командата 5, 6)
VI [101] - разстояние (отговор на инструкции 5, 6)


Всъщност аз не виждам смисъл от 2 или повече байта на действието на системата алгоритъм е проста и не изисква тежки предаване на информация.

С този излишък, няма смисъл в шах, можете просто да повтаря съобщението. Разбира се валидиране от страна на пакета за приемник - много добра.

Работете всичко ще бъде както следва:

Да приемем, трябва да включва канал четвърти роб-ustroysva (0100 - ID = 4).
За тази цел на главното устройство за изпращане на пратки със следното съдържание:


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

11110000
[01234567]
където
0. 3 - 15 в бинарна система (5 х 3)
7 - флаг равно на 0 (наименование байт контролна)


Сега имам 2 въпроса към теб:
1. Аз съм идиот?
2. Как се осъществява в C? По-конкретно, аз не разбирам как можете да получите пратката може да бъде разделен на парчета?
Аз има такова изпълнение на код, но това ви позволява да изпращате / получавате чрез UART символи и низове.
#include
#include
#define BAUD 9600
#define FOSC 4000000L
#define _XTAL_FREQ 4000000
# определят NINE_BITS 0
#define SPEED 0x4
# определят РАЗДЕЛИТЕЛ ((междинно съединение) (FOSC / (Прибавят се 16 uL * BAUD) -1))
#define LED_RED RA4
#define LED_GREN Ra5
#define ON_OFF RC2
#define земята RC1
__CONFIG (FOSC_INTOSC WDTE_ON PWRTE_OFF MCLRE_OFF CP_OFF BOREN_OFF CLKOUTEN_OFF IESO_OFF FCMEN_OFF);
__CONFIG (WRT_OFF PLLEN_OFF STVREN_OFF BORV_LO LVP_OFF);

невалидни usart_init (свободен);
невалидни usart_putch (неподписан знак в);
// ------------------------------------------------ -
анулира usart_init (свободен) SPBRG = РАЗДЕЛИТЕЛ;
RCSTA = (NINE_BITS | 0x90);
TXSTA = (SPEED | NINE_BITS | 0x20);
>

нищожен putch (грозен Чар байт), докато (! TXIF)
продължи;
TXREG = байт;
>

грозен Чар getch (), докато (! RCIF)
продължи;
върнете RCREG;
>

неподписан овъгляване getche (свободен) неподписан овъгляване С;
putch (с = getch ());
се върне в;
>
.
невалидни основни (свободен) OSCTUNE = 0b00000000;
OSCCON = 0b01101010;
TRISA = 0b11001111;
TRISC = 0b11111001;
ПОРТА = 0b00000000;
земята = 0;
ON_OFF = 0;
LED_RED = 1;
LED_GREN = 1;
овъгляване COMAND;
овъгляване адр;
овъгляване байт;
докато (1) // тук аз се опитвам да се манипулира съдържанието на пратката
байт = getch ();
адр = байт&0x0F;
ако (адр == 1101) COMAND = (byte0xF0) >> 4;
.
>

Или да публикувате №10, №29 или по пощата.

Работете всичко ще бъде както следва:

Да приемем, трябва да включва канал четвърти роб-ustroysva (0100 - ID = 4).
За тази цел на главното устройство за изпращане на пратки със следното съдържание:


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

11110000
[01234567]
където
0. 3 - 15 в бинарна система (5 х 3)
7 - флаг равно на 0 (наименование байт контролна)


Сега имам 2 въпроса към теб:
1. Аз съм идиот?
2. Как се осъществява в C? По-конкретно, аз не разбирам как можете да получите пратката може да бъде разделен на парчета?
Аз има такова изпълнение на код, но това ви позволява да изпращате / получавате чрез UART символи и низове.
#include
#include
#define BAUD 9600
#define FOSC 4000000L
#define _XTAL_FREQ 4000000
# определят NINE_BITS 0
#define SPEED 0x4
# определят РАЗДЕЛИТЕЛ ((междинно съединение) (FOSC / (Прибавят се 16 uL * BAUD) -1))
#define LED_RED RA4
#define LED_GREN Ra5
#define ON_OFF RC2
#define земята RC1
__CONFIG (FOSC_INTOSC WDTE_ON PWRTE_OFF MCLRE_OFF CP_OFF BOREN_OFF CLKOUTEN_OFF IESO_OFF FCMEN_OFF);
__CONFIG (WRT_OFF PLLEN_OFF STVREN_OFF BORV_LO LVP_OFF);

невалидни usart_init (свободен);
невалидни usart_putch (неподписан знак в);
// ------------------------------------------------ -
анулира usart_init (свободен) SPBRG = РАЗДЕЛИТЕЛ;
RCSTA = (NINE_BITS | 0x90);
TXSTA = (SPEED | NINE_BITS | 0x20);
>

нищожен putch (грозен Чар байт), докато (! TXIF)
продължи;
TXREG = байт;
>

грозен Чар getch (), докато (! RCIF)
продължи;
върнете RCREG;
>

неподписан овъгляване getche (свободен) неподписан овъгляване С;
putch (с = getch ());
се върне в;
>
.
невалидни основни (свободен) OSCTUNE = 0b00000000;
OSCCON = 0b01101010;
TRISA = 0b11001111;
TRISC = 0b11111001;
ПОРТА = 0b00000000;
земята = 0;
ON_OFF = 0;
LED_RED = 1;
LED_GREN = 1;
овъгляване COMAND;
овъгляване адр;
овъгляване байт;
докато (1) // тук аз се опитвам да се манипулира съдържанието на пратката
байт = getch ();
адр = байт&0x0F;
ако (адр == 1101) COMAND = (byte0xF0) >> 4;
.
>


RS485, за този хардуер, наистина не се нуждаят. С "затягане" на 470 ома ще работи като оръдие. А акт малко балансиране в замяна по-добре да не отхвърлят усвоили: D аз защо около каза фиксирана дължина. Има таймер се рестартира на всеки байт получил (директно в капан приемник), има брояч байт. Ако брояч dotikal - таймер спирки и vypolnetsya CRC проверка. Wie, все още се изненадате колко лесно и бързо се работи (ако е правилното нещо да направя и как да - в този форум само примери на автомобила). Необходимо е само да се помни, че КРС на всички пакети (с КРС) трябва да бъде нула. Ако "0", можете да направи разбор на пратката, ако е кратко и да изпълни действията, твърде кратък - правото на прекъсването.
Ако таймер dotikal преди таймерът спира и sbrasyvyetsya контра байта. ffso. Изпълнението - просто никъде.
Изисквания за задължително обвързване пакет Xon / Xoff, защото, не, чай, не живеят в Германия

Всеки вижда това, което той иска да види.

И не само това, което той иска, но и това, което може. Колкото по-високо ниво на интелигентност, толкова по-сложни безсмислени изобретения могат да бъдат.

(Имайте предвид, Gravitsappa -. Фантастично устройство, показано в "Кин-ZA-ZA" Когато инсталира в pepelatsa двигател -. Междузвездното karabl - позволява да се извършват практически моментално междупланетни, междузвездни и дори междугалактически полети) :).

Казах ти, че когато билото беше минал, евреина няма нищо общо.
като израз дължи на Karl Marx. Вярно е, че звучеше като ", където български търговец Отидох там три евреи нямат нищо общо." С украинците - търсене.

Напълно забравих да се отпишете тук :)

Като цяло, проектът бе отделено на реализирането на доказани себе си е доста не е зле. Фалшива тревога се появява, данните не се борят.
Между нас казано, представлява комплекс от 16 роб карти и един главен единица вече половин година тропа в магазина за реактор една АЕЦ;)

Всъщност задачата на роби устройства - просто да се промени състоянието на изхода половин мост :)

Сега за инсталирането на софтуера:

структура грозен Чар ПМС. 4; // Command адресирано до устройство (4-бита)
грозен Чар Дев. 4; // адреса на получателя (4-бита)
>;
> Pack_in;

структура грозен Чар ток. 2;
грозен Чар ground_key. 1;
грозен Чар power_key. 1;
грозен Чар Дев. 4;
>;
> Pack_out;

В контейнер отговор 2 бита са запазени за обратна връзка ток, консумирана от товара. Казано по-просто, ако товарът консумира по-малко 0,12A - означава нов ред, нито за запис устройство за карта е в ред. Ако консумирате не повече от 0.2 А и 0,12A menie - всичко работи както трябва. Но ако текущата privyschaet, 200 та (късо съединение), това означава, че нещо се е случило неволно и роб-устройството има също така премахва ток от товара.

В очакване на критики и коментари :)

Подкрепете проекта - споделете линка, благодаря!