Forum: Mikrocontroller und Digitale Elektronik 1 Byte übertragen


von markus m. (mspmarkus)


Lesenswert?

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

von Kai S. (hugstuart)


Lesenswert?

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 .

?

von H.Joachim S. (crazyhorse)


Lesenswert?

Welche Bandbreite ermöglicht denn dein Funkkanal überhaupt?
Netto sind das schon mal 1000*3*12bit/s, also 36kBit, ohne jedes 
Protokoll.

von markus m. (mspmarkus)


Lesenswert?

250 000 bps

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, wo ist denn dann dein Problem?

von markus m. (mspmarkus)


Lesenswert?

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!

von H.Joachim S. (crazyhorse)


Lesenswert?

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.

von markus m. (mspmarkus)


Lesenswert?

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!

von H.Joachim S. (crazyhorse)


Lesenswert?

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

von markus m. (mspmarkus)


Angehängte Dateien:

Lesenswert?

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

von Karl H. (kbuchegg)


Lesenswert?

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.

von H.Joachim S. (crazyhorse)


Lesenswert?

Hm, da steht nichts über die Schnittstelle drin.
Ich glaub auch, dass du ne Stufe tiefer anfangen musst.

von markus m. (mspmarkus)


Lesenswert?

Hat wer von euch ein gutes Tutorial für diese ersten Schritte bei der 
Datenübertragung? Hab da nix gscheites gefunden...

von H.Joachim S. (crazyhorse)


Lesenswert?

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