RS232 Switch
Was tun, wenn man zwei serielle Geräte koppeln will, die nicht auf gleiche Baudzahl zu bringen sind?
Der Anschluss der ASR-33 an die Pertec ist so ein Fall. Das Problem brachte mich auf die Idee zwei serielle Anschlüsse zu switchen. Ein Rechner mit zwei seriellen Interfaces schaufelt die Daten von einem Interface zum Anderen, und umgekehrt. Wenn der Rechner in der Mitte genügend puffert, sollten sich auch zwei Anschlüsse verschiedener Geschwindigkeiten auf diese Weise verbinden lassen. (Projektdateien dazu HIER)
Gedacht getan. Als Rechner ein Raspberry 3, eine serielle Schnittstelle per USB und als andere Schnittstelle die Native UART vom Raspi. Zum Schaufeln ein kleines Skript in Python. Schon am gleichen Abend klappt es in ersten Tests mit zwei Terminalanbindungen verschiedener Geschwindigkeiten. Aber ich stelle fest, mit der USB Schnittstelle bekomme ich die 110 Baud der ASR-33 nicht hin. Allerdings klappt es mit der nativen Schnittstelle des Raspi, die aber noch einen TTL nach RS232 Wandler benötigt. Da das Ganze an der Pertec und der PDP 11/73 schnell klappt, überlege ich was ich draus machen soll. Momentan starte ich das Progrämmchen interaktiv und stelle die Schnittstellenparameter im Python Skript ein. Was ich verbessern will:
- das soll ohne Monitor und Tastatur gehen
- die seriellen Ports sollen „von aussen“ konfigurierbar sein
- es soll auf dem Raspberry Zero funktionieren
- die Current Loop Schnittstelle soll integriet werden
- eine Protokollierung soll möglich sein
- es sollen alle standard Baudzahlen unterstützt werden
04.2019
Wie man am Bild oben sieht, habe ich einen kleinen Probeaufbau mit dem Raspberry Zero gemacht. Unterschiede in der Funktion zum Raspberry Pi 3 konnte ich nicht festgestellen. Installiert ist ein 2018-04-18-raspbian-stretch-lite welches ich gerade zur Hand hatte. Nach dem Schreiben des Images auf die Micro SD Karte ist folgendes zu beachten:
- sudo raspie-config: - Passwort ändern
- ssh enablen
- serial enablen
- WLAN konfigurieren
- sudo apt-get install phython-serial
Das installiert die Bibliothek, welche zum Ansprechen der seriellen Schnittstellen von Python
benötigt wird.
-sudo apt-get install wiringpi
Das installiert, was benötigt wird die GPIO Pins auszulesen.
- die Datei /boot/config.txt am Ende um folgenden Eintrag ergänzen:
dtoverlay=pi3-disable-bt
das schaltet das Bluetooth aus, damit die serielle Schnittstelle über die GPIO Pins zu erreichen ist.
Nach dem Reboot ist der Zero einsatzbereit. Auf dem Bild oben ist zu erkennen, dass der TTL nach RS232 Adapter an die GPIO angeschlossen ist( Rot +, Schwarz -, Braun TXD, weiß RXD (intern /dev(ttyAMA0)). An den USBtoGo Anschluss ist per USB Adapter der USB-RS232 Anschluß (intern /dev/ttyUSB0) gesteckt.
Das Siemens Kästchen auf dem die Teile liegen, ist der Current Loop nach RS232 Adapter, an den die ASR-33 angeschlossen ist.
Der Zero wird nun per WLAN mit ssh angesprochen. Daher wird nun kein Monitor und keine Tastatur am Zero mehr benötigt. Das übergangsweise eingesetzte USD-Hub wird entfernt und an die freigewordene Buchse der USB-RS232 Adapter angeschlossen.
Als Skript kommt folgendes (für’s Erste) zum Einsatz (ser.py):
import serial
ser1=serial.Serial('/dev/ttyUSB0',9600,bytesize=8,parity='N',stopbits=1,timeout=0.001)
ser2=serial.Serial('/dev/ttyAMA0',110,bytesize=7,parity='N',stopbits=2,timeout=0.001)
x=0;
while true:
eins=ser1.read(140)
zwei=ser2.read(10)
ser1.write(zwei)
ser2.write(eins)
Aufruf mit : python ser.py. Abbruch mit ^C.
In dem Zustand soll das nun ein wenig Reifen. Die Timeouts sind zu optimieren und die obigen Überlegungen anzugehen.
Es geht ein wenig weiter, habe mir eine Current Loop Schaltung, wie sie Ende der 70er üblich war, für 5 Volt dimensioniert . Dann einen Probeaufbau davon direkt vom Zero versorgt, so dass nur noch der MAX3232 für die TTL Wandlung benötigt wird. Aber nicht mehr das (viel größere) Siemens Kästchen. Der Probeaufbau funktioniert in meinen kurzen Tests!
Es hat mich nicht losgelassen.Ich möchte einen Current Loop nach TTL Wandler. Alles was ich im Netz finde wandelt Current Loop nach RS232 und dann mit MAX3232 nach TTL (Zum Beispiel hier: http://deramp.com/downloads/teletype/TTY-RS232%20Manual.pdf). Mir erschien das aber natürlicher, am Raspberry Zero auf den Zwischenschritt zu verzichten und direkt nach TTL zu wandeln. Änderungen gegenüber den bekannten Schaltungen wären somit die Pegel und eine invertierte Signallage. In den Bildern oben mein Probeaufbau, an dem ich teste.
An dem DIP Schalter lassen sich etliche Sachen einstellen, das ist flexibel und noch deutlich veränderbar. Da die Eingangsseite durch die ASR-33 (110Baud 7N2) fest ist, wirken sich die seriellen Einstellungen auf den USB Anschluß aus. Momentan:
DIP 1-4 : Baudzahl zwischen 50 und 115200
DIP 5 : 7 oder 8 Bits
DIP 6-7 : None, Even, Odd, Mask
DIP 8 ; 1 oder 2 Stopbits
DIP 9 : WLAN off oder on
DIP 10 : Umschalten zum Herunterfahren
Auf die Weise kann ohne Wlan und Zugriff auf den Zero das Nötigste gesteuert werden. Der Zero wird zum Kabel….