Datenübertragung über RS232

OP #1481022
Hallo allerseits,

ich habe eine Mikrocontrolleranwendung (STM32), die 2 ADC-Kanäle 
ausliest und jeweils 4096 Werte pro Kanal in einem Array speichert.
Momentan übertrage ich die Werte als Strings mit Leerzeichen als Trenner 
per RS232 an den PC (460800 Bit/s). Das klappt auch einwandfrei.
Meine Frage ist, wie ich die Daten platzsparender und damit auch 
schneller übertragen kann ? Ist USB eine sinnvolle Alternative ? (Die 
Möglichkeit dazu wäre vorhanden).

Viele Grüße ,
Klaus SKibowski
Gast #1481031
Frage: Warum brauchst Du Trenner ?
Überträgst Du die Daten im ASCC-Format ?
Wenn ja, stelle das um auf normale Binärdaten und die Übertragung ist 
wesentlich kürzer und schneller.
OP #1481058
Den Trenner brauch ich, damit das PC-Programm die Werte voneinander 
unterscheiden kann.
Wie kann ich Binärdaten übertragen ? Und wie fiesel ich die am PC wieder
zusammen ? Hast Du mir Quellen wo ich das nachlesen kann ?
Ich habe bisher mit RS232 nur ASCII-Daten übertragen ...
#1481064
Klaus Skibowski schrieb:
> Den Trenner brauch ich, damit das PC-Programm die Werte voneinander
> unterscheiden kann.
> Wie kann ich Binärdaten übertragen ? Und wie fiesel ich die am PC wieder
> zusammen ?

Ich schätze mal, dass deine Werte max. 16 Bit haben werden. Wenn du die 
einfach so überträgst, muss dein PC-Programm einfach immer 2 Bytes als 
einen Wert zusammenfassen...
#1481067
Klaus Skibowski schrieb:
> Den Trenner brauch ich, damit das PC-Programm die Werte voneinander
> unterscheiden kann.
> Wie kann ich Binärdaten übertragen ? Und wie fiesel ich die am PC wieder
> zusammen ? Hast Du mir Quellen wo ich das nachlesen kann ?
> Ich habe bisher mit RS232 nur ASCII-Daten übertragen ...

ASCII sind auch nur Bytes mit Zahlenwerten.
Deine uint16_t sind auch nur Zahlen, wobei allerdings jede Zahl aus 2 
Bytes besteht.

Wenn du also jede einzelne Zahl in 2 Bytes zerlegst, kannst du beide 
nacheinander auf die Reise schicken.

Alelrdings hast du wieder das Problem: Woher weiß ich welches Byte 
welches ist :-)
Du musst dir daher einen Synchronisiermechanismus einfallen lassen (das 
kann zb auch sein: Der PC sendet an den µC das Kommando "Daten marsch" 
und der µC fängt an die Werte nacheinander, High-Byte / Low-Byte 
rauszuspielen. Da der PC weiß, dass immer 2 Bytes ankommen, die 
Reihenfolge kennt und auch weiß wieviele Daten da kommen, kann er die 
einzelnen Bytes wieder richtig zusammensetzen.
#1481071
Aufpassen muss man eigentlich lediglich auf PC-Seite, dass man dort den 
Treiberschichten auch mitteilt, dass sie gefälligst alle Bytes so 
weiterreichen sollen, wie sie sie empfangen haben. Das kann auf manchen 
Betriebssystemen ein Problem sein, muss aber nicht.
Auf µC-Seite ist das sowieso kein Problem. Dort hat man überlicherweise 
kein Betriebssystem mit dem man sich rumstreiten muss, wie jetzt die 
UART bedient wird.
#1481085
>Wie kann ich Binärdaten übertragen ?

Im Prinzip genauso wie ASCII Daten

>Und wie fiesel ich die am PC wieder
>zusammen ? Hast Du mir Quellen wo ich das nachlesen kann ?
>Ich habe bisher mit RS232 nur ASCII-Daten übertragen ...

Man kann sich ein Format ueberlegen das eine platzsparendere Art der 
Datenuebertragung macht ohne auf eventuelle Trenner verzichten zu 
muessen.

z.B.

Uebertragung einer 16Bit Integer:

man kann die rein binaer uebertragung in 2 Byte hat dann allerdings 
keine Codes mehr frei fuer eventuelle Trenner.

Rein in ASCII kaemmst du auf 5-6 Zeichen (mit oder ohne Vorzeichen).

Du kannst aber auch etwas dazwischen machen.

z.B. so:

00xxxxxx     erste 6 Bit der Integer
01yyyyyy     zweite 6 Bit Integer
10zzzzzz     dritten 4 Bit der Integer
11mmmmmm     6 Bit fuer zusatzcodes etc.

So hast du Uebertragungszeit gespart und troztdem kannst du Trenner oder 
andere Codes mituebertragen.

Solche Verschachtelten Codes wurden frueher von einigigen 
Druckerherstellern (Canon Laserprinter) eingesetzt um die Uebertragung 
zu beschleunigen und trotzdem ein scannbares Format zu haben.

Du koenntes sowas aehnliches fuer deine Daten dir ausdenken.


Gruss Helmi
#1481137
@Klaus Skibowski (skibby)

>Nur mal so: Hat jemand mal eine Datenübetragung über USB realisiert ?

Das haben schon tausende. Wobei man aber unterscheiden muss zwischen 
echtem USB und RS232 Emulation über USB mit FT232 & Co. Letztere sind 
deutlich einfacher zu handhaben, erstere sind schneller.

MfG
Falk

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 16 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.