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
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.
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 ...
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...
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.
Vielen Dank, warum bin ich da nicht selber draufgekommen ? Manchmal sieht man den Wald vor lauter Bäumen nicht :-)
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.
>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
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
@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
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.