Uart Kommunikation

#7306331
Lesenswert?

Klar, das ist eine recht klare, einfache Fragestelllung. Aber die wirkliche Frage ist nicht, ob hier Jemand diese Frage beantworten kann, sondern warum Du sie nicht beantworten kannst.

Zeig doch mal mit einigen Ausführungen, wo Dein Verständnisproblem liegt, was Du schon so an intellektuellem Aufwand getrieben hast, oder auchh nur Deine Erwartungshaltung, warum wir deine Aufgaben lösen sollen.

Gast #7306332
Lesenswert?

Anunaya schrieb im Beitrag #7306323:> kann jemand bitte diese Frage lösen ? Ja. Du! Es sind Deine Hausaufgaben.

Es gibt vielleicht etwas Hilfe, wenn Du erstmal genau schreibst, wie weit Deine eigenen Überlegungen bisher gingen.

OP #7306339
Lesenswert?

Danke für die Rückmeldung. Ich bin erste mal in diese Forum und ich wusste die Regeln nicht .

Also ich denke ich wähle 9600 bit/ s weil für Uart Kommunikation 9600 Bit/s sinnvoll ist und pärität Bit ohne weil ich brauche parität Bit nur Fehler zu überprüfen. Ich glaube 7 Bit/s werde ich wählen weil dazu auch noch statt und stop Bit vorkommen und mit 8 Bit/s wäre die Messwerte Übertragung langsamer. Ist das korrekt?

#7306358
Lesenswert?

Anunaya schrieb:

Also ich denke ich wähle 9600 bit/ s weil für Uart Kommunikation 9600 Bit/s sinnvoll ist und pärität Bit ohne weil ich brauche parität Bit nur Fehler zu überprüfen. Ich glaube 7 Bit/s werde ich wählen weil dazu auch noch statt und stop Bit vorkommen und mit 8 Bit/s wäre die Messwerte Übertragung langsamer. Ist das korrekt?

Wenn Du für jede Deiner obigen Entscheidungen das exakte Gegenteil nimmst, wird's sinnvoll und richtig. Aber Überlege Dir halt auch, warum. Deine Begründungen der Art "weil für Uart Kommunikation 9600 Bit/s sinnvoll ist", kannst du getrost vergessen, denn wenn es eine solche pauschale Antwort gäbe, dann hätte Dein Lehrer gar nicht erst die Frage nach der Übertragungsrate gestellt.

#7306364
Lesenswert?

Anunaya schrieb:

Also ich habe geschrieben Was ich könnte , mehr fällt mir gar nicht ein . Bitte kann jemand mir die hinwiese geben wie ich die löse ? Ihr braucht nicht Lösung zu geben aber nur verraten wie ich denken soll ?

Na ja: denke doch mal so:

Du hast die Wahl zwischen drei Autos: eines kann 50 Km/h, eines 100, das dritte 200 Km/h fahren. Du wirst gefragt, wit welchem Du am schnellsten eine Last transportieren kannst. Welches Auto wählst Du?

Wenn Du diese Nuss geknackt hast, bastelst Du Dir einen ähnlichen Vergleich mit der maximalen Nutzlast eines Autos und der Gesamtlast, die Du transportieren sollst. Was kannst Du mit einer Fahrt transportieren, und wieviel mal musst Du für die Gesamtlast die Strecke fahren) So könnte es was werden mit einer analytischen Denkweise...

#7306388
Lesenswert?

8n1 sind aber 10 Bits. Bei 15 Bit pro Meßwert und rein binären Übertragung werden 2 x 10 Bits benötigt. Wenn der Empfänger mal außer Tritt kommt, so interpretiert er den Meßwert falsch, da hilft auch kein 0- oder 1-Bit vorn oder hinten am 15-Bit-Meßwert zur Synchronisation.

Den Meßwert als ASCII-kodierten Hexwert übertragen und vorweg noch ein Nicht-ASCCI-Zeichen zur Synchronisation senden sind 5 x 10 Bits. Und die mit 38k übertragen.

