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
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
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
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!
> Bei uart habe ich aber nur TX und RX.
Ein paar mehr Signale gibt's da u.u. schon noch (DSR, DTR, RTS...)
>> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.