sodjan
Jo det känns som att jag ska "göra på samma sätt", gäller bara att hitta verktygen

Men det är skönt att prata av sig ibland också, man kommer ofta på nya saker och i detta fall lär sig mycket nytt också
Icecap
Ah, skillnaden mellan " och ' är lite svår att komma ihåg, i PHP finns det vissa funktioner för de båda men i grund och botten spelar det ingen roll vilken du vill använda. Jag brukar använda ' eftersom de är snabbare då de inte matchar $variabler.
Icecap skrev:...Men hela din detektering av protokoll är helt uppåt väggarna...
Men det du beskriver är ungefär det jag försöker få till

Som sagt, jag är inte så bra på att förklara med de rätta orden
Jag vill ha ett start och slut, jag vill ha ett kodblock däremellan, precis som du skrivit.
STX "01" "02" "32" "xx" ETX Sen kan jag nog tänka mig att skippa checksum i början, bara för att hålla det enkelt, men det står på min wishlist
Det är nog här jag fastnat med att jag vill använda HEX, för man skulle ju kunna säga att värdena i kodblocket mellan start och slut är HEX. Men! det behöver ju inte vara det, har jag fått lära mig
Att skicka ditt paket mellan processorer borde ju vara ganska enkelt. Man skickar hex värde till UART'en för start 0x02, sen skickar man ASCII i ett flöde 010232xx och slutligen hex värde 0x03 för slut. Är det så man gör kanske? Mottagaren kommer ju "se" samma sak oavsett om man skickar ASCII, HEX eller Binärt.. Har jag lärt mig nåt?
Det blir väl dock problem med en terminalklient på datorn som sagt, eftersom den inte använder start och slut värde så som vi vill. Så det kan bli svårt att "prov-skicka" ett paket från datorn? Det är väl rätt tolkat efter alla inlägg i denna tråden?
Jag förstår dock inte riktigt vad du gör med enum? Missar du inte något? Antingen ett "variabel" namn i början eller slutet av enum funktionen? Samt varför du har med det i inlägget?
Kan det vara så att det första värdet i kodblocket motsvarar index i enum arrayen? Så exempelvis 01 blir funktionen "Command_Pong"?
Det här hör väl kanske inte riktigt till mina frågor, fast det gör på ett sätt.. Men jag vill gärna förstå..

Sen måste jag erkänna att Hex2Word funktionen är ganska oklar för min del. Source förmodar jag är från kodblocket? Är det varje sifferpar eller är det alla siffrorna tillsammans? Destination, ingen aning..
Sen förstår jag inte riktigt IF satsen, om Source är mindre än 0 eller större än F eller mindre än A och större än 9? Så kan det inte vara ett HEX värde? Vänta nu, blir det om Source är mindre än 0, dvs negativt så kan det inte vara HEX.. Om det är större än F, dvs G H I K N V så kan det inte vara HEX.. eller om Source är mindre än A, dvs 0-9, men större än 9, så kan det inte vara HEX.. Wow, stämmer det? haha, jag kanske förstod trots allt
Vad gör då nästa IF sats? om Source är större eller likamed 'A' dvs ett numeriskt/heltals värde? så ska destination addera sig själv med (Source - Heltal) + 10.. Vad blir resultatet av det?
På din fråga om hur mycket data som ska överföras kan jag bara svara.. Ingen aning! Nej då, men på ett ungefär som ditt paket med start/slut och ett kodblock. Jag behöver ett lite annorlunda kodblock, för att få in en adressdel till / från också.
STX AT AF KB SK VÄ xx ETX
STX = Start
AT = Mottagaradress
AF = Sändaradress
KB = Kommandobit
SK = Subkommandobit
VÄ = Kommandovärde
xx = CRC
ETX = Slut
Dock skulle jag behöva lite fler funktioner, som visserligen går att lägga in som egna värden direkt, visst.
Men jag har läst på om ett annat projekt som använder RS485 kommunikation, som jag gör. Deras protokoll körs med HEX värden. (sänt som ASCII förmodligen?)
Deras startblock består av följande bitar
R C S S T T T T
På åtta bitar, dvs ett ASCII tecken, ett hex värde liknande 0x00 osv.. Har de fått in fyra olika inställningar.
R = Reply, avsändaren vill ha ett kvitto på att meddelandet har kommit fram
C = Checked, om avsändaren ville ha ett kvitto ändras denna bit av mottagaren när paketet skickas tillbaka
SS och TTTT är kategori bitar, här ställs det in vad för sorts paket det är som skickas.
Deras startblock kan se ut på olika sätt och det finns säkert fler kombinationer men de jag hittar är, 0x00, 0x80, 0xC0, 0xA1, 0xE1, 0x82, 0xC2
Vidare har de ett adressblock som består av följande sträng "255 255 255" värdet kan alltså vara max 255 och som lägst 0.
Sen har de fyra block med vardera två tecken, bas 16, som utgör "meddelande".. Det som vi ovan pratat om en sorts "kod", likt "H00\r".
Till sist har de ett CRC värde beräknat på hela paketet.
Deras paket har ett grafiskt utseende på detta sätt;
Det är kanske lättare att titta på, deras första byte, 8 bits. Sen adresspaketet med tre värden, vardera på max 255. Fyra meddelandepaket som vardera kan vara en byte samt det slutgiltiga CRC blocket, som även det är på en byte totalt.
De har dokumenterat det som att paketet är 9 bytes totalt.
Nu vill jag inte kopiera deras idé, som för övrigt verkar rätt död eftersom det inte kommit någon uppdatering på 4-5 år.. Men jag gillar själva upplägget och därav själva idén med att jag vill skicka EN byte och dela upp denna i bitar där vardera bit står för en inställning.
Vad säger ni om det? Låter det fortfarande knasigt eller?
jesse
Absolut, ett sätt kolla så man får hela paketet är definitivt rekommenderat och det kommer jag också implementera när tiden kommer för det. Idén jag har för det är att när det första tecknet kommer startas en timer på runt 1ms (vilket säkert går att trimma ner), om det inte kommer in fler tecken så kommer bufferten tömmas och man väntar på nästa sändning istället.
labmaster
Ok, men det är bra att veta!
Ja det kanske blev lite luddigt i början av tråden, men det är främst AVR <-> AVR men jag kommer både behöva men även vilja skriva ett program på datorn för kommunikation mellan dator och AVR. Anledningen är att jag både kan använda det för utveckling av fler kommunikationsmoduler men även för att titta på trafiken.
Så främst AVR <-> AVR
Det jag funderar på gällande de protokoll jag tittat på är att deras startbyte kan variera från paket till paket. Kanske skulle man implementera Icecaps version och göra paketets första byte innanför start till en byte liknande deras startbyte. Jag vet inte, jag vet inte..
Men nu har ni i alla fall sett vart jag fått idén ifrån och varför jag ens startade tråden

Det blev ett ruskigt långt inlägg, men hoppas inlägget går att läsa
