OK
Du schaltest den TxD deines Controllers auf den Pin D = 4 des 75176.
Der RxD kommt auf R = 1 des SN 75176.
Die Pins DE und /RE werden zusammengeschaltet und auf einen Controllerpin gelegt.
Die beiden Drähte zum Nachbargebäude kommen auf A und B des 75176.
Diese Konfiguration machst Du beim Haus Controller ebenso wie beim Slave Controller.
Die 2 Dräte werden auf beiden Seiten mit einem 120 Ohm Widerstand abgeschlossen.
Das war die Hardware.
Der Master im Haus aktiviert im Ruhezustand und beim Datensenden die DE Leitung indem der Controller da eine 1 ausgibt.
Der Slave Controller gibt da üblicherweise eine 0 aus, weil er ja auf Daten vom Master wartet.
Nun müssen die beiden USART's der Controller auf das gleiche Übertragungsprotokoll eingestell werden.
z.B. 38400, 8, N, 1.
Damit wär dann auch die Geschwindigkeit festgelegt.
Nun musst Du Dir noch ein Protokoll ausdenken.
Ich würd die Übertragung schon mal für 8 Kanäle auslegen, weil die meisten Logic IC's auch 8 Ein, bzw. Ausgänge haben und das System somit leicht erweiterbar ist.
Das erste Byte würde ich als Marker auslegen. Ein $ ( Dollar ) Zeichen wär dafür geeignet. Dann folgt ein Status Byte, das die jeweilige Aktion anzeigt.
Beispiel:
a für aktivieren
s für status
v für verstanden vom Slave usw.
n für negativ
Dann folgen die 8 Kanäle, da würde ich für jeden Kanal ein Byte verwenden.
Man könnte da Buchstaben E für ein oder A für Aus verwenden.
Dann kann man noch ein Prüfsummenbyte einfügen, das aus den EXOR Bytes der vorangegengenen Bytes besteht.
Nur Frames mit gültigen Werten EXOR Werten werden akzeptiert.
Üblicherweise fügt man dann noch ein Carriage Return 0x13 und ein Line Feed 0x10 ein.
Beispiel einer Komunikation:
Master sendet:
$ a E E A A A A A A x /CR/ /LF/
Das x ist dabei die Prüfsumme
Master schaltet für 1 sekunde in den Empfangsmodus.
Der Slave akzeptiert das setzt die Ausgänge entsprechend, schaltet in den Sende Modus und sendet:
$ v E E A A A A A A x /CR/ /LF/
wär ein Fehler aufgetreten, könnte der Slave z.B.
$ n x /CR/ /LF/
senden, damit der Master weiß, da ist ein Fehler aufgetreten.
Ein weiteres Beispiel:
Will der Master wissen, welche Ausgänge aktiv sind sendet er dann:
$ s x /CR/ /LF/
Schaltet für 1 sekunde in den Empfangsmodus.
Der Slave aktiviert den Sender und gibt dann:
$ v A E A A A A A A x /CR/ /LF/ zurück.
Der Vorteil wäre, das man mit einem entsprecheden Adapter ( SN75176 und MAX232 ) mit dem PC den Datenstrom mitlesen könnte um etwaige Fehler eingrenzen zu können.
Die Komunikation läuft ja in ASCII.
Noch sehr viel konkreter kann ich es jetzt nicht beschreiben, ohne gleich den Schaltplan und den Quellcode mitzuliefern.
