Isolierte RS232 Snittstelle vom MC zum PC

umsteiger

Neues Mitglied
25. Jan. 2010
90
0
0
Haiterbach
Sprachen
Hallo Leute,
hat jemand von Euch sich schon mal mit einer Isolierten RS232 Schnittstelle vom PC zu einem Mikrocontrollersystem auseinandergesetzt, auch mit den speed- Problemen?
- Dafür gibt es von MAXIM die Bausteine: MAX 250, Max251..

Wolfgang
 
Hallo Wolfgang,

hab' gerade keine Zeit - am Wochenende mehr.
Ich habe vor ein paar Wochen eine solche Schnittstelle zusmmengebastelt. Geht mit 2 Optokopplern und 4 Widerstände und eine Invertierung ist auch schon dabei.
Was du aber auf alle Fälle brauchst, ist, dass du die Schnittstellenparameter auf der Windows API selber programmieren mußt.

Wenn du magst, kannst du dich schon einmal < hier >

schauen.


Bis zum Wochenende
Werner
 
Hallo Wolfgang,

anbei erstmal 4 Bilder.

rs232.GIF

Im ersten Bild oben ist das Interface zwischen PC und AVR gezeigt. Im wesentlichen verwende ich hie eine Technik, die für den Anschluß bestimmter Digitalmultimeter an einen PC via RS232 üblich ist (Literatur kannst du auch im Internet finden).
Der Trick dabei ist, dass als externe (galvanisch entkoppelte) Spannungsversorgungen auf der PC-Seite die Leitungen DTR und RTS verwendet werden. DTR wird dabei auf +12V (bei meinem USB/Seriell Wandler +9V) und RTS auf -12 Volt (bei meinem USB/Seriell Wandler -9V) gelegt werden.
Wie man das macht, dazu hab' ich dir den entsprechenden Delphi-Code aus meiner Routine herauskopiert. Die Zeile unten ist rot unterlegt.

Function TRS232.Opened(PData:TPCOMData):Boolean;
Const CCOMName = 'COM';
CRW = Generic_Read or Generic_Write;
var DCB : TDCB;
s : string[43];
BEGIN
CloseCOM; // falls bereits geöffnet, dann schließen
if not Assigned(PData)
then PData := @Data
else CopyMemory(@Data,PData,SizeOf(Data));
//................................................................................
with PData^ do begin
s := CCOMName + IntToStr(PortNr) + #0;
Handle := CreateFile(@s[1],CRW,0,nil,Open_Existing,0,0);
Enabled := Handle <> INVALID_HANDLE_VALUE;
if Enabled then begin
//.............................................................................
GetCommState(Handle,DCB); // COMState Variable einlesen
DCB.BaudRate := PData^.Baud;
DCB.ByteSize := PData^.Bits;
case PData^.StopBits of
2 : DCB.StopBits := 2; // 2 Stopbits
1 : DCB.StopBits := 0; // 1 Stopbit
else DCB.StopBits := 1; // 1.5 Stopbits
end;
case PData^.Parity of // 0-4=no,odd,even,mark,space
'o','O': DCB.Parity := 1;
'e','E': DCB.Parity := 2;
else DCB.Parity := 0; // 'n'
end;

DCB.Flags := 17;//17; // DTR = High, RTS = LOW

if SetCommState(Handle,DCB)
then SetTimeOut(TimeOut,INBuffSize,OUTBuffSize);
end;
end;
//................................................................................
Result := Enabled;
END;

In den nächsten 3 Bildern habe ich 2 verschiedene Optokoppler mal mit einem Rechtecksignal angesteuert.

opto1.gifopto2.gifopto3.gif

Das Rechtecksignal habe ich natürlich -wie es sich gehört- mit einem AVR Timer(2) im CTC-Modus generiert :p .
Die Angaben in den Bildern sind wie folgt:
1.) Optokopplertyp (CNY17-1 oder PC817)
2.) Signalfrequenz (2 bzw. 10 KHz)
3.) Skalierung in X-Richtung (µs/div)
4.) Skalierung in Y-Richtung (V/div)
5.) Widerstand in der Steuerleitung (ansteuernde LED)
6.) Widerstand im Kollektorkreis des Phototransistors (statt 4k3 waren es 3k9 - sorry)

Du kannst sehen, dass du bei diesen lahmen Optokopplern schon recht große Steuerströme brauchst, um eine einigermassen hohe Übertragungsrate zu realisieren. Im letzten Bild (mit dem CNY17) sind's schon ca. 10 mA, um ein halbwegs sauberes Rechteck von 10KHz hinzubekommen. Das CTR-Verhältnis liegt bei etwa 470/2000, also ca. 20%.

