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