Forum: Mikrocontroller und Digitale Elektronik USART Sender wartet auf Empfänger


von Matthias (Gast)


Lesenswert?

hi,

es ist doch möglich dem Sender bei einer USART Datenübertragung über den 
Empfänger mitzuteilen, dass er seine Datenübertragung kurz unterbechen 
soll bis der Empfänger eine kurze Routine durchgearbeitet hat und dann 
mit dem Sender fortfahren soll. Wie geht das genau, welche Bytes ?

von Läubi .. (laeubi) Benutzerseite


Lesenswert?

XON/XOFF oder Hardware Flußkontrolle

von Matthias (Gast)


Lesenswert?

Yo du meinst sicher Softwarehandshake (XON/XOFF). Aber gibt es ein Code 
Beispiel an dem man sich orientieren kann ?

von Karl H. (kbuchegg)


Lesenswert?

Matthias wrote:
> Yo du meinst sicher Softwarehandshake (XON/XOFF). Aber gibt es ein Code
> Beispiel an dem man sich orientieren kann ?

Da gibts eigentlich nicht viel, woran du dich 'orientieren'
musst.
Die Empfangsroutine beim Sender, überprüft jedes Zeichen
das hereinkommt, ob es ein XOFF oder ein XON war.
Ist es ein XOFF, dann wird eine globale Variable auf zb 1
gesetzt und wenn ein XON empfangen wird wird die globale
wieder auf 0 zurückgesetzt.
Die Senderoutine im Sender prüft bei vor jedem Zeichen, das
ausgegeben wird, ob die globale Variable auf 1 ist und wenn
ja, dann wartet sie solange bis sie wieder auf 0 zurückfällt
(oder aber sie bricht die Ausgabe ab und verschickt das Zeichen
nicht sondern vertagt den Sendevorgang auf den nächsten
Durchgang).

Das ist im Prinzip schon alles was Senderseitig zu tun ist.

Empfängerseitig gehts genau anders rum: Der Empfänger empfängt
laufend Zeichen und speichert sie ev. in einem Buffer zwischen.
Droht dieser Buffer überzulaufen oder hat der Empfänger keine
Zeit, dann schickt er ein Zeichen XOFF. Ist er wieder aufnahme-
bereit schickt er das Zeichen XON.


Stell dir einfach eine Telefonleitung vor auf der 2 Menschen
miteinander reden. Der eine muss plötzlich mitschreiben.
Was macht er. Er sagt dem anderen 'Warte mal' (das ist das XOFF)
und wenn es weiter gehen kann sagt er: "Fertig, weiter" (das
ist das XON).

von Matthias (Gast)


Lesenswert?

Super, danke für die detailierte Erklärung.
Da mein Sender ein PC ist und mein Empfänger meine Schaltung, habe ich 
im Fallle eines Buffer-Überlaufs also nur ein

puts("XOFF");

und nach der Zwischenspeicherung
ein

puts("XON");

zu tun ?

von Matthias (Gast)


Lesenswert?

Steht das Zeichen XON nicht für eine Hexzahl, so wie bei JPEG z.B. EOI 
mit 0xFF und 0xD9 ausgedrückt wird ?

von Karl H. (kbuchegg)


Lesenswert?

Matthias wrote:
> Super, danke für die detailierte Erklärung.
> Da mein Sender ein PC ist und mein Empfänger meine Schaltung, habe ich
> im Fallle eines Buffer-Überlaufs also nur ein
>
> puts("XOFF");
>
> und nach der Zwischenspeicherung
> ein
>
> puts("XON");
>
> zu tun ?

Nein.
Schau in die ASCII Code Tabellen.
Da gibt es 2 Sonderzeichen: XON und XOFF

XON, XOFF sind 2 Zeichen, so wie 'a', 'b', 'c', '\n'

von Matthias (Gast)


Lesenswert?

ok, also ein

ser_putc(0x13); == ein XOFF
ser_putc(0x11); == ein XON

oder ?

von Karl H. (kbuchegg)


