Forum: Mikrocontroller und Digitale Elektronik ASCII Übertagung mit Befehlen Steuern


von DominicS (Gast)


Lesenswert?

Hallo an Alle,

ich hab jetzt nach einiger Zeit mal wieder mein LCD zur Hand genommen. 
Mit der Absicht Messwerte anzuzeigen. (Gibt ein etwas größeres System 
mit verschiedenen Funktionen)

Für unterschiedliche Tests hab ich jetzt an meinem AVR das LCD und einen 
PC hängen. Und eben genau jetzt wird es interessant. Im AVR hab ich zwei 
große Puffer angelegt, für alles vom und zum PC.
Es werden aber selten so viele Daten übertragen, dass der Puffer genau 
voll wird.

Nun würde ich von euch gerne wissen wie man das im allgemeinen steuert, 
dass die derzeitige Übertragung endet. Bisher habe ich '\0' oder '\n' 
verwendet. Beide Zeichen sind aber nicht wirklich dafür definiert, auch 
wenn ich es oft gesehen habe. Zudem ist '\n' ungeeignet, da ich ja 
vielleicht auch mal einen Zeilenumbruch brauche. Dennoch habe ich das 
auch bei Pc Software von größeren Firmen so gesehen.
Ich bin mir jetzt einfach nicht sicher was ich da machen soll.


Danke schon mal im voraus für eure Meldungen.

Gruß Domi

von B. S. (bestucki)


Lesenswert?

DominicS schrieb:
> Es werden aber selten so viele Daten übertragen, dass der Puffer genau
> voll wird.

Voll sollte der Empfangsbuffer nie werden. Falls doch, hast du mehrere 
Möglichkeiten:
- Buffer vergrössern
- Daten schneller verarbeiten
- Übertragungsgeschwindigkeit reduzieren
- Irgendwas am Protokoll drehen


DominicS schrieb:
> Nun würde ich von euch gerne wissen wie man das im allgemeinen steuert,
> dass die derzeitige Übertragung endet.

Generell können Trennzeichen nur verwendet werden, wenn diese nicht im 
Zeichensatz der Nutzdaten auftreten. Wenn die Übertragung in Klartext 
über ein Terminal stattfindet, bietet sich ein Zeilenumbrung als Ende 
an, da von einem Menschen einfach lesbar. Möglich ist auch, eine fixe 
Länge pro Zeile zu verwenden und den Rest mit Füllzeichen (z.B. 
Leerzeichen) aufzufüllen. Werden Binärdaten übertragen, kommst du wohl 
nicht um ein Protokoll mit einer Längenangabe herum.

von Max H. (hartl192)


Lesenswert?

Vllt. bieten sich 0x03 (ETX) oder 0x04 (EOT) an...

von Mike (Gast)


Lesenswert?

be stucki schrieb:
> Werden Binärdaten übertragen, kommst du wohl
> nicht um ein Protokoll mit einer Längenangabe herum.

Warum nicht?

Eine häufig verwendete Möglichkeit ist es, ein ESC-Zeichen aus dem 
erlaubten Zeichensatz herauszunehmen. Dieses Zeichen wird dann vor der 
Aussendung eines Steuerzeichens in den Datenstrom eingefügt. Der 
Empfänger muss es erkennen, die Steuersequenz verarbeiten und die 
restlichen Daten weiterreichen. Falls in den Eingangsdaten das 
ESC-Zeichen vorkommt, wird die dem Empfänger durch eine Steuersequenz 
mit eben diesem ESC-Zeichen als Argument, mitgeteilt, so dass er nur ein 
einzelnes ESC-Zeichen als Dateninhalt weiterreicht. Der Overhead liegt 
unter 1%.

von Dominic S. (Firma: Privat) (dominics)


Lesenswert?

be stucki schrieb
> Wenn die Übertragung in Klartext
> über ein Terminal stattfindet, bietet sich ein Zeilenumbrung als Ende
> an, da von einem Menschen einfach lesbar.

Ja das stimmt wohl, so habe ich das bisher auch immer bei Terminals 
gesehen. Aber ich könnte mir vorstellen, das es bei einer Übertragung 
von größeren Textblöcken. Welche an ein LCD weitergereicht werden 
Probleme geben wird. Wobei LCDs sowieso kein '\n' unterstützen, in den 
meisten fällen passiert nichts oder es gibt ein Random Zeichen.

von Julian W. (julian-w) Benutzerseite


Lesenswert?

falsches Forum...

Das hier wäre das richtige:
https://www.mikrocontroller.net/forum/mikrocontroller-elektronik

Weil siehe Überschrift des Forums:

> Hier könnt ihr eure Projekte, Schaltungen oder Codeschnipsel vorstellen und
> diskutieren. Bitte hier keine Fragen posten!

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Julian W. schrieb:
> falsches Forum...

Korrigiert, danke.

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.