Protokoll PC - uC

Elektronikrelaterade (på komponentnivå) frågor och funderingar.
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Protokoll PC - uC

Inlägg av thepirateboy »

Jag har byggt en fyrkantsvågsgenerator som kan styras från PC'n genom att skicka två byte med data via serieporten till uC'ns uart. uC'n tar hand om datat och ställer om frekvensen därefter.

Istället för att skicka två byte på vinst och förlust tänkte jag implementera något sorts protokoll, om inte annat kan det vara bra att ha för kommande projekt.

Jag har tittat lite på X-modem, och det verkar vara nåt sådant jag söker.
http://www.atmel.fi/dyn/resources/prod_ ... oc1472.pdf

X-modem var dock kanske lite väl avancerat. Finns det flera standarder eller hittar man bara på nåt eget som man tycker verkar bra?
Användarvisningsbild
RasmusB
Inlägg: 1006
Blev medlem: 24 augusti 2006, 23:32:13
Ort: Södertälje

Inlägg av RasmusB »

Finns drösvis med standarder.

Ofta väljer man väl en standard som "passar in" i produkten. Ska du till exempel styra ett labagg så har man antagligen andra behov än om du ska kommunicera med elektroniken i en bil...

Såvida du inte har några kompabilitetskrav (typ att du ska kunna koppla in något annat än just en pc för att styra utsignalen eller att det skall kunna sytras från något visst program) så är det väl bara att kika runt på olika protokoll, välja ett... eller bara hämta inspiration från flera protokoll och koka ihop ett eget.
Användarvisningsbild
Icecap
Inlägg: 26662
Blev medlem: 10 januari 2005, 14:52:15
Ort: Starup (Haderslev), Danmark

Inlägg av Icecap »

Jag gör sånt själv, X-modem är från de gamla dagar där man ringde upp en BBS och överförda filer.

Protokollets komplexitet beror ju på vad du ska styra, om det enbart är en frekvensgeneretor kan den ju vara mycket primitiv, ska du styra en uppsjö av enheter (nätdelar, generatorer osv) ska den ju vara en del mer utbyggd.

Här fungerar det bra med en STX som markering av "start på block", sedan kan du t.ex. ha frekvensen i "klarspråk", t.ex. "12400" och sedan en ETX som uttryck för att kommandot ska behandlas.

Detta kan man skicka manuellt om man vill, man kan skicka andra data och ändå få rätt funktion osv.
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47045
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

X-Modem är väl egenteligen bara ett Protokoll som talar om för processorn när data börjar och slutar.

Det du måste göra är att skriva ett protokoll för de data du vill använda, dvs beskriva vad de data du skickar skall göra, om du sedan använder X-Modem eller nått annat är väl rätt trivialt gissar jag.

Enklast är väl att bara skicka data över linan och använda mjukvaruhandskakning samt 8N1
Användarvisningsbild
Micke_s
EF Sponsor
Inlägg: 6741
Blev medlem: 15 december 2005, 21:31:34
Ort: Malmö

Inlägg av Micke_s »

http://en.wikipedia.org/wiki/IEEE_488
är en typ av instrumentbuss.

Annars så är klartextmeddelanden bättre än binärformat så länge man inte måste spara bandbredd.

Du kan t.ex. använda enter för säga när ett nytt kommando kommer
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47045
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

Det blir nog lite för komplicerat, bl.a. då man måste ha speciella kretsar som hanterar bussen.

IEEE488 beskriver den elektriska konfigurationen samt vissa grundläggande kommandon för handskakning etc, det är sedan upp till varje implementation att göra vad de vill, följdaktligen finns det i princip ett protokoll för varje instrument som är implementerat.

Lättast är att använda seriel komm i detta fallet
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Sökte på STX/ETX och hittade detta
http://avrfan.com/AVRlib/docs/html/group__stxetx.html

Det verkar intressant, ska kolla närmare på det. En checksumma och längd på data skulle jag vilja ha med i "paketet".
Användarvisningsbild
TomasL
EF Sponsor
Inlägg: 47045
Blev medlem: 23 september 2006, 23:54:55
Ort: Borås
Kontakt:

Inlägg av TomasL »

uChip har några App, där de nätverkar en bunt PICar via I2C, där har man även tagit fram ett enkelt protokoll.

STX och ETX betyder bara Start of Transmission och End of Transmission.

Du måste definera ditt telegram (datagram)

Till ex:
Ett datagram kan se ut så här:

Kod: Markera allt

STX LEN TYP CMD DAT BCC ETX 
Där
STX är Start of Transmission = 8bitar
LEN är datagramlängden utan STX/ETX (eller med dessa)
TYP Typ av datagram
CMD Kommando
DAT data
BCC Checksumma
ETX End of Transmission = 8 bitar.

Du kan haturligtvis skapa datagrammet precis hur du vill, då det inte finns några regler hur det skall se ut, dock kan det vara lämpligt att skicka BCC sist då det är enklast att beräkna då.
Vidare måste du bestämma dig om det skall vara en fast eller variabel telegramlängd, den första är enklast, och då behöver du inte längden.
Har du blandat, fast eller variabel längd, kan det vara bra att använda TYP för att tala om det.

Skall du skicka både kommandon och data är det vettigt att dela upp dessa, därav både CMD och DAT i datagrammet ovan.
BCC dvs checksumman kan du beräkna på flera olika sätt, enklast är att XORa allting, skall du vara mer komplicerad använder du CRC, men det tycker jag är att skjuta lite över målet och komplicera sakerna lite.
XOR är det enklaste och snabbaste sättet.

På sändarsidan XORas alla ord, dvs
BCC = 00 XOR B1
BCC = BCC XOR B2 osv
Samma görs på mottagarsidan och jämförs med den skickade BCC'n
thepirateboy
EF Sponsor
Inlägg: 2109
Blev medlem: 27 augusti 2005, 20:57:58
Ort: Borlänge

Inlägg av thepirateboy »

Japp, ser helt klart ut som ett vettigt upplägg. Lite overkill för detta projekt men jag har några kommande liknande projekt där jag kommer skicka några bytes med data och säkert ett par olika kommandon.
sodjan
EF Sponsor
Inlägg: 43251
Blev medlem: 10 maj 2005, 16:29:20
Ort: Söderköping

Inlägg av sodjan »

Eftersom du har så korta och enkla kommendon, kan du helt enkelt
låta PIC'en eka tillbaka samma sak. Så kan du enkelt se i PC
applikationen att rätt data kom fram...
Användarvisningsbild
speakman
Inlägg: 4838
Blev medlem: 18 augusti 2004, 23:03:32
Ort: Ånge

Inlägg av speakman »

CRC8 är ju varken komplext eller tungt för uC:n.
Men tänk på att du bör "escapa" datat så inga STX/ETX eller andra styrtecken hamnar med i dataströmmen.
Skriv svar