Forum: Mikrocontroller und Digitale Elektronik uart protokoll AUREL RTF-868


von Michael Ackermann (Gast)


Lesenswert?

Hallo Zusammen,

ich habe zwar mal vor 25 Jahren Informationselektroniker gelernt mich
aber seit dem nicht mehr mit Mikrokontroller beschäftigt.

Nun will ich mich wieder in die Materie einarbeiten und hab da mal ne
Frage zur Datenübertragung zu einem Aurel RTF-868 Tranceiver.

Ich habe diesen an einen Uart (MAX232) angeschlossen und möchte mit 
diesem Daten übertragen.

   \/
    |
|---------|      |----------|
| Aurel   |------| MAX323   |-----PC(rs232)
|---------|      |----------|

vise versa auf der Gegenseite.

folgendes Protokol habe ich aus dem Datenblatt
------
Each command sent through serial port is composed as follows:

|CmdLSB|CmdMSB|Address|Byte0|Byte1|Byte2|Byte3|Byte4|Byte5|Byte6|Byte7|

First two bytes indicate the command (Cmd) to be executed
Address indicate the address of the node, to which the command should be 
sent.
------

Wie muss ich das Paket senden damit das AUREL Modul was damit anfangen 
kann.
z.B. der Einfachkeit halber mal ein Ping senden
Aus dem Datenblatt:
Command: PING, Value 0x0002 Rückgabewert: Byte5-6: Frimware Version, 
Byte7 aktuelles Profil
Command: Send_Packet, Value 0x0000, Payload: UserData

Wie packe ich die Daten zusammen um mit dem Kerlchen zu kommunizieren.
Programmieren kann ich noch in PHP. C ist schon sehr sehr lange her.
Mit Telnet zum Test kann ich auch umgehen.

Es geht hier nur um das verstehen des Protokolles zum senden und 
empfangen der Daten.

Kann mir jemand Nachhilfeuntericht geben oder Lektüre dazu empfehlen.

Danke vorab
Michael

von Karol B. (johnpatcher)


Lesenswert?

Michael Ackermann schrieb:
> und hab da mal ne
> Frage zur Datenübertragung zu einem Aurel RTF-868 Tranceiver.

Nach ein wenig Recherche bin ich wohl zu dem Schluss gekommen, dass du 
wohl RFT (nicht RTF) 868 meinst. Zumindest konnte ich unter dieser 
Bezeichnung ein Datenblatt [1] organisieren, welches o.g. Passagen 
enthält. In Zukunft solltest du Datenblätter lieber gleich verlinken, 
weil wohl nur die wenigsten Lust haben das heraus zu suchen und wohl 
kaum einer schon genau mit diesem Modul gearbeitet hat.

> Ich habe diesen an einen Uart (MAX232) angeschlossen und möchte mit
> diesem Daten übertragen.

Gibt es auch einen entsprechenden Empfänger?

> folgendes Protokol habe ich aus dem Datenblatt

Ja, soweit richtig.

> Wie muss ich das Paket senden damit das AUREL Modul was damit anfangen
> kann.
> z.B. der Einfachkeit halber mal ein Ping senden
> Aus dem Datenblatt:
> Command: PING, Value 0x0002 Rückgabewert: Byte5-6: Frimware Version,
> Byte7 aktuelles Profil
> Command: Send_Packet, Value 0x0000, Payload: UserData

Hier hast du einige Dinge weggelassen, die essentiell sind. Schaue dir 
mal Seite 13 in o.g. Datenblatt an. Dort wird schematisch dargestellt, 
wie das Ganze abläuft. Die Tabelle auf Seite 14 gibt dir dann eine 
Übersicht über mögliche Kommandos. Hier hast du z.B. die eigentliche 
Payload nicht genannt, sondern nur den "Rückgabewert". Dieser kommt aber 
schon vom Empfangsmodul.

> Wie packe ich die Daten zusammen um mit dem Kerlchen zu kommunizieren.

Das hast du doch im Prinzip schon selbst heraus gefunden:

> |CmdLSB|CmdMSB|Address|Byte0|Byte1|Byte2|Byte3|Byte4|Byte5|Byte6|Byte7|