Lesenswert?

Matthias wrote:
> ok, also ein
>
> ser_putc(0x13); == ein XOFF
> ser_putc(0x11); == ein XON
>
> oder ?

Wenn ser_putc() die Funktion ist, die ohne wenn und aber
ein einzelnes Zeichen auf den Weg bringt, dann ja.

von Simon K. (simon) Benutzerseite


Lesenswert?

Karl heinz Buchegger wrote:
> Matthias wrote:
>> ok, also ein
>>
>> ser_putc(0x13); == ein XOFF
>> ser_putc(0x11); == ein XON
>>
>> oder ?
>
> Wenn ser_putc() die Funktion ist, die ohne wenn und aber
> ein einzelnes Zeichen auf den Weg bringt, dann ja.

Wie stellt man beim XON/XOFF fest, ob das Zeichen ein XON/XOFF war und 
nicht etwas anderes? Oder verwendet man das nur bei Strings/Text?

von Karl H. (kbuchegg)


Lesenswert?

Simon Küppers wrote:
> Karl heinz Buchegger wrote:
>> Matthias wrote:
>>> ok, also ein
>>>
>>> ser_putc(0x13); == ein XOFF
>>> ser_putc(0x11); == ein XON
>>>
>>> oder ?
>>
>> Wenn ser_putc() die Funktion ist, die ohne wenn und aber
>> ein einzelnes Zeichen auf den Weg bringt, dann ja.
>
> Wie stellt man beim XON/XOFF fest, ob das Zeichen ein XON/XOFF war und
> nicht etwas anderes? Oder verwendet man das nur bei Strings/Text?

3 Möglichkeiten

* nur auf Text beschränken
* bei binärer Übertragung darf dann logischerweise XON/XOFF in den
  Daten nicht vorkommen oder aber man schickt ein Byte vor dem
  XON/XOFF welches dem Empfänger mitteilt, dass es sich hierbei
  nicht um die Handshake Bytes XON/XOFF handelt sondern um normale
  Daten. Bzw die Bytes 0x11 bzw 0x13 werden anders übertragen um
  sie vor dem Handshake zu verstecken.
* bei binärer Übertragung: kein XON/XOFF verwenden sondern
  Hardware Handshake

von Matthias (Gast)


Lesenswert?

Ich versteh eines nicht. ich betreibe einen ATMEGA32 mit 16 MHZ und an 
meiner USART Schnittstelle habe ich einen MAX232 rangebastelt. Ab einer 
Baudrate von 115,2 bringt er nur noch Müll auf den Bildschirm, alle 
Baudraten davor laufen einwandfrei.

Berechnet wird das ganze durch F_CPU/(Baudrate*16L)-1
und dann die 8 High Bits in UBRRH und 8 Low Bits ins UBRRL

Ich würde genau diese Baudrate benötigen. Was mache ich falsch. Liegt es 
am MAX232. Die Fehlerwahrscheinlichkeit liegt laut Atmel bei 3,5%

von Matthias (Gast)


Lesenswert?

Habe an meinem MAX232N 10 uF Kondensatoren, könnte das ein Problem sein, 
dass ich 1 uF Kondensatoren benötige ?

von holger (Gast)


Lesenswert?

>Die Fehlerwahrscheinlichkeit liegt laut Atmel bei 3,5%

Und das ist zu viel ! Es sei denn mit U2X=1 . Dann sind es
nur noch 2,1% . Falls das auch nicht geht, nimm einen 14.7456MHz Quarz
oder geh halt mit der Baudrate runter.

von Falk B. (falk)


Lesenswert?

@ Matthias (Gast)

>Habe an meinem MAX232N 10 uF Kondensatoren, könnte das ein Problem sein,
>dass ich 1 uF Kondensatoren benötige ?

Nein. Mit grösseren Kondensatoren geht es immer, nur nicht mit 
kleineren.

MfG
Falk

von Matthias (Gast)


Lesenswert?

>Es sei denn mit U2X=1

Das wars ! 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.