Datenkodiereung für Uart

Gast #818031
Hallo

Ich soll für ein Praktikum einen kleinen Datenlogger/Frequenzgenerator
programmieren. Eine Abtastrate von 1kHz ist ausreichend. Die
Messdaten sollen über uart an einen PC geschickt werden, der die Daten
dann anzeigt. Der Frequenzgenertor soll sinus/rechteck/dreieck ausgeben.
Die Steuerung soll über den PC erfolgen.

An und für sich ein recht überschaubares Projekt.

Im Moment mache ich mir darüber Gedanken, wie die Daten über Uart
transportiert werden sollen. Ich spiele vor einigen Wochen mit
einer SD-Card herum. Da war es einfach. Sobald CS low war, wusste
die Karte, dass die Übertragung beginnt. Bei uart habe ich aber nur TX
und RX. Mein Problem ist, dass ich noch nicht so genau weiß, wie ich
ein einen Start-Code erzeugen soll, damit das Programm erkennen kann,
wo ein Befehl los geht.

Ich kann mich noch an "Bitstufing" erinnern, wodurch dafür gesorgt wird,
dass eine bestimmte Zeichenfolge nur im Start-Code vorkommt.

CRC sagt mir auch noch etwas. Dann müsste ich aber das "CRC-Fenster" 
über
den Empfangpuffer schieben, bis ein Treffer gelandet wird. Ich denke das
ist verhältnismäßig rechenintensiv.

Den Befehl aus mehreren Bytes wollte ich mit einer Union/Struct
in die Datentypen umwandeln, die ich brauche. Das würde mit Bitstuffing
nicht mehr so einfach funktionieren.

Habt ihr ein paar Ansätze für mich?

Vielen Dank,

Tilo
Gast #818037
Das allereinfachste wäre vielleicht die Daten in ASCII umzuwandeln und 
dann zu übertragen. Auf die Weise kommen nur 0-9 und A-F in den 
Nutzdaten vor.
Dann kannst Du die restlichen Zeichen als Steuerworte benutzen. 
Allerdings sind die Daten dann doppelt so gross und auf der Gegenstelle 
musst Du sie wieder zurückwandeln.

Gruss
Oops
Gast #818040
Bit-Stuffing hat hier nichts damit zu tun.
Das macht eher Sinn an Stellen wo der Takt aus dem Datensignal zu 
reproduzieren sein soll.

CRC wäre aber sinnvoll und mit der oben genannten Methode zu 
kombinieren.

Gruss
Oops
Gast #818041
Also auf Byte-Ebene erledigt das die UART schon selbst (Startbit - 
Stopbit).
Für Deine gesamte Übertragung solltest Du Dir ein Protokoll ausdenken, 
das Deinen Anforderungen genügt. Entweder Dein übertragene String 
enthält an einer festen Position eine Längenangabe des gesamtem Strings 
oder Du benutzt Start und Endkennungen (Steuerzeichen: SOF, EOF). Das 
Problem dabei ist, dass ein Daten-Zeichen, welches zufälligerweise SOF 
oder EOF ist, durch was anderes ersetzt werden muss!
Gast #818059
>> Bei uart habe ich aber nur TX und RX.
>Ein paar mehr Signale gibt's da u.u. schon noch (DSR, DTR, RTS...)
TX und RX reichen prinzipiell aber vollkommen aus!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.