Wichtig ist nur noch zu wissen wofür "LSB" und "MSB" steht. Beim 
Kommando handelt es sich nämlich um einen 16-Bit Wert, d.h. es gibt zwei 
Bytes - ein höherwertiges (MSB) und ein niederwertiges (LSB).

Dein Ping Kommando würde also so aussehen (der Verständlichkeit halber 
in Binär):
1
00000010 00000000 00101011 00000000
2
 CmdLSB   CmdMSB  Address    NC

Die Adresse des Empfängers hier (0x2B) wird sich bei dir vermutlich 
unterscheiden, insofern ist das anzupassen. Ich bin gerade zu unkreativ 
heraus zu finden, wofür "NC" steht. Allerdings vermute ich, dass der 
Inhalt an dieser Stelle keine Rolle spielt.

Nach Absetzen dieses Kommands erhältst du dann eine Antwort zurück, 
wobei du die Bedeutung der Bits in der Antwort ja oben schon angedeutet 
hast.

Was noch wichtig ist, ist die korrekte Einrichtung der seriellen 
Schnittstelle (Baud Rate, Anzahl der Daten-, Parity und Stopp-Bits) - 
ansonsten wird das Ganze nicht funktionieren.

> Programmieren kann ich noch in PHP.

Ist hierfür ziemlich ungeeignet. Es gibt wohl ein paar Bibliotheken, die 
sich dem Thema widmen, allerdings ist das sicherlich nicht der gedachte 
Einsatzzweck dieser Programmiersprache (und das sage ich als jemand der 
auch ab und an gerne in PHP programmiert). Für erste Tests sollte ein 
Terminal ausreichen, ansonsten ist C sicherlich nicht verkehrt, wobei 
auch andere Sprachen entsprechende Möglichkeiten bieten - zum Teil sogar 
plattformunabhängig.

Mit freundlichen Grüßen,
Karol Babioch

[1]: http://www.farnell.com/datasheets/1674415.pdf

: Bearbeitet durch User
von Bender (Gast)


Lesenswert?

Sehr gut erklärt,

aber benötigt das Modul nicht alle 8 Bytes nach dem Ping command? Bzw 
nach dem command/adress?
Ich les das jetzt aufs erste nirgends raus, aber ich denk alle 8 Byte 
("Each command sent through serial port is composed as follows") oder 
bei NC eben gar keine

von Karol B. (johnpatcher)


Lesenswert?

Bender schrieb:
> aber benötigt das Modul nicht alle 8 Bytes nach dem Ping command?

Ja, du hast natürlich recht. Ich bin irgendwie von Bits statt Bytes 
ausgegangen. Wofür NC genau steht, weiß ich - wie gesagt - nicht genau. 
Zumindest in dieser Arduino Library [1] werden mittels der Funktion 
"RFTide::setZeroPayload()" alle Payload Bytes auf 0 gesetzt. Ob die 
Library funktioniert, weiß ich allerdings nicht ;).

Mit freundlichen Grüßen,
Karol Babioch

[1]: 
https://github.com/mircose/RFTide-shield-Arduino/blob/master/RTFide.cpp

von Michael Ackermann (Gast)


Lesenswert?

Hallo Karol,

danke für die sehr gute Erklärung.
Das hilft mir auf jeden Fall weiter.

NC bedeutet das kein Payload benötigt oder kein Rückgabewert erzeugt 
wird. So lese ich das auf jeden Fall aus dem Datenblatt.
Ich werde beim Testen sehen ob da was ankommt oder nicht.

Dann mach ich "alter Sack" mich mal an das testen. Mal schaun was da für 
Projekte entstehen.

Vielen Dank und Grüße
Michael

von Karol B. (johnpatcher)


Lesenswert?

Michael Ackermann schrieb:
> NC bedeutet das kein Payload benötigt oder kein Rückgabewert erzeugt
> wird.

Wie gesagt: Zumindest in o.g. Arduino Library wird die Payload bei 
Befehlen mit NC auf 0 gesetzt (die vollen 8 Bytes). Ich gehe also schon 
davon aus, dass die Payload zwar ignoriert wird, aber durchaus erwartet 
wird.

Mit freundlichen Grüßen,
Karol Babioch

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.