mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Bibliothek zum bidirektionalen Datenaustausch?


Autor: Alexander Poddey (alexatmikro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich suche eine Bibliothek, welche den bidirektionalen (seriellen) 
Datenaustausch zwischen µC und PC (Programm auch in C) eine Stufe 'über' 
der low level Kommunikation managen kann.


Was meine ich mit low-level:
In verschiedenen Projekten verwende ich verschiedene (virtuell) serielle 
Verbindungen zwischen µC und PC (derzeit USB mit dem virtual serial code 
von atmel, PC seite boost::asio). Mit low-level meine ich die serielle 
Datenübetragung, also am 'Ende der Linie' fallen 8-bit Datenblöcke 
'raus'.


Was meine ich mit 'eine Stufe drüber':
Das ist die Schicht, welche die Datenblöcke zusammensetzt, erkennt, daß 
es sich um Daten oder ggf. einen Befehl handelt und entsprechende 
Aktionen ausfürt.


Bisher habe ich einen unidirektionalen Ansatz (µC ist der Sender, PC der 
Empfänger).
Ich kann Datensatzstrukturen definieren, also z.B.
Format 1: float, uint32_t, uint8_t
Format 2: uint32_t, uint8_t, uint8_t

Senderseitig kann ich vom Programm aus die einzelnen Daten für 
verchiedene Formate in einen 'Zwischencontainer' schreiben, und, sobald 
der Satz vollständig ist rausschicken.

Die übertragung sieht dann (xml-inspiriert) so aus:
<f>1</f><d> .......</d><d> .......</d><d> .......</d>
<f>2</f><d> .......</d><f>1</f><d> .......</d> ...

Ich gebe bekannt, daß nun daten nach format 1 kommen (-> der sender weiß 
wie er die nächsten x bit interpretieren soll).
<d> kapselt die daten (zur kontrolle u.a. checksum). Irgenwann sende ich 
einen Block nach Format 2 und dann wieder Format 1.


Das ganze würde ich nun erweitern um Befehle, Befehle mit Argumenten und 
Bidirektionalität.
Beispiel:
Ich sende vom PC aus den Befehl 'schalte port ab: port1'.



Bevor ich das mache wollte ich mal nachfragen ob's sowas nicht schon 
irgendwo (in C) gibt. Man muß das Rad ja nicht neu erfinden...

Gruß
Alex

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Ob es das in C gibt weiß ich nicht. Aber in Pascal nennt sich das 
Stream.

MfG Spess

Autor: Thomas S. (klegom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Poddey schrieb:
> Bevor ich das mache wollte ich mal nachfragen ob's sowas nicht schon
> irgendwo (in C) gibt. Man muß das Rad ja nicht neu erfinden...

Ja, Datenübertragungsprotokolle gibt es hunderte.

Man baut das auch im allgemeinen in "Schichten" auf, wie Du das ja schon 
angefangen hast.

In der Ebene2, das heißt eine oberhalb der RS232 macht man normalerweise 
ein Protokoll, das 3 Dinge beherrscht:

1. Block Beginn und Block Ende Kennzeichnen
2. Ein "Prüfzeichen" um Übertragungsstörungen zu erkennen
3. Einen Mechanismus um den Datenfluss zu steuern (Der Empfänger kann 
den Sender bremsen, damit die Daten nicht zu schnell kommen)

Beispiele für ein solches Protokoll: PPP oder LSV

Eine Anmerkung noch: Wenn Du ein eigenes Protokoll erfinden willst, dann 
schau Dir doch die ASCII Tabelle mal genauer an. Im unteren Bereich gibt 
es Zeichen, die dafür vorgesehen sind. Z.B. "Start of Text" und "End of 
Text" usw. Das macht das erkennen des Blockanfangs und Blockendes viel 
einfacher.

XML ist ein DATEIFORMAT und für serielle Datenübertragung nicht sehr 
geeignet. Erstens ist der overhead sehr groß und zweitens brauchst Du 
einen Parser, weil Du ja immer mehrere Zeichen gemeinsam kennen musst, 
um z.B. einen Anfang zu erkennen.

Wenn Du ein Standard Protokoll implementierst, dann könnte Dein PC 
direkt mit dem Mikrocontroller sprechen, ohne dass Du am PC was 
programmieren musst. Du müsstest dann z.B. PPP, IP und UDP 
Ipmlementieren.

Hier ist beschrieben wie PPP geht: 
http://www.rfc-editor.org/rfc/rfc1661.txt

Autor: Alexander Poddey (alexatmikro)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thomas,

Du hast recht: ich will ja eigentlich kein eigenes protokoll erfinden - 
das haben schlauere vor mir schon gemacht.

Am liebsten würde ich auf eine existierende implementierung (µC 
Zielplattform: AT91SAM7 und ATMEGA) zurückgreifen.

Gibts da was?

Danke
Alex

Autor: Thomas S. (klegom)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alexander Poddey schrieb:
> am liebsten würde ich auf eine existierende implementierung (µC
> Zielplattform: AT91SAM7 und ATMEGA) zurückgreifen.
>
> Gibts da was?

Ich kenne leider nichts.

Autor: Stephan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi
schau dir mal MODBUS an. Das Protokoll ist leicht zu implementieren.
geholfen wird dir auf www.modbus.org oder hier im Forum (siehe auch 
Linksammlung)

mfg
Stephan

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.