mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Welcher Optokoppler für 9600 Baud RS232?


Autor: Frank501 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe hier drei Platinen/Baugruppen, welche ich über die Serielle 
Schnittstelle miteinander verbinden möchte :
1. RFID Reader von Pollin
2. Auswerteeinheit mit Mega8
3. Displayeinheit mit Mega8

1 hängt über ca. 5m nicht verdrillter Leitung und einen Optokoppler, der 
das Signal invertiert (testweise PC817) an 2 (RS232 mit +/- 12V Pegel)
3 hängt direkt an TxD von 2 (TTL-Pegel, momentan etwa 30cm 2adreige 
Leitung aus einem Flachbandkabel (GND und TxD))

nun habe ich folgende Probleme :
1.: die Daten von 1 kommen meist nicht korrekt bei 2 an. Ich vermute, es 
liegt an dem Optokoppler, welcher anscheinend nicht schnell genug ist 
oder nicht richtig durchsteuert.

2.: die Daten von 2 kommen nie korrekt an 3 an.

Die Baudrate ist fest auf 9600 eingestellt, da ich die Baudrate von 1 
nicht ändern kann, weil mir der Quellcode fehlt. Der Bascom Quellcode, 
den man bei Pollin herunter laden kann, ist so wie es aussieht nicht 
komplett, so das man ihn nicht compilieren kann.
Ändere ich allerdings die Baudrate bei 2 und 3 auf 2400Baud, so kommen 
die Daten von 2 korrekt bei 3 an. Leider steht mir diese Option nicht 
zur Verfügung, da ich auf einer Schnittstelle nicht für Senden und 
Empfangen getrennt einstellen kann.

Die Verbindung über den Optokoppler zwischen 1 und 2 möchte ich wegen 
der Potentialtrennung nbedingt beibehalten.
Gibt es Optokoppler, die ich anstelle des PC817 einsetzen kann. Eine 
Adapterplatine ist kein Problem, aber die gesamte Schaltung möchte ich 
nicht ändern, da die Platine bereits fertig geätzt ist.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,.

bei richtiger Dimensionierung schafft ein PC817 gerade so die 9600 Baud.
Ich gehe wie folgt vor:
Vorwiderstand bei Diode auf ca 2 mA Strom dimensionieren. (Ist Abhängig 
vom tatsächlichen Pegel der verwendeten RS232-Schnittstelle). Auf der 
Empfängerseite verwende ich einen Emitterfolger. Also statt 10KOhm am 
Kollektor ca. 1K5 am Emitter des Phototransistors. Dadurch gerät dieser 
nicht so leicht in Sättigung und wird schneller.
Damit die Polarität wieder stimmt müssen ggf. noch die beiden 
Steckerpins auf der Sendeseite getauscht werden. Wenn nicht gerade ein 
Hardware-UART verwendet wird kann natürlich auch in der Software 
invertiert werden.

Das ganze ist natürlich nur eine Bastellösung. Die Toleranzen beim PC817 
mit Stromverstärkungsfaktor fordern ggf. einen individuellen Abgleich.

Ansonsten eignet sich für Baudraten bis ca 100000 Baud ein 6N138.
Für höhere Baudraten ein 6N137. Der braucht allerdings mindestens 5-15 
mA Sendestrom.

Autor: Gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ein Mittelding zwischen langsam und schnell ist der PC900 im 
platzsparenden 6-Pin Gehäuse :-)

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich sehe gerade Du hast die Platinen schon gemacht.
in dem Fall würde ich einfach den 1k Ohm auf der Sendeseite auf ca 1-2 
mA Anpassen und auf der Empfangsseite den Widerstand so hochohmig machen 
daß der Low-Pegel (0.4 - 0.6V) gerade so erreicht wird. (Der Transistor 
nicht in Sättigung gerät).

Autor: Knut Ballhause (Firma: TravelRec.) (travelrec) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>bei richtiger Dimensionierung schafft ein PC817 gerade so die 9600 Baud.

Das ist so nicht korrekt. An 470 Ohm Arbeitswiderstand (R2) schafft der 
auch MIDI (32.500 kBit/s).

@Frank501: Die 1N4148 gehört antiparallel über die Optokoppler-LED, 
nicht in Serie. Das ist aber nur Kosmetik.

Autor: Anja (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Travel,

war eine Denkblockade bei mir: Die RS232-Spec "garantiert" maximal 5mA 
Strom (Vorausgesetzt sie hat "mouse driveability"). Bei RS232 und 
bidirektionaler Übertragung denke ich automatisch an "maximal 2 mA für 
jede Richtung".

Du hast natürlich Recht: ein Optokoppler ist umso schneller je größer 
der Strom und je niedriger der Arbeitswiderstand (Damit der Transistor 
nicht in Sättigung gerät).

Autor: Frank501 (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Die Datenübertragu8ng von dem RFID Modul über die RS232 Schnittstelle 
funktioniert jetzt.

Ich habe den Tipp von Anja befolgt und den Vorwiderstand für die LED im 
Optokoppler soweit erhöht, das jetzt ca. 2mA fleissen können. R=3,3K.

Den Kollektorwiderstand konnte ich leider nicht anpassen, da er in einem 
SIL-Array steckt, aber so wie es jetzt ist, funktioniert es bereits. 
Danke für die ANtworten und guten Tipps.

Bei meinem 2ten Problem bin ich leider noch nicht weiter gekommen.

Die Datenübertragung von einem Mega8 auf den anderen über die Serielle 
Schnittstelle mit TTL-Pegeln.
Die Schaltung sieht (ohne jetzt die restliche Beschaltung eingezeichnet 
zu haben aus, wie im Anhang. Also Resetwiderstand, Quarze und 
Abblockkondensatoren sind schon vorhanden, nur in der Teilschaltung 
nicht eingezeichnet.

Die Leitung zwischen den beiden Controllern ist ca.30cm lang. In etwa so 
lang, wie sie später in der fertigen Anwendung auch werden soll.
Das Problem hier bei ist ebenfalls, das die Daten nur sehr unvollständig 
ankommen. Die Schatung in meinem Testaufbau hatte bereits ganz gut 
funktioniert:
Controller -> 50cm ungeschirmte Leitung -> Pegelwandler -> LCD Display 
mit seriellem Eingang

nur mit der jetzigen Schaltung mit nur 30cm Leitung dazwischen klappt es 
nicht.

Frank

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Masse verbunden?

MfG Spess

Autor: Frank501 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lach

Ja, die Masse ist verbunden. Ist bei einer Zweidrahtleitung auch nicht 
all zu schwer zu kontrollieren.

Ich habe die Ursache des Problemes gefunden: der Eingangspuffer für den 
UART war mit 8 Byte wesentlich zu klein. Bei der relativ langsamen, byte 
weisen Übertragung vom RFID Board zum Controller spielte das keine 
Rolle, aber wenn der Controller die Daten mit
writeln(serout,'20Zeichen langer Text');
raus haut, dann verschluckt sich der Empfänger etwas, wenn der Buffer 
voll und noch anderes zu erledigen ist.
Jetzt habe ich deb Buffer auf 22 Byte erhöht und es funktioniert.

Frank

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.