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