Eine serielle Schnittstelle für den ZX81

ZX-Team Forum
Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 23.08.2017, 19:17

OK, das ging ziemlich schnell. Jetzt habe ich noch drei Platinen und UARTS.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2140
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von siggi » 24.08.2017, 10:36

siggi hat geschrieben:
26.07.2017, 18:10
Habe noch eine kleine Verbesserung bei der seriellen Karte gemacht: habe das unbeschaltete Signal DTR am V.24 Stecker (Pin 4) mit 4K7-Widerstand mit +5V versorgt. Damit zeigt nun der Zeddy einem Modem an, daß er eingeschaltet und betriebsbereit ist. Und schon sind meine beiden altem Modems bereit, mit dem Zeddy zu schwätzen :mrgreen:
Wo ist die nächstgelegene öffentliche Mailbox? :D
Ich war drin :)
Und zwar da:
https://www.blup-bbs.de/mailbox

Mit einem Teledat 33.6-Modem und 300 Baud :)

Hier ein Screenshot mit ZXT80 im Vollbild-Modus (Echo OFF) und 60 Zeichen/Zeile:

P1120696.JPG
P1120696.JPG (186.32 KiB) 983 mal betrachtet
:mrgreen:

Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
siggi
User
Beiträge: 2140
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von siggi » 24.08.2017, 10:53

Und hier mit invertiertem Bildschirm und 80 Zeichen/Zeile:
P1120697.JPG
P1120697.JPG (293.4 KiB) 978 mal betrachtet
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 24.08.2017, 12:18

So richtig schön retro. Da wird's einen warm ums Herz... Hoffe, du hast eine Flat.

Ich muss zusehen, WRX-Graphic auch auf dem ZX96 zum Laufen zu bringen.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
PokeMon
User
Beiträge: 4478
Registriert: 31.08.2011, 23:41

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von PokeMon » 24.08.2017, 14:16

Jetzt fehlen nur noch die Umlaute im Zeichensatz. 8)

PS: Danke an Joachim, Bausatz ist schon da.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
msch
User
Beiträge: 3346
Registriert: 05.02.2013, 15:42
Wohnort: Hessen, Rhein-Main-Gebiet

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von msch » 24.08.2017, 15:49

cool! Dein 787. Anruf? Warst Du in der Box früher als user Anonymous Dauergast? :mrgreen:
manche meinen lechts und rinks kann man nicht velwechsern.
werch ein illtum! (lichtung, Ernst Jandl)

Benutzeravatar
PokeMon
User
Beiträge: 4478
Registriert: 31.08.2011, 23:41

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von PokeMon » 24.08.2017, 21:30

siggi wird wohl einige Zeit getestet haben, bis alles rund lief. :mrgreen:

Ach Gott was waren die BTX Zeiten noch schön ... 8)
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 2140
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von siggi » 24.08.2017, 23:16

