Forum: Mikrocontroller und Digitale Elektronik Datenkodiereung für Uart


von Tilo (Gast)


Lesenswert?

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

von Oops (Gast)


Lesenswert?

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

von Oops (Gast)


Lesenswert?

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

von Stefan (Gast)


Lesenswert?

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!

von Jörg S. (Gast)


Lesenswert?

> Bei uart habe ich aber nur TX und RX.
Ein paar mehr Signale gibt's da u.u. schon noch (DSR, DTR, RTS...)

von Stefan (Gast)


Lesenswert?

>> 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!

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
Noch kein Account? Hier anmelden.