Blackbird

Beitrag #7306406 wurde von einem Moderator gelöscht.
#7306407
Lesenswert?

Martin schrieb:

@ Lothar : Ich glaube zur Lösung der Aufgabe gehört nicht noch ein Protokoll zu berücksichtigen.

Naja, zu einem Protokoll gehört dann aber auch ein Re-Transmitting des falschen Meßwertes. Dann braucht man noch eine Nummerierung und ein paar Befehle, ...

Bei der von mir vorgeschlagenen Methode wird nur ein Meßwert falsch übertragen, ohne jedoch alle folgenden.

Blackbird

Gast #7306417
Lesenswert?

Lothar J. schrieb:

Bei der von mir vorgeschlagenen Methode wird nur ein Meßwert falsch übertragen, ohne jedoch alle folgenden.

Trotzdem ist es ein einfaches Protokoll. Re-Transmitting usw. ist nicht bei jedem Protokoll notwendig.

Zum anderen würde es dann aber auch noch küzer / schneller gehen.

Gast #7306419
Lesenswert?

am schnellsten ist 8 bit ohne stop bit und ohne parity Begründung: der zu übertragende Messwert hat 15 Bit, nehme ich 7bit pro Paket muss ich 3 Pakete verwenden. Bei 8 Bit reichen auch 2 Baud 38400 ist klar, schneller gleich besser macht also 2x (startbit Datenpaket) => 18 Bit pro übertragenen Messwert.

verstanden?

Anselm

Moderator (Firma: Titel) Persönliche Seite #7306429
Lesenswert?

Martin schrieb:

Ich glaube zur Lösung der Aufgabe gehört nicht noch ein Protokoll zu berücksichtigen.

Das sollte man dann aber dazuschreiben...

Denn wenn ich schon nicht erkennen muss, welches das High- und welches das Low-Byte ist, dann würde ich in das 16. unbenutze Bit jeweils noch 1 Bit eines zusätzlichen Datenworts "einschleusen" und könnte dann tatsächlich die volle Bandbreite nutzen: 1 Start + 8 Daten + 1 Stop ergibt 10 zu übertragende Bits pro Datenbyte. so könnt eich 3840 Byte/s übertragen. Und in 30 solcherart übertragenen Bytes passen dann 15 + 1 solcher 15-Bit Messwerte.

Ergo könnte ich mit meinem Verfahren 3840/30 * 16 = 2048 Messwerte pro Sekunde übertragen (statt nur 1920, wenn ich das 16. Bit unbenutzt lasse).

Gast #7306440
Lesenswert?

Lothar M. schrieb:

Martin schrieb:

Ich glaube zur Lösung der Aufgabe gehört nicht noch ein Protokoll zu berücksichtigen.

Das sollte man dann aber dazuschreiben...

Ich würde das umdrehen ... Was nicht da steht muss nicht berücksichtigt werden.

Was nicht verboten ist, ist erlaubt ;-)

Gast #7306754
Lesenswert?

Lothar M. schrieb:

Ich glaube zur Lösung der Aufgabe gehört nicht noch ein Protokoll zu berücksichtigen.

Das sollte man dann aber dazuschreiben...

Hast du vergessen, wie deine Ausbildung war? Selbst in meiner Prüfung liess jede zweite Aufgabe Interpretationsspielraum. Wer im Unterricht aufgepasst hat und die Übungsaufgaben gemacht hat, wusste was von einem erwartet wird.

#7306777
Lesenswert?

Einstein schrieb:

Ohne stop Bit ,? Ist auch möglich bei Uart Kommunikation??

Ja zu sagen wäre sicher falsch. In Ausnahmefällen könnte das gehen. z.B. ein Software Uart der die bits einzeln aufgreift ist nach dem achten Datenbit (dem 9. incl Startbit) fertig und kann dann ein weiteres Byte empfangen. Wäre mal interessant zu sehen wie kurz ein Stopbit werden darf bevor der Empfänger kollabiert ;-)

