ebps.de.vu > Schaltungen > für den PC > RS232-Interface

RS232-Interface

Beschreibung

Für diejenigen, die sich mit Microcontrollern nicht so gut auskennen oder keine Lust haben, sich Software und Programmer-Hardware für AVRs zu besorgen, gibt es nun dieses RS232-Interface, welches ausschliesslich aus Logik-ICs besteht - es muss also kein Bauteil programmiert werden! Die Schaltungen für die acht Ausänge und die acht Eingänge sind komplett getrennt und können auch unabhängig voneinander verwendet werden.

Aufbau

Ich habe die Schaltung für 9600 Baud entworfen. Bei einer Übertragung mit derartigen Geschwindigkeiten reicht zur Takterzeugung auch ein R/C-Oszillator noch aus, man kann sich also den teuren Quarz sparen. Die Gegenstelle (normalerweise also der PC) sollte dann allerdings schon einigermaßen genau getaktet sein, was bei einem gewöhnlichen PC aber natürlich auch der Fall sein sollte.

Wenn Sie die ICs erst noch kaufen müssen, so sollten Sie für die Bausteiner der 74er-Serien unbedingt die 74HC-Äquivalente verwenden, da diese wesentlich weniger Strom benötigen. Mit einem 74132 als Schmitt-Trigger, wie von mir für die Ausgänge verwendet, gibt es schon Probleme, wenn am Eingang als logische Eins mehr als -3 V anliegen, da der interne Pullup am Eingang des 74132 den Eingang hinter dem Widerstand zu weit hochzieht. Die HC-Serie hat hochohmige Eingänge, so dass selbst eine Eingangsspannung von 0V noch sicher als High-Pegel erkannt wird (bei RS232 gilt eine Eingangsspannung von maximal -3 V als High und mindestens 3 V als Low!). Auch beim Latch (74LS273 in meinem Aufbau der Ausgangsschaltung) bringt ein HC-Baustein wesentliche Vorteile, da er 25 mA pro Ausgang liefern kann - die Vorwiderstände für die LEDs und die Transistoren sollten dann auf jeden Fall auf mindestens 180 Ω vergrößert werden, um den Strom auf 10 mA zu begrenzen. Wird in der Eingangsschaltung ein HC-Latch verwendet, so sind parallel zu den LEDs mit ihren Vorwiderständen noch zusätzliche Pullups erforderlich (1 kΩ bis 10 kΩ).

Zur Einstellung der Frequenz entfernt man den 74HC74 bzw. 74HC76, legt den Reset-Eingang des 4060 manuell auf Masse und misst die Frequenz an Q4. Das Poti wird dann vorsichtig so eingestellt, dass die gemessene Frequenz möglichst genau 9600 Hz beträgt (üblicherweise setzt man für die Genauigkeit eine 2%-Grenze, was bei 9600 Baud einer Genauigkeit von etwa ±200 Hz ergibt - es ist allerdings zu beachten, dass die Frequenz auch durch Betriebsspannugsschwankungen und Temperaturänderungen noch beeinflusst wird). Falls die 9600 Hz sich gar nicht einstellen lassen, muss man evtl. den Kondensator im Oszillator etwas ändern, der im Schaltplan angegebene Wert ist eher klein bemessen, damit man einfach einen weiteren Kondensator parallelschalten kann, wenn es nicht klappt (bei der Sender-Schaltung habe ich das auch getan).

Ausgänge

Das RS232-Signal kommt zuerstmal durch einen Schmitt-Trigger, nachdem es von den beiden Dioden auf eine Spannung von etwa 0V/5V zurechtgestutzt wurde. Der Schmitt-Trigger invertiert das Signal auch gleich, so dass es hinterher als TTL-Signal, wie es auch aus einem MAX232 herauskommt, vorliegt (Startbit 0, Datenbits nicht invertiert, Stoppbit und Ruhezustand 1). Das obere Flipflop wird bei einem Low-Pegel, wie er u.A. durch das Startbit zustandekommt, gesetzt und gibt dann die Resetleitungen der beiden Zähler frei. Die Low-Bits des Datenbytes stören nicht weiter, da das Flipflop dann ja bereits gesetzt ist - es gibt dort keine Änderung. Am 4060 muss die Frequenz mit dem Poti so eingestellt werden, dass am Ausgang Q4 genau 9600 Hz anliegen. Eine positive Flanke an diesem Ausgang liegt dann also immer genau in der Mitte eines Bits. Der 4017 zählt hingegen die empfangenen Bits und aktiviert mit seinen Ausgängen die verschiedenen Funktionen. Steht der Bitzähler noch auf null, so wird vom unteren Flipflip das Startbit gespeichert - allerdings erst, wenn die positive Flanke des 4060 kommt, also genau in der Mitte des Bits. Ist es nicht null, werden die empfangenen Daten später nicht in das Latch übertragen und erscheinen nicht an den Ausgängen. Auf diese Weise ist das Interface nicht für kurze Störimpulse auf der Leitung anfällig, da die Leitung dann nach einer halben Bit-Zeit schon lange wieder auf 1 ist und somit keine Übernahme der Daten stattfindet.

