Hallo zusammen, ich möchte gerne ein kleines Funkübertragungsprotokoll schreiben. ganz einfach vom aufbau -------- ------------- ----------- Stop Bit Nachricht Start Bit habe aber keine Ahnung wie ich anfangen soll. da ich leider nirgendwo das Thema bearbeitet finde und alle bücher zu dem Thema in der BiB ausgeliehen sind. Ich dankeim Voraus
Hi Bene, da stellt sich mir erst die Frage, auf welchem Level das "Funkübertragungsprotokoll" greift? Auf der HF Ebene, der Sicherungsebene, der ..-Eben, der Obejektebene ? Was machst Du bei Fehlern in der Datenübertragung ? Was soll das "Stop Bit", wenn danach eine "Nachricht" kommt ?
Was soll das Ganze denn werden ? Offensichtlich sind Nullerlei (0.0) Grundlagen vorhanden.
Grundlagen sind schon vorhanden, ich dachte nur ich versuche mal das ganze viel einfach zu beschreiben. Problem ist, dass ich werte zwischen 0 und 255 übertragen muss. wenn ich aber 255 sende kommt beim empfänger 2 5 5 an. normal hätte ich jetzt schon beim sender gesagt er soll halt immer 3 zeichen rausschicken, die Aufgabenstellung ist aber ein PRotokoll zu entwickeln, welches vom empfänger unabhängig von der Länge der Nachricht ausgelesen werden kann. wie das Funkmdul funktioniert kann ich leider nicht beantworten. mein Verdacht ist aktuell, dass es einfach alles rausschickt was auf dem BUS unterwegs ist. (hoffe ich habe die frage richtig verstanden). meine idee war es so einfach zu machen, dass ich dem sender z.B. sage: Sende .255, und dadurch der Empfänger weis, dass er alles von . bis , zusammenfassen soll. das bekomme ich aber nicht hin.
Bene schrieb: > die Aufgabenstellung ist aber ein PRotokoll zu > entwickeln, welches vom empfänger unabhängig von der Länge der Nachricht > ausgelesen werden kann. Man könnte einfach das erste Byte dazu verwenden dem Empfänger zu sagen wie lange die folgende Nachricht ist, hast du vor längere Nachrichten zu senden dann eben die ersten paar Bytes. Oder über ein Timeout, wenn z.B. für 2ms keine Daten kommen ist die Nachricht fertig. > wie das Funkmdul funktioniert kann ich leider nicht beantworten. Und welches es ist?
:
Bearbeitet durch User
Hallo, danke erst mal. also das Funkmodul ist ein RFD21815.
> das bekomme ich aber nicht hin
Warum nicht, zeig mal Code...
int incomingByte = 0; int incomingbyte2 = 0; void setup() { Serial.begin(9600); } void loop(){ if (Serial.available() > 0) { // char incoming1 [3]; incomingByte = Serial.read(); incomingbyte2 = Serial.read(); word(incomingByte,incomingbyte2); /* if (incomingByte = ',') { incomingByte = Serial.read(); incoming1[0] = incomingByte; incomingByte = Serial.read(); if (incomingByte != '.'){ incoming1[1] = incomingByte; incomingByte = Serial.read(); if (incomingByte != '.'){ incoming1[2] = incomingByte; }}} char incoming2 [3]; incomingByte = Serial.read(); if (incomingByte = '.') { incomingByte = Serial.read(); incoming2[0] = incomingByte; incomingByte = Serial.read(); if (incomingByte != ','){ incoming2[1] = incomingByte; incomingByte = Serial.read(); if (incomingByte != ','){ incoming2[2] = incomingByte; }}} else { int incoming1 = 0; int incoming2 = 0; } */ Serial.print( "I received: "); Serial.write(); Serial.print("\r\n"); Serial.print( "and: "); Serial.write(); Serial.print("\r\n"); } }
das übertragen mit . als Start für wert1 und, als Start für WErt 2 klappt jetzt. jetzt fehlt nurnoch, dass ich das ganze sinnvoll wieder zusammengeaut bekomme. akteull gibt er nämlich irgendwelche dubiosen werte aus die nicht gesendet wurden..
Sorry falscher code int incomingByte = 0; void setup() { Serial.begin(9600); } void loop(){ if (Serial.available() > 0) { char incoming1 [3]; incomingByte = Serial.read(); if (incomingByte = ',') { incomingByte = Serial.read(); incoming1[0] = incomingByte; incomingByte = Serial.read(); if (incomingByte != '.'){ incoming1[1] = incomingByte; incomingByte = Serial.read(); if (incomingByte != '.'){ incoming1[2] = incomingByte; }}} char incoming2 [3]; incomingByte = Serial.read(); if (incomingByte = '.') { incomingByte = Serial.read(); incoming2[0] = incomingByte; incomingByte = Serial.read(); if (incomingByte != ','){ incoming2[1] = incomingByte; incomingByte = Serial.read(); if (incomingByte != ','){ incoming2[2] = incomingByte; }}} else { int incoming1 = 0; int incoming2 = 0; } Serial.print( "I received: "); Serial.write(); Serial.print("\r\n"); Serial.print( "and: "); Serial.write(); Serial.print("\r\n"); } }
Werte zwischen 0 und 255 kann man als ein einzelnes byte uebertragen... Ohne firlefanz drum herum.
Du benutzt nur eine serielle Schnittstelle. Diese ist mit dem Funkmodul verbunden. Wie willst du dann irgendwelche Ausgaben machen ? Die sendest du ja dann an das Funkmodul. Es sei denn du hast die TX-leitung vom Funkmodul getrennt. Außerdem empfängst du doch schon den richtigen Wert. Wie sieht den dein Sendeprogramm aus ? Wenn du Daten mit Funk überträgst werden die Daten von jedem Empfänger in Reichweite empfangen, der auf der gleichen Frequenz arbeitet. D.h. du must erst mal in die Daten die du sendest die Adresse einarbeiten an wen du senden willst. Der Empfänger kann dann überprüfen ob die Daten überhaupt für ihn bestimmt sind. Außerdem sollte man immer eine Checksumme mitsenden damit der Empfänger überpüfen kann ob die Daten die er empfängt auch korrekt sind. Wenn die Daten unterschiedlich lang sein sollen/können ist eine Angabe wieviele Datenbytes gesendet werden recht hilfreich. A. Zöller
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.