mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Datenübertragung über RS232


Autor: Klaus Skibowski (skibby)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: rtfm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Klaus Skibowski (skibby)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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 ...

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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...

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Klaus Skibowski (skibby)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank,
warum bin ich da nicht selber draufgekommen ?
Manchmal sieht man den Wald vor lauter Bäumen nicht :-)

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: Helmut Lenzen (helmi1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>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

Autor: Klaus Skibowski (skibby)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke an alle,

da ich momentan nur 16-bit Werte übertrage werde ich die Methode von
Karl-Heinz implementieren.

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

Gruß, Klaus

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Klaus Skibowski (skibby)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo setzt man bei USB am besten an ?
Wo gibt es gute Doku ?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.