Forum: Mikrocontroller und Digitale Elektronik RS232 Handshake


von Ralph H. (guru)


Lesenswert?

Ich habe an meinem Z80 Rechner eine V24 Schnittstelle dran,
die an einer PIO hängt.
Die Signale CTS/RTS/TxD und RxD gehen jeweils über einen MAX232 an die 
PIO und ich habe bei der Kopplung meines PC mit der Z80 auch beachtet, 
das ich TxD und RxD sowie CTS und RTS über kreuz verbinden muss.

Die Verbindung und die Software funktioniert auch mit 
USB/RS232-Konverter und UM2102 Modul !!

Mein Problem ist nun, das ich zwar einwandfrei senden kann, aber das 
Einlesen in den Z80 vom echten (also nicht über Adapter) PC COM-Port 
nicht richtig funktioniert. Die Einstellunge am Terminalprogramm (Hterm) 
passen !
Wie gesagt mit USB Adapter funktioniert das prima !

Ich habe den Verdacht, das ich das RTS zu einem für den PC falschen 
Zeitpunkt wieder deaktivierte, um das korrekt empfangene Zeichen zu 
verarbeiten, denn die folgenden Zeichen werden irgendwie verhunzt..

Wer weiß WANN bzw. zu welchem Zeitpunkt RTS deaktiviert werden muss ?

Bisher deaktiviere ich das RTS direkt nach dem Erkennen des Startbits.

Danke sagt Ralph

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ralph H. schrieb:
> Bisher deaktiviere ich das RTS direkt nach dem Erkennen des Startbits.

Das ist erheblich zu früh. Das solltest Du erst nach dem vollständigen 
Empfangen eines Bytes tun, also frühestens nach dem ersten Stopbit.

von Achim M. (minifloat)


Lesenswert?


von Ralph H. (guru)


Lesenswert?

Rufus Τ. Firefly schrieb:
> Ralph H. schrieb:
>> Bisher deaktiviere ich das RTS direkt nach dem Erkennen des Startbits.
>
> Das ist erheblich zu früh. Das solltest Du erst nach dem vollständigen
> Empfangen eines Bytes tun, also frühestens nach dem ersten Stopbit.

Hm.. das hab ich auch schon probiert, es ändert nichts, sorgt nur dafür, 
dass die USB-RS232 Konverter nicht mehr funktionieren, wobei das erstma 
wurscht wäre.

Zitat Wikipedia
"Für die einfachste Variante eines Nullmodem-Kabels, das 
Hardware-Handshake unterstützt, genügt es, RxD mit TxD und RTS mit CTS 
jeweils zu kreuzen und eine Masse-Verbindung herzustellen"

Genauso hab ich das ! Das sollte doch langen ?!

von Achim M. (minifloat)


Lesenswert?

Handshake im Terminalprogramm am PC auch aktiviert? Sonst sendet der PC, 
bevor der Z80 überhaupt bereit ist, was zu empfangen. mfg mf

von Ralph H. (guru)


Lesenswert?

Na klaro :-)

Ich hab sogar in den Einstellungen des COM Ports alles möglich probiert. 
Ob mit oder ohne UART Puffer etc...

Das Terminalprogramm erkennt ja RTS und hält an bzw. startet. Der Start 
für das 1.Zeichen klappt auch immer. Nur wann der PC anhält ist mir 
unklar.

Aktuell hab ich probiert, einmalig ne Bytefolge 55 AA 00 FF zu senden 
und an meinem Z80 lasse ich mir jedes Zeichen einzeln anzeigen und 
quitiere das mit ner Taste. Es wird jedesmal nur das 1.Byte am Z80 
eingelesen.

Es sieht so aus, als würde der PC das RTS viel zu spät erst erkennen.

von Ralph H. (guru)


Lesenswert?

Ich hab grad noch beim Suchen einen Thread von 2008 entdeckt, wo schon 
jemand das Problem ähnlich hatte.
Dort war es wohl so, das der PC auch weiter einen Puffer geleert hat.
Aber da ist doch das ganz Handsahke für die Katze wenn dann trotz STOP 
noch Daten ankommen. Ich kann mir kaum vorstellen das dies so sein sool.

Komisch ist, bei den Konvertern klappt es doch auch prima. Kann es sein, 
das dies mal ein BUG in WindoDof war der heimlich still und leise 
behoben wurde ?

von holger (Gast)


Lesenswert?

>Komisch ist, bei den Konvertern klappt es doch auch prima. Kann es sein,
>das dies mal ein BUG in WindoDof war der heimlich still und leise
>behoben wurde ?

Nein, kein Bug. Das liegt an der Hardware. UART Chips
haben einen FIFO damit es zügiger geht. Es kann also
sein das nach deinem setzen der Handshakeleitung noch so
ca. 16 Bytes aus dem FIFO kommen.

von holger (Gast)


Lesenswert?

>Es kann also
>sein das nach deinem setzen der Handshakeleitung noch so
>ca. 16 Bytes aus dem FIFO kommen.

Hab gerade noch mal nachgesehen:
Im Gerätemanager kann man die FIFO Grösse der COM Ports einstellen.

von Michael U. (amiga)


Lesenswert?

Hallo,

richtig, der UART des PC macht seinen Puffer leer, das ist in Hardware.
Dazu kommt noch die Reaktionszeit auf das Handshake-Signal im PC, das 
ist Software.

Der Empfänger muß genügend empfangene Zeichen puffern bzw. zeitig genug 
vor Pufferende stoppen.

Das war auch zu Zeiten des Z80, der SIO usw. so, nur die Puffer waren 
eben kleiner.

Gruß aus Berlin
Michael

von Ralph H. (guru)


Lesenswert?

Danke für Eure Mühen, aber ich schrieb ja das ich bereits den UART FIFO 
Puffer abgeschaltet habe und deshalb der Puffer also nicht mehr wirken 
sollte. Wo sind denn noch Puffer?

Auch geht ja die ROutine mit den USB KONVERTERN ! Das RTS kann 
eigentlich maximal ZU FRÜH kommen, denn zur Zeit wird es sofort nach 
Erkennen des Startbits deaktiviert ! Das Zeichen wird ja korrekt 
eingelesen.

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.