Gast #7306813
Lesenswert?

A. H. schrieb:

Wäre mal interessant zu sehen wie kurz ein Stopbit werden darf bevor der Empfänger kollabiert ;-)

Das dürfte unter anderem von der Toleranz der Taktfrequenzen bei Sender und Empfänger abhängen. Außerdem gibt es nicht den Empfänger. Es wird von der Implementierung abhängen. Wenn man am Framing etwas sparen möchte, ist eine asynchrone Übertragung die falsche Wahl.

#7306836
Lesenswert?

Klar, das Ergeniss würde dann auch nur für den getesten Empfäger stimmen. Wenns schneller gehen soll nimmt man eine höhere Baudrate das bringt mehr als ein Stopbit einzusparen. Und funktioniert dann auch noch wenn ein Gerät ersetzt wird. In den Einstellmöglichkeiten Oben wird das Stopbit nicht erwähnt (1,1.5,2) daher kann man davon ausgehen das es ein Stopbit ist das nicht wegbleiben kann. Somit hat man die Wahl von 9 (7bit,none) bis 11bit (8bit,parity) Datensatzlänge.

#7306879
Lesenswert?

Thilo L. schrieb:

Klar, das ist eine recht klare, einfache Fragestelllung.

Ist sie nicht. Würde man für die 15 Datenbits abwechselnd die UART zwischen 7/8Bit umschalten, ist der Empfang von Datenmüll garantiert. Das fällt also flach.

Da 15 Bits nicht in einen UART-Frame von 8 Bit passen, ist zwingend ein Protokoll notwendig. Da dieses Protokoll aber nicht genannt wird, ist dessen Overhead unbekannt und somit die Frage nicht beantwortbar.

Und neben der Synchronisation des Datenframes ist weiterer Overhead notwendig, um den Haufen von Meßwerten z.B. den jeweiligen Meßpunkten zuordnen zu können.

Eine extrem dreckige Möglichkeit wäre, das Paritätsbit zu mißbrauchen, um low- und high-Byte zu unterscheiden.

Gast #7306892
Lesenswert?

A. H. schrieb:

Ausnahmefällen könnte das gehen. z.B. ein Software Uart der die bits einzeln aufgreift ist nach dem achten Datenbit (dem 9. incl Startbit) fertig und kann dann ein weiteres Byte empfangen.

Nein, es geht nicht.

Wenn Du sagst, es geht nur für bestimmte bitmuster, dann ist das albern. Ohne Stopp können 100 Bits in Folge Low sein. Damit brauchst Du Bitstuffing oder ähnliches und hast keinen sinnvollen Nutzen mehr

Gast #7306915
Lesenswert?

Wolfgang schrieb:

A. H. schrieb:

Wäre mal interessant zu sehen wie kurz ein Stopbit werden darf bevor der Empfänger kollabiert ;-)

Das dürfte unter anderem von der Toleranz der Taktfrequenzen bei Sender und Empfänger abhängen

Und von der Abtastung des Empfängers + jitter/Asymmetrie der Flanken.

Bei perfekter Baudrate und perfekten Flanken (0ns) muss das stoppbit schon 2 abtasttakte lang sein (bzw. 1, weil man 0,5 Bit Reserve an beiden Seiten hat).