Die Bitlänge bei der Übertragung (bei 8N1) liegt bei einer Baudrate von 19200 bei etwa 52 µs (siehe Tabelle in Wikipedia). Das müßte also mit der Beschaltung des CNY17 noch hinzubekommen sein (EDIT: sind natürlich 50µs/div im Bild).

Für schnellere Übertragungsraten werd' ich mir die 6N135 o.ä zulegen.

Ach so, noch ein kleiner Hinweis. Auf AVR-Seite benutze ich ein normales Steckernetzteil (mit zusätzlicher invertertierender Strompumpe für eine ± Spannungsversorgung). Somit sind die Steuerspannung im Interfaceteil und die AVR- bzw. Spannungsversorgung im Analogteil voneinander entkoppelt.


Viele Grüße
Werner
 
Hi,

ich hab sowas mal mit einem Si8421BB aufgebaut gehabt.

Das hat Super mit 256kbit funktioniert. (mehr hab ich nie gebraucht) der Baustein kann aber bis zu 150 Mbps von daher .. sollte das für ne RS232 nie probleme geben *gg*.

Extern brauchst du da nur 2 Cs und das wars. (Prinzip grob : das teil Überträgt per Modulierter HF dein Nutzsignal).

Klappt super ist nen SO8 und joar... aber frag mich bitte nicht mehr woher ich die bekommen hab ich weiß es nicht mehr ^^. Ist zwar nicht lange her aber.. joar ^^
 
Guten Tag,

mit etwas Verspätung kommt das letzte Diagramm mit dem 6N136-Optokoppler. Der schafft die 100 KBaud.



Die Angaben (z.B. Widerstandswerte) im Diagramm entprechen den Angaben, wie sie in Beitrag #3 oben bereits beschrieben sind.

Gruß
Werner
 

Anhänge

  • opto4.gif
    opto4.gif
    6,9 KB · Aufrufe: 12
So,

ich hab' nochmal in der Literatur gestöbert und auch noch etwas herumgespielt. Die Optokoppler, bei denen der Basisanschluss des Empfangs-Phototransistors herausgeführt ist (z.B. CNY17, 4N25), können durch Einfügen eines (hochohmigen) Widerstandes (Basis gegen Masse) etwas beschleunigt werden. Genauer kommt es zu einer schnelleren Entladung der Basis beim Ausschalten.

Ich habe das 'mal mit dem 4N25 durchprobiert und in den beigefügten Diagrammen dargestellt. Da ich (wie oben in meinen anderen posts) das Signal invertiere, sind die Anstiegsflanken etwas "beschleunigt".

In dem Diagramm sind die weißen "Rechtecke" im Sendeteil, die ich über den CTC-2 erzeugt habe, die violetten "Rechtecke" das Signal im Empfangsteil des Optokopplers. Die Angaben im Diagramm (390/1K/200K) beziehen sich auf die Widerstände Sender/Empfänger/Basis des Optokopplers.
Im Teildiagramm "D" kann man schließlich erkennen, dass eine Standard-Baudrate von 76,8 KBaud d'rin ist.

Darüber hinaus habe ich festgestellt, dass die Hoppler mit dem kleinsten CTR am schnellsten sind. Wenn ich meine zur Zeit vorhandene, chronische Faulheit :sleep: überwinde, werde ich noch den 4N27 ausprobieren.

Schönen Sonntag noch
Werner


Opto4N25a.png
 

Über uns

  • Makerconnect ist ein Forum, welches wir ausschließlich für einen Gedankenaustausch und als Diskussionsplattform für Interessierte bereitstellen, welche sich privat, durch das Studium oder beruflich mit Mikrocontroller- und Kleinstrechnersystemen beschäftigen wollen oder müssen ;-)
  • Dirk
  • Du bist noch kein Mitglied in unserer freundlichen Community? Werde Teil von uns und registriere dich in unserem Forum.
  •  Registriere dich

User Menu

 Kaffeezeit

  • Wir arbeiten hart daran sicherzustellen, dass unser Forum permanent online und schnell erreichbar ist, unsere Forensoftware auf dem aktuellsten Stand ist und der Server regelmäßig gewartet wird. Auch die Themen Datensicherheit und Datenschutz sind uns wichtig und hier sind wir auch ständig aktiv. Alles in allem, sorgen wir uns darum, dass alles Drumherum stimmt :-)

    Dir gefällt das Forum und unsere Arbeit und du möchtest uns unterstützen? Unterstütze uns durch deine Premium-Mitgliedschaft!
    Wir freuen uns auch über eine Spende für unsere Kaffeekasse :-)
    Vielen Dank! :ciao:


     Spende uns! (Paypal)