Hi, Ich habe ein kleines Problem. Ich lese mit einem MSP430(Im Moment Olimex Developer Board 169 LCD, Später was auch immer benötigt wird) 3 Sensoren ein. Da die Sensoren mit 1000 Hz abgetastet und mit 12 Bit A/D gewandelt werden ensteht eine rießen Datenmenge(die ich per Funk . Um diese dann mittels UART zu übertragen, habe ich mir überlegt zu jedem Sensor bei jedem Sendedurchgang 2 Bytes zu senden. 6 Bit Daten 2 Bit zur Identifizierung des Sensors. Soweit Sogut. Habe 2 Chars mit meinen 8 Bit wieder in ein int umgewandelt. Jedoch hänge ich jetzt bei dem Problem mit welcher Übertragungsart ich meinen Datenstrom so gestallten kann, dass das alles so funktioniert wie cih mir das vorstelle. Hat jemand vieleicht einen Tipp für mich? Vielen Dank MfG Markus
markus markus schrieb: > Da die Sensoren mit 1000 Hz abgetastet und mit 12 Bit A/D gewandelt > werden ensteht eine rießen Datenmenge(die ich per Funk . ?
Welche Bandbreite ermöglicht denn dein Funkkanal überhaupt? Netto sind das schon mal 1000*3*12bit/s, also 36kBit, ohne jedes Protokoll.
Naja, wie man das am besten überträgt. Zur Info, zur Übertragung verwend ich ZigBee. Also vermute ich mal UART is am besten. Aber in welchem "Format" schreib ich die Daten da hinein, oder kann ich direkt meine Integers übergeben? Die Baud Rate muss ich wie meine Datenmenge pro Sekunde wählen? Ich hoff jetz ist mein Problem ein bisschen klarer. Vielen Dank schon im Voraus!
Kommt natürlich auf die Gegenseite an - ich nehme an, die programmierst du auch? Bandbreite ist also genug da. Dann musst du weiter überlegen. Ist es kritisch, wenn mal ein Datensatz verlorengeht? Ist es kritisch, wenn mal ein Wert verfälscht wird? Ich habe keine Ahnung, was bei ZigBee schon an Protokoll auf der HF-Seite läuft, wahrscheinlich ist das schon relativ sicher. D.h. was du reinschiebst, kommt auch auf der anderen Seite raus. Pack es doch fürs erste in einen einfachen ASCII-Rahmen (reine Binärübertragung hat so ihre Tücken). #define STX 0x02 //start of text #define ETX 0x03 //end of text putchar (STX); printf ("%u;%u;%u\r\n", Sensor1,Sensor2,Sensor3); putchar (ETX); Beim Empfang wartest du auf das STX-Zeichen, die anschliessenden Datenwerte und das ETX. Erzeugt mehr traffic als nötig, kann aber z.B. mit jedem Terminalprogramm angezeigt werden.
Sorry aber jetzt bin ich ganz verwirrt. Wie kann ich mit Printf eine Datenübertragung starten? Wohin schreibt er dann bzw. wo stell ich die Parameter für die Übertragung ein? Dankeschön aufjeden Fall schonmal für die Hilfe!
Üblicherweise schreibt printf () auf die serielle Schnittstelle, also UART. Diese musst du vorher so einstellen, dass das ZigBee-Modul dies versteht (Baudrate, Anzahl der Datenbits, parity, Anzahl der stop-bits). Normalerweise geht das mit AT-Befehlen. Vielleicht sagst du mal, um welches Modem es sich handelt?
Ich verwende das normale X-Bee Modul. Falls du das mit Modem meinst. Wenn nicht bitte kurze Erklärung. Verdammt und ich dachte ich kenn mich mitlerweile schon ein bisschen aus ;)
Hast du schon mal ein Byte per RS232 übertragen? Hast du dir die Demos oder sonstigen Code zur Übertragung 1 Bytes schon mal angesehen? Hast du das bei dir konkret in einem Testprogramm schon mal ausprobiert und benutzt? Hast du dabei probiert, ein ZigBee zwischenzuschalten? Wenn nicht, dann mach das erst mal, ehe es dann in der Reise weitergeht, wie man mehrere Bytes (konkret einen C-String) überträgt.
Hm, da steht nichts über die Schnittstelle drin. Ich glaub auch, dass du ne Stufe tiefer anfangen musst.
Hat wer von euch ein gutes Tutorial für diese ersten Schritte bei der Datenübertragung? Hab da nix gscheites gefunden...
So, habe mal das Datenblatt überflogen - steht alles drin. Nimm den transparenten Modus, setzte die Baudrate (ATBD) auf 115200 und es wird funktionieren. Du kannst damit problemlos Binärdaten übertragen. Programming Examples Setup Sample Configuration: Modify RF Module Destination Address Sample Configuration: Restore RF Module Defaults The programming examples in this section require the installation of Digi's X-CTU Software and a serial connection to a PC. (Digi stocks RS-232 and USB boards to facilitate interfacing with a PC.) 1. Install Digi's X-CTU Software to a PC by double-clicking the "setup_X-CTU.exe" file. (The file is located on the Digi CD and www.digi.com/xctu.) 2. Mount the RF module to an interface board, then connect the module assembly to a PC. 3. Launch the X-CTU Software and select the 'PC Settings' tab. Verify the baud and parity settings of the Com Port match those of the RF module. NOTE: Failure to enter AT Command Mode is most commonly due to baud rate mismatch. Ensure the ‘Baud’ setting on the ‘PC Settings’ tab matches the interface data rate of the RF module. By default, the BD parameter = 3 (which corresponds to 9600 bps). Da du keine Daten >12bit übertragen willst, bietet sich ein einfaches Verfahren zur Einsortierung der Daten an. Das Daten-Highbyte wird nie grösser als 0x0f sein. Du sendest also 2 beliebige Bytes >0x0f, (gerne wird 0xAA 0x55 genommen). Diese kommen in den Daten niemals vor. Du sendest also: 0xAA 0x55 High Sensor1 Low Sensor1 High Sensor2 Low Sensor2 High Sensor3 Low Sensor3 Und dann von vorn. Beim Empfang prüfst du die Bytes, bis du 0xAA und 0x55 erkennst, anschliessend setzt die folgenden Bytes wieder zu einem 12bit-Wert zusammen. Man kann auch mit 6 Bytes auskommen, aber so ist es erst mal einfacher. Macht 8Byte, incl. Start- und Stopbit 80Bit pro frame, bei 1000 Messwerten/s also 80000bit/s.
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.