Die ersten 9 Bits (Startbit und die 8 Datenbits) werden in das Schieberegister geschoben, wobei das Startbit dabei natürlich verlorengeht - es ist ja aber auch im Flipflop gespeichert. Steht der 4017 dann aber auf 9, wird der Clock-Eingang des Schieberegisters gesperrt, damit nicht auch der erste Datenbit wieder herausgeschoben wird. Gleichzeitig wird auch der Clock-Eingang des Latches aktiviert, so dass bei korrektem Stoppbit (eine 1) die Daten nach der Hälfte der Stoppbit-Zeit an die Ausgänge übernommen werden. Nachdem das Stoppbit vorbei ist und die negative Flanke vom 4060 den 4017 weiterschaltet, springt dieser von 9 auf 0 zurück und gibt dadurch eine positive Flanke auf den Clock-Eingang des oberen Flipflops, welches daraufhin zurückgesetzt wird und die beiden Zähler wieder sperrt (Reset auf 1), bis das Flipflop von einem neuen Low-Pegel (Startbit) auf der Datenleitung wieder gesetzt wird.

Eingänge

Einige Komponenten der Ausgangsschaltung sind auch in der Eingangsschaltung zu finden, so zum Beispiel der Bitzähler (4017) und der Ozillator mit Teiler (4060). Alle Eingänge werden zunächst auf Transistoren geführt, damit möglichst viele verschiedene Signale erkannt werden können (alles zwischen 3V und 24V sollte problemlos funktionieren) und die ICs nicht bei zu hohen Spannungen beschädigt werden. Hinter den Transistoren gibt es zunächst acht LEDs, die den momentanen Status der Eingänge anzeigen, bevor die Eingänge auf ein Latch (2x 74175, es kann aber z.B. auch ein 74xx273 wie in der Ausgangsschaltung verwendet werden, wichtig ist jedoch, dass es sich um ein flankengetriggertes Latch handelt) und einen Vergleicher. Sobald sich mindestens einer der Eingänge ändert, stimmt das gespeicherte Byte in den Latches nicht mehr mit dem Byte am Eingang überein, der Vergleicher schaltet seinen "A=B"-Ausgang auf Low und setzt damit das Flipflop IC6A - die Übertragung beginnt. Zuerst wird natütlich das Startbit gesendet (Ausgang Q0 am 4017 auf High, Ausgang von IC8C auf Low, RS232-Ausgang auf High). Nach der Hälfte der Startbit-Zeit wird der Zustand der Eingänge in das Latch geladen, gleichzeitig wird der LOAD-Eingang des Schieberegisters 74HC165 abgeschaltet (High). Der Zustand des ersten Eingangs erscheint nun sofort an Q des Schieberegisters, deswegen wird der Clock-Eingang erst für das zweite Bit von IC6B freigeschaltet. Der invertierte Q-Ausgang wird verwendet, da auch die Eingänge durch die Transistoren invertiert werden und vor dem Senden an den PC wieder "zurück-invertiert" werden müssen.

Sind die 8 Eingangs-Bits gesendet worden, erscheint die erste Null, die am seriellen Eingang des Schieberegisters eingelesen wurde, als Stoppbit (invertiert, also als Eins) am Ausgang. Außerdem wird der Clock-Eingang des Schieberegisters wieder gesperrt, damit am Ende der Übertragung kein kurzer High-Impuls am Ausgang erscheint, der vom PC als neues Startbit gewertet werden würde (dies würde passieren, wenn der erste Eingang Low ist und der Ladeeingang des Schieberegisters Low wird, bevor durch das selbe Signal das Flipflop IC6A zurückgesetzt wird und damit jegliche Einsen am Ausgang durch IC8D unterdrückt). Sicherheitshalber wird das Flipflop IC6B auch noch dauerhaft zurückgesetzt, solange die Schaltung im "Reset"-Modus ist und auf Änderungen der Eingänge wartet - diese Verbindung (CLR an IC6B) könnte man aber vermutlich auch weglassen.

Fotos

[Foto]
800 | 1280
Mein Aufbau der Ausgangsschaltung auf einem Reststück Lochrasterplatine, was sich als etwas klein für das Interface herausgestellt hat.
[Foto]
800 | 1280
Die Lötseite. Hier gibt es eigentlich nichts zu sehen, nichtmal SMD-Kondensatoren - die habe ich nämlich schlichtweg vergessen. Es funktioniert erstaunlicherweise aber auch so ;-).
[Foto]
800 | 1280
Die Eingangsschaltung ist ebenfalls dicht gedrängt, die Platine ist wegen der größeren Anzahl ICs aber etwas breiter.
[Foto]
800 | 1280
Die Rückseite des Senders. Auch hier sind (noch) keine Kondensatoren eingelötet, die Schaltung funktioniert trotzdem einwandfrei.
[Foto]
800 | 1280
Die beiden Schaltungen im Vergleich. Wenn die Schaltungen von verschiedenen Spannungsquellen versorgt werden, ist es wichtig, die Masse-Anschlüsse beider Schaltungen mit dem RS232-Anschluss zu verbinden!

Siehe auch