My favorites | Sign in
Project Home Downloads Wiki Issues Source
Search
for
KomunikacniProtokol  
Updated Feb 25, 2009 by zdenek.m...@gmail.com

Komunikační protokol robotických modulů

Komunikace po lince RS485 bude poloduplexní (nelze zároveň vysílat a přijímat), typu master-slave. Pro zmenšení zatížení mikroprocesorů bude využita 9 bitová komunikace a MPCM.

Stejný protokol je použit i pro komunikaci s PC, ale komunikace probíhá v 8 bitovém režimu.

Návrh protokolu

Při tvorbě návrhu byl použit jako inspirace protokol Martina Lockera (ROBONET) a dále protokol Tomáše Paseky uvedený v jeho diplomové práci (Návrh a realizace autonomního robotu pro kategorii IEEE Micromouse).

Popis paketu

SYNC1SYNC2ADDRLENTYPEData 0...Data nCRC1CRC2

SYNC1, SYNC2: synchronizační byty

ADDR: adresa přijemce

LEN: délka dat (teoreticky max. 255 bytů, bude sw omezeno na 32 bytů)

TYPE: typ paketu/dat

Data 0 ... Data n: přenášená data

CRC1,CRC2: šestnáctibitový kontrolní součet

Vyhrazené adresy

  • Adresa 0xFF vyhrazena pro broadcast
  • Adresa 0x0 pro master zařízení

Algoritmus komunikace

Devátý bit signalizuje jestli se posílají data nebo adresa (nastavený = adresa).

  • master sestaví paket, umístí ho do bufferu, vloží první byte do UDR a pak se již celý buffer odešle samočinně
  • byty SYNC1, SYNC2 a ADDR mají nastavený devátý bit, takže na ně reagují všechny moduly
  • jakmile modul zjistí, že mu přišel byte s jeho adresou, přepne se na příjem všech bytů, ostatní moduly další byty ignorují (mají nulový devátý bit)
  • maximální délka datové části je omezena na 32 bytů
  • po příjmu všech dat vypočítá kontrolní součet, nastaví se na příjem adresních bytů a nastaví příznak indikující přijetí paketu

Komunikaci vždy inicializuje master. Slave moduly posílají data jen pokud jsou o to požádány. Příjem paketu není nijak potvrzován. Pokud master nedostane odpověď, pošle paket ještě 2x a pak považuje modul za mrtvý. Stejně tak, pokud podřízený modul zjistí, že už příliš dlouho nedostal data (např. povel pro motory) ukončí svou činnost (robot se zastaví), protože komunikace zřejmě nefunguje. Dále se zjišťuje, jestli nenastal timeout mezi příjmem jednotlivých bytů (modul umřel v půlce paketu).

Typy paketů

Typy paketů používané pro komunikaci mezi moduly:

  • P_ECHO - odeslání echo paketu
  • P_MOTOR_COMM - příkaz pro motor
  • P_MOTOR_INFO - informace z motorů
  • P_COMM_INFO - informace o stavu komunikace

Typy užívané pro komunikaci s PC:

  • P_ECHO
  • PC_MOVE_STRAIGHT - pohyb rovně
  • PC_MOVE_ROUND - otočení o zadaný úhel

TODO: doplnit hodnoty konstant

Realizace komunikace v procesorech AVR

TODO: přerušení receive_complet, transmit_complet, alokace bufferů, ukládání nastavení a statistiky do struktury atd.


Sign in to add a comment
Powered by Google Project Hosting