Forum: HF, Funk und Felder kleines Funkübertragungsprotokoll für arduino schreiben


von Bene (Gast)


Lesenswert?

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

von Uwe S. (de0508)


Lesenswert?

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 ?

von Purzel H. (hacky)


Lesenswert?

Was soll das Ganze denn werden ? Offensichtlich sind Nullerlei (0.0) 
Grundlagen vorhanden.

von Bene (Gast)


Lesenswert?

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.

von Max H. (hartl192)


Lesenswert?

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
von Bene (Gast)


Lesenswert?

Hallo, danke erst mal.

also das Funkmodul ist ein RFD21815.

von uwe (Gast)


Lesenswert?

> das bekomme ich aber nicht hin
Warum nicht, zeig mal Code...

von Bene (Gast)


Lesenswert?

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");


  }
}

von Bene (Gast)


Lesenswert?

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..

von Bene (Gast)


Lesenswert?

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");


  }
}

von Purzel H. (hacky)


Lesenswert?

Werte zwischen 0 und 255 kann man als ein einzelnes byte uebertragen... 
Ohne firlefanz drum herum.

von A. Zöller (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.