PokeMon hat geschrieben:
24.08.2017, 21:30
siggi wird wohl einige Zeit getestet haben, bis alles rund lief. :mrgreen:
Naja, im letzen Jahrtausend wurde ich mal angemessen dafür bezahlt, mich um eine seriöse Datenkommunikation zwischen Medizingeräten und Peh-Zehs zu kümmern. Und habe damals auch eine "Mehlbox" programmiert, über die die Entwicklungsabteilung einer Medizintechnik-Firma in Bad Homburg jahrelang mit der Niederlassung in nun Trampeltierland und zu externen Partnern kommunizierte (primär über Datex-P und Tymnet (https://en.wikipedia.org/wiki/Tymnet) und Modem).
Daher kenne ich die Grundlagen in diesem Geschäft schon ganz gut und brauche weniger als 7xx-Versuche, bis ein Bit von und zu einer Mehlbox erfolgreich übertragen wird :mrgreen:

Gruß
Siggi

PS: Und ich spreche auch fast perfekt Hayes: https://en.wikipedia.org/wiki/Hayes_Mic ... _Products bzw. https://en.wikipedia.org/wiki/Hayes_command_set :wink:
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Jens
User
Beiträge: 1049
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Jens » 25.08.2017, 00:02

Joachim hat geschrieben:
19.07.2017, 13:32
Hallo Jens!
Wie ich dich kenne, wirst du gleich versuchen, mit ENIGMA Kontakt aufzunehmen. Dazu kannst du die Druckerroutinen in der Terminalsoftware verwenden. Das Beispiel bezieht sich auf die Terminalsoftware (TERM8K) die du zuvor in den Bereich ab 8K geladen hast.
Mit diesen Zeilen initialisierst du das Terminal auf 8N1 und /DTR=1, RTS=1

10 POKE 16417,78
20 POKE 16507,37
30 RAND USR 8201

Dabei wird keine RAM-Vereinbarung getroffen. Diese brauchst du in diesem Fall auch nicht.
Sollte deine ENIGMA ein anderes Protokoll haben (z.B. 7N1), dann mußt du den Wert für POKE 16417 ändern. Siehe dazu Tabelle 2 im Funkschau-Artikel.
Die Baudrate mußt du auf der Platine auf die Enigma anpassen.

Mit diesen Zeilen sendest du nun Text zur Enigma:

40 FOR I=1 TO 10
50 PRINT CHR$ USR 8228,"TEST "+STR$ I
60 NEXT I

Solltest du Einlesen müssen, läuft das über den Download-Speicher. Dann wird es etwas aufwändiger, aber machbar.

Melde dich, falls du was brauchst.

Hallo Joachim!

Senden zur Enigma hab ich nicht hinbekommen :-(

Kann ich das Term8k dazu nutzen, Daten (die Buchstaben) zu Empfangen? Oder ein anderes Termialprogramm??

Laut der Anleitung ist die Enigma auf 9600 Baud / 8N1 und Handshake "none" eingestellt. Ich kann über ein USB-RS232-Kabel an den PC senden und die Buchstaben werden angezeigt. Wie kann das auf dem ZX81 gehen??

Gruß
Jens
Wenn du tot bist, dann merkst du das selber nicht. Es ist nur schwer für die anderen. Wenn du blöd bist, dann ist es genauso.
Und: uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 25.08.2017, 09:25

Hallo Jens!
Als erstes würde ich prüfen, ob ZXserial funktioniert.
- sind die Jumper richtig gesetzt
- RTS und CTS mit einem Jumper verbinden, RD und TD mit einem Jumper verbinden. Am besten auf der Stiftleiste
- den Jumper für die Baudrate kannst du schon mal auf 9600 stellen (wenn ZXserial vor dir liegt mit dem VG-Stecker nach links, dann ist es der Jumper, der ganz rechts in der Nähe des frontalen TTL-Ausganges)
- TERM16K.P laden mit GOTO 60 starten (damit hast du auch 8N1 softwareseitig eingestellt)
- der Terminalbildschirm erscheint und wenn du etwas eintippst, müsste es gleich auf dem Schirm erscheinen. Wenn du viel und schnell eintippst, kann es sein, dass einpaar Zeichen verschwinden, weil 9600 Bd zu schnell für den Bildschirmaufbau sind. Das kann auch passieren, wenn die ENIGMA sehr viel Text schickt. Aber das regeln wir dann, wenn es soweit ist.

Wenn das alles ok ist, passt schon mal die Adressierung, der UART und die Verbindung zum TTL-Ausgang.

Wenn du jetzt die Verbindung ausprobieren willst, Jumper, der RD und TD verbunden hat, entfernen. Jumper, der RTS und CTS verbindet, STECKEN LASSEN. Du kannst zum Senden und Empfangen die Terminalsoftware TERM16K.P verwenden. Allerdings mit der Einschränkung, dass langer Text evtl. verschluckte Zeichen hat.

Der ZX81 verhält sich nun wie ein PC mit einer seriellen RS232-Schnittstelle. Ich kenne jetzt nicht den Ausgang der ENIGMA. Wenn du einen USB-RS232-Wandler verwendet hast, dann die Leitungen TD und RD über Kreuz mit dem TTL-Stecker verbinden , dazu noch GND. Wenn die ENIGMA eine Sub-D-Buchse hat, dann mit einem 1:1 Kabel verbinden, wenn des ein Sub-D-Stecker ist dann ein Nullmodemkabel (überkreuz) nehmen.
Ich denke, die Ursache ist, dass RTS und CTS nicht verbunden sind.

Probier das mal aus und gib Bescheid. Viel Erfolg!
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
ZX-Heinz
User
Beiträge: 1312
Registriert: 05.12.2011, 14:45

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von ZX-Heinz » 25.08.2017, 13:14

Hallo Jens,
kannst Du denn die Enigma mit einem PC plappern lassen?
Läuft Dein Poll*n-board an der Enigma?

Benutzeravatar
PokeMon
User
Beiträge: 4478
Registriert: 31.08.2011, 23:41

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von PokeMon » 25.08.2017, 16:33

Jens hat doch ein Oszi - oder ?
RS232 kann man super messen, ob da was rüber geht.
Wahrscheinlich ist es wirklich ein Handshake Problem (RTS/CTS) mit dem der Sender veranlasst wird zu warten, bis der Empfänger bereit signalisiert. Vermutlich geht eben aus genau diesem Grund gar nichts raus aus dem Zeddy.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
siggi
User
Beiträge: 2140
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von siggi » 25.08.2017, 21:09

Mit ZX-Term*80 kann man ja manuell (SHIFT-6: MDM) RTS ein oder ausschalten. Da sieht man gleich den Unterschied ....

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 26.08.2017, 10:07

Nachträglich noch der Reichelt-Warenkorb: https://www.reichelt.de/my/1380869
Die 6pol-Stiftleisten bekommt man dort leider nicht (obwohl es 6pol-Gehäuse dazu gibt). Die hatte ich mir bei Pollin, Art. nr. 451489 besorgt. Man könnte sich auch mit zwei 3poligen bei Reichelt behelfen.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 26.08.2017, 19:32

Hallo Jens,
im Vorgriff auf das Temperaturmessprogramm habe ich dir Routinen geschrieben, mit dem du ein Programm für deine ENIGMA schreiben kannst.
SERIO (Seriell-In-Out) besteht aus einem Maschinenprogramm in der REM-Zeile eines BASIC-Programmes. Im BASIC-Programm wird eine DIM-Variable eingerichtet. Über diese Variable sind dann Ein- und Ausgaben über ZXserial möglich. Das Ganze im SLOW-Modus und auch mit 9600 Baud. Hier das Beispielprogramm zum Testen:

10 REM SERIO
20 CLEAR ;alle Variablen löschen
30 RAND 20 ;Dimensionierung übergeben
40 DIM A$(1,20) ;Variable dimensionieren
50 RAND USR 16516 ;Initialisierung
100 REM ZEICHEN AUSGEBEN
110 REM OHNE NL
120 LET A$(1)="TESTSATZ"
130 RAND USR 16519
140 REM MIT NL
150 LET A$(1)="TESTSATZ$" ;das ist das inverse Dollarzeichen
160 RAND USR 16519
200 REM ZEICHEN EMPFANGEN
210 RAND USR 16522
220 PRINT A$(1)

Wichtig dabei ist nur, dass die DIM-Variable als erste im Variablenspeicher steht! Deshalb das CLEAR am Programmanfang.

RAND USR 16516 initialisiert die Schnittstelle und stellt fest, wo die DIM-Variable steht. Durch den Befehl RAND 20 (als Beispiel) wird dem Maschinenprogramm bekannt gegeben, wie lange die Variable ist (hier 20 Zeichen). Damit kannst du auch tricksen. Wenn du im Programmlauf z.B. RAND 1 eingibst und RAND USR 16516, wird für das Programm die Variable nur ein Zeichen lang und du kannst Zeichen für Zeichen in einer FOR-Schleife einladen. Für Nutzer der Multi-IO-Karte wird die Baudrate 9600 eingestellt.

RAND USR 16519 gibt die gesamte Variable seriell aus. Auch wenn weniger Zeichen drinstehen. Willst du nur soviele Zeichen übergeben, wie auch geschrieben sind, musst du am Ende des Wortes/Satzes ein inverses Dollarzeichen setzten. Dass ist für das MC der Befehl, dass die Übertragung gestoppt wird, auch wenn noch nicht die Variablenlänge erreicht ist. Die Break-Taste wird dabei überwacht.

RAND USR 16522 wartet solange, bis Zeichen an ZXserial ankommen und schreibt diese in die Variable. Aber nur so viele, wie die Variable lang ist. Wenn ein CR oder NL dabei ist, wird das Einlesen abgebrochen. Vor dem Einlesen wird die Variable geleert (mit Nullen befüllt). Die Break-Taste wird dabei überwacht.

Beim Einlesen oder Ausgeben werden die Zeichen jeweils für die andere Zeichentabelle gewandelt. Umlaute etc. habe ich noch nicht berücksichtigt. Da es aber eine Lookup-Table ist, kann jeder beliebig definieren. Bitte gib mir Bescheid, wenn beim Wandlen irgendetwas nicht stimmt. Beim Testen ist mir jedenfalls nichts aufgefallen.

Mit diesem Grundprogramm kann man nun Werte von der ENIGMA einlesen oder an sie ausgeben. Du kannst ja ein kleines BASIC-Progrämmchen um das MC herumstricken. Zur Kommunikation mit Microcontrollern ist es natürlich auch geeignet. Ich habe es geschrieben, weil man dann trotz 'hoher' Baudrate im SLOW-Modus bleiben kann.

Im Anhang ist das Programm, das auch den ASDIS-Source beinhaltet, das BASIC-Listing und das MC-Listing mit Kommentraren.

Viel Erfolg!

Edit: Die Adresse RAND USR 16521 ist falsch und muss richtig RAND USR 16522 heißen. Bitte im Basic-Programm (SERIO.P) die Zeile 210 ausbessern. In der Zip-Datei ist es bereits geändert (27.08.2017)
SERIO.zip
(4.74 KiB) 14-mal heruntergeladen
Zuletzt geändert von Joachim am 27.08.2017, 11:58, insgesamt 1-mal geändert.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 26.08.2017, 22:22

Meine erste Euphorie muss ich leider höchstwahrscheinlich zurücknehmen. Tests mit einem Microcontroller und 9600 Bd haben ergeben, dass es im Slow-Modus nach kurzer Zeit zum Verschlucken von Zeichen kommen kann. Ich hatte zuvor den Transfer mit einem Terminal probiert. Da gab es überhaupt keine Probleme. Wenn sich ENIGMA ebenso verhält, dann müsste SERIO auch mit 9600 Bd funktionieren.
Vielleicht kann man ENIGMA so einstellen, dass es auch z.B. mit 600 Baud läuft. Da ist die Übertragung sicher.
Auch muss man bedenken, dass eine gewisse Zeit von einem Basic-Befehl zum anderen vergeht. Deshalb darf der Sender nicht sehr schnell hintereinander neue Worte liefern.

Für Mulit-IO-Karten-User:
Die Baudrate kann man mit POKE 17099,16 auf 600 Bd umstellen. RAND USR 16516 danach nicht vergessen.
24 wäre 200 Bd
14 wäre 1200 Bd
6 wäre 2400 Bd
12 wäre 4800 Bd
4 wäre 9600 Bd
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
ZX-Heinz
User
Beiträge: 1312
Registriert: 05.12.2011, 14:45

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von ZX-Heinz » 27.08.2017, 10:29

Joachim hat geschrieben:
26.08.2017, 19:32
RAND USR 16521 wartet solange, bis Zeichen an ZXserial ankommen und schreibt diese in die Variable. Aber nur so viele, wie die Variable lang ist. Wenn ein CR oder NL dabei ist, wird das Einlesen abgebrochen. Vor dem Einlesen wird die Variable geleert (mit Nullen befüllt). Die Break-Taste wird dabei überwacht.
Hallo Joachim,
beim Vergleich mit den angehängten ASM ergibt sich #408A=16522 anstatt 16521!! Vielleicht hast Du das aber im MC geändert, andernfalls kann es zum Absturz des BASIC Pgms kommen.

Kurz zu 9600 baud: Ich habe den Sender dazu ausgestoppt durch Setzen von RTS=1 dauerhaft und nur kurz vor dem Einlesen auf RTS=0, danach zurück. Das kannst Du beim ZXserial mit der Kommandoinstruktion #05 , dann #27 und zurück auf #05 über OUT (CNTRL) machen. Dann mit Test auf neues Zeichen und Einlesen weiter.
Heinz

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 27.08.2017, 11:50

Hallo Heinz!
Vielen Dank für den Hinweis. Wer rechnen kann, ist klar im Vorteil ;) Natürlich muss es 16522 heissen. Die 9600 Bd sind in Verbindung mit einem PC-Terminalprogramm kein Problem gewesen. Beim Microcontroller schon. Deshalb vielen Dank für den Tipp mit RTS. Ich nutze BASCOM und sehe gerade in der Hilfe, dass man einen Eingangs-Pin als RTS verbinden kann. Wäre klasse, wenn es funktionieren würde.
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
Joachim
User
Beiträge: 883
Registriert: 06.11.2004, 20:21

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Joachim » 28.08.2017, 18:20

Bei meinem Projekt, Microcontroller seriell mit dem ZX81 zu verbinden, bin ich noch auf weitere Erkenntnisse gestoßen. Insbesondere betreffen diese die Verwendung von NL und CR beim Senden und Empfangen. Dann kam von ZX-Heinz noch der Hinweis, zunächst dem Sender über RTS das Senden nicht zu erlauben. Bei Empfangsbereitschaft dann die Erlaubnis für ein Byte zu erlauben und sofort wieder zu verbieten.

SERIO.P in der Version 2 hat nun folgende Änderungen:

- Die Ausgabe wird nicht mehr über eine Variable gemacht, sondern mit dem Aufruf PRINT USR 16519,"TEXT".
Nach dem Text (der auch in einer Variablen sein kann) wird grundsätzlich NL und CR ausgegeben. Das kann aber eingestellt werden:
POKE 16532,x x=10:NL wird ausgegeben x=0:NL wird nicht ausgegeben
POKE 16533,x x=13:CR wird ausgegeben x=0:CR wird nicht ausgegeben
Wenn eine Einstellung vorliegt, die NL und/oder CR ausgibt, kann die Ausgabe auch durch ein inverses Dollarzeichen im Text unterbunden werden.
Am Empfang über eine dimensionierte Variable im BASIC-Programm hat sich nicht geändert.

- POKE 16529,x x=0:keine Multi-IO-Karte vorhanden x=1Multi-IO-Karte vorhanden
Damit wird ein Aufruf zur Initialsierung einer PIO unterbunden.
- POKE 16530,Baud
Damit kann die Baudrate auf der Mulit-IO-Karte vorgegeben werden. Keine Plausibilitätenprüfung.

- Beim Empfang kann man einstellen, ob die Empfangsroutine nach einem NL auch noch auf ein CR warten soll.
POKE 16534,x x=0:nicht auf CR warten x=1:auf CR warten

- Man kann angeben, ob nach der Initialisierung und nach dem Empfang eines Bytes dem Sender über das RTS-Signal mitgeteilt werden soll, dass er nicht senden darf. Erst wenn der ZX bereit ist, wird dem Sender mitgeteilt, dass er senden darf. Sobald ein Byte empfangen wurde, wird dem Sender über RTS das Senden wieder untersagt.

POKE 16531,x x=5:mit RTS-Steuerung x=37:ohne RTS-Steuerug

Leider habe ich es bisher nicht geschafft mit einem PC-Terminal und der RTS-Steuerung eine Verbindung aufzubauen. Ich habe dabei folgende Verindungen hergestellt:
ZXserial USB-RS232-Wandler
TD ------------- RD
RD -------------- TD
RTS ------------- CTS
GND -------------- GND
Kennt sich jemand damit aus?

Im Anhang das Programm mit ASDIS-Source und das kommentierte Listing (MC und BASIC)

Ich tüfftle nun weiter, inwieweit man mit 9600 Bd im SLOW-Modus arbeiten kann und wie die Verbindung zu Microcontrollern klappt. Mindestens bis zum Winter muss die Temperaturmessung für Mathias mit einem DS18S(B)20 stehen ;)

Hallo Jens! Gibt es schon Erfolgsmeldungen?

SERIO_V.2.0.zip
(5.81 KiB) 13-mal heruntergeladen
Viele Grüße!
Joachim


ZX80, ZX81, ZX-Spectrum, ZX96, ZX2000, ZXmore, ZX81NU, Blauer Engel, AX81

Benutzeravatar
siggi
User
Beiträge: 2140
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von siggi » 28.08.2017, 21:42

Joachim hat geschrieben:
28.08.2017, 18:20

Leider habe ich es bisher nicht geschafft mit einem PC-Terminal und der RTS-Steuerung eine Verbindung aufzubauen. Ich habe dabei folgende Verindungen hergestellt:
ZXserial USB-RS232-Wandler
TD ------------- RD
RD -------------- TD
RTS ------------- CTS
GND -------------- GND
Kennt sich jemand damit aus?
Hallo Joachim
ich habe bei meinen Versuchen mit dem Modem ein 1:1-Kabel an der seriellen Karte angeschlossen. Mit dem Pullup-Widerstand an DTR ist dann das Modem zufrieden und alles funzt.

Zum PC hin habe ich ein "Nullmodem"-Kabel benutzt. Wie der Name schon sagt, wird dem PC damit eine Modemverbindung vorgegaukelt. Und damit ist er zufrieden und alles funzt.
Neben den 5 Verbindungen, die Du verdrahtest hast, sind im Nullmodemkabel auch Brücken drin: auf PC-Seite ist sein Ausgang DTR mit seinem Eingang DSR gebrückt (damit gaukelt sich der PC ein eingeschaltetes Modem vor). Zudem ist auch der Eingang DCD (Data Carrier Detect) mit DTR gebrückt (damit gaukelt sich der PC ein Modem vor, das sich mit einem Modem am anderen Ende der Telefonleitung zu den Übertragungsparametern einigen konnte und ein "Träger" aufgebaut werden konnte).
So klappt es dann bei mir.

Ich habe diese gewalttätigen "RTS kurz ein/lang aus"-Aktionen aber noch nie gemacht. Denn das entspricht nicht dem Sinn dieser Handshakeleitungen (sie werden normalerweise benutzt, um große Empfangspuffer im PC nicht überlaufen zu lassen, nicht um ein Überschreiben der Register im Chip zu verhindern, wodurch sie im Normalbetrieb nicht wackeln, nur im Ausnahmefall).

Zudem ist nicht gesagt, daß Du sicher nur 1 Zeichen empfängt. Üblicherweise wird die serielle Schnittstelle im PC per Interrupt betrieben. Zudem haben die Chips im PC große FIFOs drin, die viele Zeichen zwischenspeichern können. So kann der Chip selbst schon Byte an Byte Richtung Zeddy raushauen. Und sobalt ein Byte angefangen wurde, wird es auch komplett gesendet, auch wenn inzwischen RTS wegegangen ist.

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
PokeMon
User
Beiträge: 4478
Registriert: 31.08.2011, 23:41

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von PokeMon » 28.08.2017, 23:00

Joachim hat geschrieben:
28.08.2017, 18:20
Leider habe ich es bisher nicht geschafft mit einem PC-Terminal und der RTS-Steuerung eine Verbindung aufzubauen. Ich habe dabei folgende Verindungen hergestellt:
ZXserial USB-RS232-Wandler
TD ------------- RD
RD -------------- TD
RTS ------------- CTS
GND -------------- GND
Kennt sich jemand damit aus?
Also zunächst - CRLF ist typischerweise notwendig bei vielen Terminals und Implementationen. Das liegt in der Historie und dem Nachempfinden der Schreibmaschine mit den erstem Terminals.

CR=carriage return ist nur der Wagenrücklauf in deutsch, heißt springt auf den Anfang der Zeile. Das hat eine Schreibmaschine auch gemacht, wenn man einfach denWagen mit der Hand zurückschiebt.

LF=line feed ist der Zeilenvorschub und zwar ohne die aktuelle Position zu ändern, das ist wie wenn man manuell die Walze weiterdreht an der aktuellen Position.

CRLF ist eine Kombination aus beidem, das macht zum Beispiel bei einer Schreibmaschine der Hebel, der den Wagen zurückschiebt auf Position 0 und mechanisch dabei gleichzeitig die Walze vordreht.

Microsoft hat sich damals daran orientiert im Gegensatz zu Linux, bei dem eine neue Zeile nur aus LF besteht. Daher die unterschiedlichen Textformate bzw. Konvertierungsnotwendigkeit. Letztlich ist das halt alles Konventionssache, aber historisch bedingt.


Betreffend der Verkabelung - schreib mal lieber die Pins dazu. Da gibt es eine Unterscheidung in der Belegung (und auch teilweise Bezeichnung) der Signale je nachdem ob man von DCE (data computing equipment) Klassischerweise der PC oder generell der "aktive" Teil und DTE (data terminal equipment) als der "passive" Teil (wie Modem, Drucker, etc.) die auf Anweisungen warten.

Generell würde ich immer RTS und CTS auf BEIDEN Seiten verbinden, also für beide Richtungen. Sonst darf der eine was schicken, der andere aber nicht (was meist wenig Sinn macht). Selbst ein Drucker kann Daten schicken wenn er z.B. mit Software Protokoll läuft (Xon/Xoff). Je nach Baustein kann es sein, dass trotzdem die Signale gebrückt sein müssen auch wenn die Software mit Xon/Xoff arbeitet (gibt und gab hier Exoten ...).

Ich weiß aktuell auch nicht, wie Du Deine ZX81 Seriell Karte aufgebaut hast, also ob die eine DCE oder DTE Schnittstelle. Das ist Konventionssache, tendenziell steuert aber der Zeddy und hat das Ruder in der Hand. Insofern wäre hier DCE angebracht. Habe die Karte von Dir noch nicht aufgebaut. :wink:

Bildschirmfoto 2017-08-28 um 22.46.40.png
Bildschirmfoto 2017-08-28 um 22.46.40.png (162.89 KiB) 621 mal betrachtet
Siehe auch:
https://en.wikipedia.org/wiki/RS-232


Da Du ein Oszilloskop hast, würde ich einfach mal messen ob was rausgeht. Im Ruhezustand ist RX immer auf Minus Potential - da kannst Du beide Seiten messen und siehst sofort, ob Du ein gekreuztes oder ein gerades Kabel brauchst. Manche USB RS232 bringen auch keine vernünftige (belastbare) Minusspannung raus - auch das kann ein Problem sein.

Wenn Du mit Putty arbeitest auf PC Seite, ist es wichtig sowohl den richtigen COM Port zu erwischen (bei mir COM4 z.B.), auf seriell zu stellen und bei Flow Control am Besten Xon/Xoff zu wählen. Zumindest bis Du eine Übertragung hinbekommst. Danach kannst Du das auch auf RTS/CTS umstellen in einem zweiten Schritt. Und aufpassen, Putty speichert die Angaben nicht unbedingt beim erneuten Aufruf wenn Du nicht als Default Settings speicherst.
Wer seinen Computer ehrt, lebt nicht verkehrt.

Benutzeravatar
ZX-Heinz
User
Beiträge: 1312
Registriert: 05.12.2011, 14:45

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von ZX-Heinz » 31.08.2017, 16:42

@pokemon: Joachims ZXserial als DCE geschaltet. Pin3 beispielsweise ist in Deiner Liste ein RxD-Out.

Benutzeravatar
siggi
User
Beiträge: 2140
Registriert: 06.12.2005, 08:34
Wohnort: D, Hessen, tiefste Werreraa
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von siggi » 31.08.2017, 18:24

Hallo Heinz
da liegst Du falsch: Joachims Serial-Board ist ein DTE, sonst könnte ich es ja nicht 1:1 verkabelt direkt mit einem Modem betreiben. Und Karls Beschreibung enhält die Pinbelegung des 25-poligen Steckers, der aber nicht auf Joachims Board benutzt wird.

Gruß
Siggi
Mein ZX81-Web-Server: online seit 2007
http://zx81-siggi.endoftheinternet.org/index.html

Benutzeravatar
ZX-Heinz
User
Beiträge: 1312
Registriert: 05.12.2011, 14:45

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von ZX-Heinz » 31.08.2017, 18:47

Du hast Recht, siggi, ich habe DTE sogar dick auf den Anschluss geschrieben.

Benutzeravatar
Jens
User
Beiträge: 1049
Registriert: 23.08.2005, 13:31
Wohnort: D-31582 Nienburg/Weser
Kontaktdaten:

Re: Eine serielle Schnittstelle für den ZX81

Beitrag von Jens » 31.08.2017, 20:56

Joachim hat geschrieben:
25.08.2017, 09:25
Hallo Jens!
Als erstes würde ich prüfen, ob ZXserial funktioniert.

...

Probier das mal aus und gib Bescheid. Viel Erfolg!

So, nun hatte ich mal ein paar Minuten Zeit für den Zeddy.

In meinem Modul muss ein Fehler sein. Ich bekomme (egal was ich einstelle) immer einen laufenden Cursor, der den Bildschirm komplett vollschreibt - tippen nützt nichts. Ich suche erstmal den Fehler, dann schauen wir weiter :roll:

Gruß
Jens
Wenn du tot bist, dann merkst du das selber nicht. Es ist nur schwer für die anderen. Wenn du blöd bist, dann ist es genauso.
Und: uıɐbɐ ʎɐqǝ uo pɹɐoqʎǝʞ ɐ ʎnq ɹǝʌǝ ɹǝʌǝu ןןıʍ ı
Der ZX81 rechnet mit allem, nur nicht mit seinem Besitzer...

Antworten