Flankenjitter und Asymmetrie gehen direkt ein, baudratendifferenzen in Prozent x Anzahl der Bits (bei 10 Bits und 3% waren das +- 30% einer bitbreite.

Kleiner als 1 bitbreite braucht das nicht zu werden, da man dann die Baudrate erhöhen kann.

größer als 1,1 macht keinen Sinn, da sonst das vorletzte Bit ebenfalls falsch ist.

Warum gibt es dann 1,5 oder 2? Weil damit bei Back to Back Kommunikation der Empfänger eher synchronisiert, falls er aus dem Tritt kommt.

#7307117
Lesenswert?

Einstein schrieb:

Nach alle Hinweise ich habe mich folgende Einstellung überlegt :

Baudrate : 38400 Bit/s Parität : ohne Anzahl : 8 Bit

15 Bits d.h 20 bits pro Messwerte . In eine Sekunde : 38400/20 = 1920 1920 messwerte pro Sekunde . Ist das korrekt????

Dafür würde ich die volle Punktzahl geben.

Unglücklich ist natürlich, dass das notwendige Start- und Stoppbit in der Fragestellung nicht auftaucht. Aber Du hast es berücksichtig und bist bei 8-Bit Daten auf eine Übertragungslänge von 10-Bit gekommen.

Typisch für solche Aufgaben aus dem Studium ist, das die Übertagung in höchster Geschwindigkeit nicht funktioniert. Bei einer pausenlosen Übertragung ist das HSB bzw. LSB nicht zu erkennen. Selbst eine Bit-Synchronisation der UART ist eher zufällig. Es muss immer eine Pause zwischen den Datenpaketen eingelegt werden. Eine Pause von einem Byte (10-Takt-Bits) sorgt für eine zuverlässige Übertragung. Das Start-Bit ist dann jederzeit erkennbar und auch das HSB/LSB ist problemlos zu unterscheiden. In dem Fall wären wir bei 30 Bits pro Übertagung. Damit sind wir bei 1280 Messwerte die zuverlässig pro Sekunde übertragen werden können.

Von Tricksereien, die das letzte Bit bei der Übertagung herausholen, ist grundsätzlich abzuraten. KISS - keep it short and simple.

Für den Prof. sind es 1920 Messwerte pro Sekunde.

Zuverlässig sind es 1280 Messwerte pro Sekunde.

Gast #7307136
Lesenswert?

Uwe K. schrieb:

Das Start-Bit ist dann jederzeit erkennbar und auch das HSB/LSB ist problemlos zu unterscheiden. In dem Fall wären wir bei 30 Bits pro Übertagung. Damit sind wir bei 1280 Messwerte die zuverlässig pro Sekunde übertragen werden können.

Das ist das, was schon sehr früh abgefrühstückt wurde:

Martin schrieb:

@ Lothar : Ich glaube zur Lösung der Aufgabe gehört nicht noch ein Protokoll zu berücksichtigen.

Und Pausen einlegen wäre eine sehr ineffektive und schwierige Art eines Protokolls (nicht alle Uarts geben dafür die notwendige Info). Für das Uart-Synchronisierungsproblem gehen auch 2 Stoppbits, für das Protokoll reichen z.B. 2 aufeinanderfolge Bytes mit dem höchstwertigen Bit gesetzt.

Vielleicht können wir uns einigen, dass die errechnete Geschwindigkeit ein Maximalwert ist, der zwar fast, aber nur im Idealfall ganz erreicht werden kann.

Gast #7307194
Lesenswert?

Uwe K. schrieb:

Bei einer pausenlosen Übertragung ist das HSB bzw. LSB nicht zu erkennen.

Von Tricksereien, die das letzte Bit bei der Übertagung herausholen, ist grundsätzlich abzuraten. KISS - keep it short and simple.

Was wäre so kompliziert daran, drei Zeichen mit 7 Bit zu übertragen. Dann hat man insgesamt 21 Bit zur Verfügung, von den 15 für Nutzdaten verwendet werden (5 Bit pro übertragenem Zeichen) und jeweils zwei Bit für eine Nummerierung zur Verfügung stehen?

Gast #7307386
Lesenswert?

Einstein schrieb:

Danke für die Rückmeldung. Ich bin erste mal in diese Forum und ich wusste die Regeln nicht .

Naja, du großer Denker, es sind eigentlich nicht die Regeln des Forums, sondern etwas, das der normale Menschenverstand gebietet. Man soll als Lernender sich selbst um die Lösung der Aufgaben bemühen und nicht danach trachten, selbige von anderen gelöst zu bekommen.

Allerdings sehe ich beim Lesen der Aufgabenstellung etwas, das mich ärgert: Da wird von 15 Bit pro Meßwert geschrieben. Sowas legt nahe, daß der Lehrer an eine rein binäre Übertragung gedacht hatte. Ja, das geht, aber bei einer seriellen Übertragung hat man es eigentlich immer mit dem Transportieren von Daten zwischen zwei verschiedenen Geräten zu tun - und die können intern eben mit unterschiedlichen Darstellungen arbeiten. (ja, können aber nicht müssen) Und deshalb ist es sinnvoll, Daten eben NICHT rein binär zu übertragen, sondern als Texte nebst Trennzeichen, aus denen man ersehen kann, wo ein Meßwert endet und wo der nächste beginnt.

Das nur zur guten Praxis, es steht nicht explizit in der Aufgabenstellung.

W.S.

Gast #7307418
Lesenswert?

W.S. schrieb:

aber bei einer seriellen Übertragung hat man es eigentlich immer mit dem Transportieren von Daten zwischen zwei verschiedenen Geräten zu tun - und die können intern eben mit unterschiedlichen Darstellungen arbeiten.

So what? Heutzutage arbeiten fast alle Protokolle seriell und rein binär codiert. Von SATA über HDMI über USB bis sonstwohin. Das tut der Funktion keinen Abbruch, auch wenn hunderte von verschiedensten Chips beteiligt sind.

Und deshalb ist es sinnvoll, Daten eben NICHT rein binär zu übertragen, sondern als Texte nebst Trennzeichen

Nein, ist es nicht. Und genau deshalb wird es auch fast nirgendwo mehr so gemacht.

Alle anderen definieren einfach die Bedeutung jedes einzelnen Bits im Protokoll. Wie die einzelnen Geräte das dann intern behandeln, spielt überhaupt keine Rolle. Es muss halt einfach nur richtig im Sinne der Prokolldefinition gemacht werden. Das ist alles.

Das nur zur guten Praxis

Das war gute Praxis, als man die Bytes noch mitlesen konnte. Wenn aber MBit/s oder gar GBit/s über die Strippen gehen sollen, ist es einfach nur noch Unsinn von epischen Ausmaßen.

Und die Aufgabenstellung zielte ganz eindeutig auf möglichst hohen Durchsatz.

Gast #7307553
Lesenswert?

Klaus schrieb:

Er bezieht sich auf deinen Beitrag zuvor, der eine Lösung vorschlägt, die nicht zum Problem passt.

Heißt du Martin? Aber sei's drum ...

Wie stellst du dir denn vor, sicherzustellen, dass die Bits richtig zugeordnet werden?

Gegenüber der Lösung mit zwei 8-Bit Zeichen und einer Pause von 10 Bitzeiten spart man mit drei 7-Bit Zeichen immerhin 10% der Übertragungszeit. Stand in der Aufgabe nicht irgendetwas von "so schnell wie möglich"?

Gast #7307556
Lesenswert?

Das ist doch eine rein theoretische Aufgabe ohne Realitätsbezug (typisch pädagogisch). Ob es nicht einfach darum, ob jemand die Einheit "bits/s" etc. verstanden hat? Kennt jemand den weiteren Zusammenhang?

#7307580
Lesenswert?

Wolfgang schrieb:

Wie stellst du dir denn vor, sicherzustellen, dass die Bits richtig zugeordnet werden?

Das überlege ich mir dann, wenn mir jemand diese Aufgabe stellt und ich sie lösen muss/soll/darf.

Konkret würde ich hier in seltenen Abständen (sagen wir mal einmal pro Sekunde) 0xff 0xff übertragen, und das unbenutzte Bit bei Messwerten immer zu 0 setzen. Damit ist eine einfache Synchronisation möglich und fast nix an Bandbreite verschenkt.

Wolfgang schrieb:

Stand in der Aufgabe nicht irgendetwas von "so schnell wie möglich"?

Genau. Und nix über höherschichtige Protokolle.

Gast #7307586
Lesenswert?

c-hater schrieb:

Heutzutage arbeiten fast alle Protokolle seriell und rein binär codiert. Von SATA über HDMI über USB bis sonstwohin. ... wird es auch fast nirgendwo mehr so gemacht.

Gegenbeispiele:

  • Kommandos bei Modems und Bluetooth Modulen
  • GPS Empfänger
  • Kommunikation zwischen Backend-Systemen (REST, SOAP, JSON, XML)

Das war gute Praxis, als man die Bytes noch mitlesen konnte.

Genau dazu ist es immer noch gute Praxis.

Wenn aber MBit/s oder gar GBit/s über die Strippen gehen sollen, ist es einfach nur noch Unsinn von epischen Ausmaßen.

Hier geht es nicht um MBit/s oder gar GBit/s.

Und die Aufgabenstellung zielte ganz eindeutig auf möglichst hohen Durchsatz.

Bei 38400 Baud. Wir sind uns allerdings einig, dass eine Textcodierung der Daten wohl nicht Bestandteil der Aufgabe war.

Wenn ich so einen Entwicklungsauftrag bekommen würde, wäre das eine meiner ersten Rückfragen: "Wollen wir die Daten nicht lieber in maschinen- und meschen-lesbarer Form codieren?". Insofern fand ich den Hinweis von W.s. durchaus sinnvoll.

Gast #7307804
Lesenswert?

Euro schrieb:

Ob ich nun einen Datensatz per jSON oder XML übertrage oder als binäre Struktur - ich finde beides nicht anstößig.

Wenn 15-Bit möglichst schnell und damit möglichst effizient übertragen werden sollen, sind sowohl jSON als auch XML dafür denkbar ungeeignet, jedenfalls solange die Übertragungsgeschwindigkeit durch die Symbolrate limitiert ist.

#7308221
Lesenswert?

Zum Stopbit, siehe auch interessanten Thread:

Beitrag "Re: UART Startbit/StopBit"

Da es ja je nach Empfänger fraglich ist, ob

  1. das SB gar nicht ausgewertet wird und der Empfänger sofort wieder bereit ist?
  2. Das SB ausgewertet wird aber wann der Empfänger wieder bereit ist? Nach 1/2 SB? Nach dem Letzten Abtasten?

Wenn das SB sowieso kürzer sein darf spielt es keine Rolle mehr, wenn der Empfänger sauber in den Stream eingerastet ist.

Gruss Chregu

#7308280
Lesenswert?

Man könnte auch das Paritätsbit als 9tes Bit missbrauchen, in dem man dynamisch zwischen e un o umschalter. Somit würde man 9 Payload-Bytes in 11 Bytes rein bekommen (außer man will das Stop-Bit auch noch weg lassen)

38400 / 11 * 9 / 15 = 2094 Werte.

Und ohne Stop-Bit:

38400 / 10 * 9 / 15 = 2304 Werte.

Keiner würde das so machen, aber das wäre "so schnell wie möglich" (ohne Kompression)

Gruß Roland

Gast #7308843
Lesenswert?

Christian M. schrieb:

Zum Stopbit, siehe auch interessanten Thread: Beitrag "Re: UART Startbit/StopBit"

So sollte es m.E sein (nur beim Sender) ist aber nicht so. Es gibt uC, die dann auch "längere" stoppbits erwarten

Da es ja je nach Empfänger fraglich ist, ob

das SB gar nicht ausgewertet wird und der Empfänger sofort wieder bereit ist? Das SB ausgewertet wird aber wann der Empfänger wieder bereit ist? Nach 1/2 SB? Nach dem Letzten Abtasten?

Es gibt (bei 1 stoppbit) nur eine sinnvolle Art der Auswertung: genau 1 Bitlänge nach dem letzten Bit und auf identische Weise.

Meist bei z.b. 3/8, 4/8 und 5/8, best of 3.

Und startbereit dann bei 5/8.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren