Forum: Mikrocontroller und Digitale Elektronik Invertierung der seriellen Kommunikation


von Sebastian M. (ascii1992)


Lesenswert?

Hallo zusammen,

im Rahmen meines aktuellen Projektes verwende ich zwei Mikrocontroller, 
die über eine optische Strecke miteinander kommunizieren. Leider ist das 
Datensignal am Slave gegenüber dem Sendesignal, invertiert. Ich vermute, 
dass das mit dem verwendeten LWL-Umsetzer zusammenhängt.
Ich möchte das Signal nun Hardwaretechnisch invertieren und bin auf den 
Baustein CD4047 gestoßen.

https://www.reichelt.de/inverter-dual-3--15-v-dip-14-mos-4007-p12535.html?PROVID=2788&gclid=Cj0KCQiA1ZGcBhCoARIsAGQ0kkr2jgzKx_FpeSS7zr2_q6wz8kfto5vHvOEEzXWjUnLJu8WGMOilnOAaAq3DEALw_wcB

Eignet sich ein solcher Inverter in Hinblick auf die Flanken für meine 
Anwendung bzw. hat jemand andere Lösungen bereits ausprobiert und kann 
von seinen Erfahrungen berichten ?

Besten Dank und viele Grüße

von A. S. (Gast)


Lesenswert?

Zum Invertieren eignet sich quasi jedes Logikgatter. Ein NAND, ein NOR, 
ein Inverter. Und je nach Spannung jede Technologie. HC, HCT, CMOS, ...

CMOS ist vielleicht ungewöhnlich. Nimm einfach irgendwas, was schon da 
ist. Wenn Du einen uC hasst und eine optische Strecke, dann wird ja 
jemand da sein, der schon mal was mit Logik gemacht hat.

Sebastian M. schrieb:
> Ich vermute,
> dass das mit dem verwendeten LWL-Umsetzer zusammenhängt.

Solche Dinge sollte man nicht vermuten, sondern nachvollziehen. Wenn Du 
das nicht kannst oder nicht tust, wirst Du trotz schneller ICs keine 
zuverlässige Strecke hinbekommen.

Also: Was ist Dein Treiber beim uC, was ist Deine Empfängerschaltung und 
wie stellst Du sicher, dass die LWL nicht in Sättigung gehen (Baudrate, 
Signale, ...)

von mm (Gast)


Lesenswert?

Sebastian M. schrieb:
> Eignet sich ein solcher Inverter in Hinblick auf die Flanken für meine
> Anwendung

Vielleicht...
Du hast unbekannte Mikrocontroller, die über ein unbekanntes serielles 
Interface mit unbekannter Geschwindigkeit und unbekannten IO-Pegeln 
kommunizieren sollen.
Mit dieser Fülle an Informationen kann man nur falsche Antworten geben.

von Wolfgang (Gast)


Lesenswert?

Sebastian M. schrieb:
> Eignet sich ein solcher Inverter in Hinblick auf die Flanken für meine
> Anwendung bzw. hat jemand andere Lösungen bereits ausprobiert und kann
> von seinen Erfahrungen berichten ?

Dann erzähl doch etwas über deine Anwendung.
Was sind das für LWL-Umsetzer und mit welcher Symbolrate willst du deine 
Daten übertragen?

von Anja (Gast)


Lesenswert?

Sebastian M. schrieb:
> Ich möchte das Signal nun Hardwaretechnisch invertieren

ich nehme immer die TXPOL und RXPOL Bits im UART Control Register 2 für 
die Invertierung.

Gruß Anja

von Sebastian M. (ascii1992)


Lesenswert?

Ich benutze in beiden Fällen einen Cortex M7 Prozessor welche auf einem 
Teensy 4.0 (Master) und Teensy 4.1 (Slave) Eval-Board verbaut ist.
Zur Kommunikation nutze ich aktuell eine Baudrate von 115200 wobei 9600 
auch genügen würden.

Die LWL-Umsetzer sind von Broadcom:
https://www.reichelt.de/lwl-sende-modul-820nm-160-mbd-st-anschluss-miniatur-link-hfbr1414z-p285171.html
Sender: HFBR1414Z, Empfänger HFBR2412TCZ

@Anja, danke für deinen Tipp, ich werde nochmal nach einer 
softwaretechnischen Möglichkeit suchen. Da Coding jedoch nicht mein 
Steckenpferd ist, habe ich zunächst nach einer Lösung durch Hardware 
gesucht.

Gruß

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Man könnte auch einfach senderseitig die LED passend anschließen. Je 
nachdem, ob man die gegen GND oder Vcc anschließt ergibt sich eine 
Invertierung oder eben nicht...

von Christian S. (roehrenvorheizer)


Lesenswert?

Sebastian M. schrieb:
> nd bin auf den
> Baustein CD4047 gestoßen.
hallo,

Bei Reichelt ist das Datenblatt gleich mit verlinkt. Schaut man dort mal 
rein, findet man die empfohlene Anstuerung mit ICs der folgend genannten 
Serie:

"The SN5545xB and SN7545xB devices are dual-
peripheral drivers designed for use in systems that
employ TTL logic. "

Man kann argumentieren, sie seien schwierig aufzutreiben, wenn man deren 
Beschaffung vermeiden möchte.

SN55452B hat die gewünschte NAND - Funktionalität.

https://www.ti.com/lit/ds/symlink/sn75451b.pdf?ts=1669625759953&ref_url=https%253A%252F%252Fwww.ti.com%252Fproduct%252FSN75451B

Vielleicht das mal anschauen:
Figure 11: Recommended Drive Circuit
https://cdn-reichelt.de/documents/datenblatt/A500/HFBR-14XXZ.pdf

mfg

von Wolfgang (Gast)


Lesenswert?

Sebastian M. schrieb:
> Da Coding jedoch nicht mein Steckenpferd ist, habe ich zunächst nach
> einer Lösung durch Hardware gesucht.

Dann zeige bitte den Schaltplan zu dem Aufbau der LWL-Strecke. Um eine 
Diode invertiert anzusteuern, reicht es oft, sie passend anzuschließen. 
Wie viel Strom schickst du durch die Sende-LED?

von olaf (Gast)


Lesenswert?

> Um eine Diode invertiert anzusteuern, reicht es oft, sie
> passend anzuschließen.

Man sollte aber bedenken das es von allgemeiner Klugheit zeugt
eine Uebertragungsstrecke so zu designen das die Diode die
meiste Zeit, also sagen wir mal zwischen den Uebertragungen
aus ist.
Falls die beteiligten Controller das koennen kann es sogar
noch besser sein wenn man die serielle Schnittstelle auf
IRDA umschaltet und so nur kurze Impulse uebertraegt.

Olaf

von M. K. (sylaina)


Lesenswert?

Sebastian M. schrieb:
> Die LWL-Umsetzer sind von Broadcom:
> 
https://www.reichelt.de/lwl-sende-modul-820nm-160-mbd-st-anschluss-miniatur-link-hfbr1414z-p285171.html
> Sender: HFBR1414Z, Empfänger HFBR2412TCZ

Na dann ist es doch Easy, der HFBR2412TCZ gibt ein TTL-Signal aus, das 
kannst du bei deinen Geschwindigkeiten doch locker mit einem BC547 und 
Co invertieren. Da verstehe ich das Problem, ehrlich gesagt, nicht. Ein 
Widerstand und ein BC547 und der Drops ist gelutscht. Oder was gibt es 
noch für Randbedingungen, die diese Lösung verbieten und wir noch nicht 
kennen?

Sebastian M. schrieb:
> Zur Kommunikation nutze ich aktuell eine Baudrate von 115200 wobei 9600
> auch genügen würden.

Man sollte die Geschwindigkeit stets so schnell wie nötig, so langsam 
wie möglich wählen um die Übertragungsqualität zu maximieren. Ein Signal 
mit 115k2 Baud lässt sich leichter stören als ein Signal mit 9k6 Baud. 
Wenn für deine Anwendung also 9k6 Baud hinreichend schnell sind dann ist 
eine höhere Baudrate nicht empfehlenswert, auch wenn es geht. Finde ich 
zumindest. Natürlich kann man auch die Strategie "Weils geht" verfolgen 
;)

von Wolfgang (Gast)


Lesenswert?

olaf schrieb:
> Man sollte aber bedenken das es von allgemeiner Klugheit zeugt
> eine Uebertragungsstrecke so zu designen das die Diode die
> meiste Zeit, also sagen wir mal zwischen den Uebertragungen
> aus ist.

Das ist schon durch den Empfänger sichergestellt. Bei leuchtender LED 
liefert der HFBR2412TCZ einen High-Pegel, so dass das für ein UART 
passen sollte.

p.s.
An Stelle des HFBR1414Z hätte es auch ein HFBR1412Z getan ...

von Markus M. (Firma: EleLa - www.elela.de) (mmvisual)


Lesenswert?

Sebastian M. schrieb:
> Ich benutze in beiden Fällen einen Cortex M7 Prozessor welche auf einem
> Teensy 4.0 (Master) und Teensy 4.1 (Slave) Eval-Board verbaut ist.
> Zur Kommunikation nutze ich aktuell eine Baudrate von 115200 wobei 9600
> auch genügen würden.

Anja schrieb:
> ich nehme immer die TXPOL und RXPOL Bits im UART Control Register 2 für
> die Invertierung.
>
> Gruß Anja

Anja hat schon vorher die richtige Antwort gegeben, bevor sie wusste 
dass der µC das auch kann.
Top!

von olaf (Gast)


Lesenswert?

> Ein Widerstand und ein BC547 und der Drops ist gelutscht.

Bist du des Wahnsinns? Zwei Bauteile wo auch eins geht? Und dann noch 
eine lully steigende Flanke?
https://www.ti.com/lit/ds/symlink/sn74lvc1g04.pdf
Laesst euch mal die beeindruckende Applikationsliste durch. Da
ist das Marketing mal wieder heiss gelaufen.

> Anja hat schon vorher die richtige Antwort gegeben, bevor sie wusste
> dass der µC das auch kann.

Ja, diese Invertierung direkt in der Hardware kommt immer mehr in Mode. 
Muss wohl mehrere Leute mit diesem Problem geben. :)

Olaf

von Steve van de Grens (roehrmond)


Lesenswert?

Sebastian M. schrieb:
> Eignet sich ein solcher Inverter in Hinblick auf die Flanken für meine
> Anwendung

Der CD4047 ist kein Inverter, sondern ein "monostable/astable 
multivibrator". Ich denke nicht, dass du dein serielles Signal durch 
irgendwelche absichtlich erzeugten Schwingungen verzerren willst.

Der CD4007 ist ein Spezialfall, den nimmt man eigentlich nur, wenn man 
absichtlich einfache komplementäre MOS Transistoren braucht. Seine 
Ausgänge liefern nur sehr wenig Strom.

Ich kenne den nur aus einem alten Lehrbuch aus einer Zeit als man MOS 
Transistoren noch nicht einzeln kaufen konnte. Da wurde er verwendet, um 
die Funktion von MOS Transistoren zu erforschen. Habe ihn einmal in 
einer analogen Schaltung verwendet, um Audio-Kanäle auf "stumm" zu 
schalten.

Der normale 6-Fach Inverter aus dieser Serie wäre der CD4069. Bis 1 Mhz 
eignet er sich auf jeden Fall, darüber müsste man sich Details deiner 
Schaltung anschauen.

Dann gibt es da noch die ähnliche 74er Serie, konkret den 74HC04. Er 
macht das gleiche, hat aber etwas andere Logikpegel und höher belastbare 
Ausgänge. In der LVC Variante eignet er sich nicht nur für gleiche 
Logikpegel am Ein/Ausgang, sondern auch als Pegelwandler (3V -> 5V). Für 
dich interessanter ist allerdings wohl, dass es den 74LVC04 als 
klitzekleines Einzelgatter gibt, dann heißt er 74LVC1G04. Der doppelte 
heißt 74LVC2G04.

: Bearbeitet durch User
von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Falls du Arduinos bzw. "Kompatible" verwendest: Einige Varianten der Lib 
"SoftwareSerial" haben einen Constructor-Parameter, um den Logikpegel zu 
invertieren ... ich vermute aber, dass der nicht für RX und TX getrennt 
gesetzt werden kann. Wäre mal eine Erweiterungs-Idee ...

von M. K. (sylaina)


Lesenswert?

olaf schrieb:
> Bist du des Wahnsinns? Zwei Bauteile wo auch eins geht? Und dann noch
> eine lully steigende Flanke?

Ich wollte nicht damit sagen, dass es nicht noch einfacher geht, mir kam 
dabei nur in den Sinn, so einen BC547 und Co dürften die meisten wie 
einen Widerstand "in der Schublade" haben, das dürfte bei deinem 
vorgeschlagene Inverter weniger der Fall sein. Und bezüglich der Flanke: 
Wir reden hier von maximal 115k2 Baud. Wie daneben muss man greifen um 
dieses Signal mit nem BC und Widerstand kaputt zu machen? Oh nein, 
warte...die Antwort lautet "Ja"!?! :D

von Lothar J. (black-bird)


Lesenswert?

Der TO sollte erst mal prüfen, ob das Signal wirklich invertiert aus dem 
Empfänger kommt.

Vielleicht hat auch irgendeiner dort dem Sender schon das invertierte 
Signal zugeführt.

Blackbird

von Wolfgang (Gast)


Lesenswert?

Lothar J. schrieb:
> Der TO sollte erst mal prüfen, ob das Signal wirklich invertiert aus dem
> Empfänger kommt.

Wie?
Nachmessen?

Erstmal würde schon der Schaltplan helfen. Das Datenblatt zeigt doch 
sogar, wie die Beschaltung der Wandler aussehen kann. Die Pegelzuordnung 
beim LWL-Empfänger sieht in Ordnung aus und wenn man den nicht mit zwei 
linken Händen anschließt, kann da nicht viel verkehrt laufen. Also 
bleibt die (unbekannte) Beschaltung auf der Senderseite.

von Hannes J. (Firma: _⌨_) (pnuebergang)


Lesenswert?

Auch wenn es irgendwo im Datenblatt steht, der HFBR2412TCZ(*) gibt KEIN 
TTL-Singal aus. Der hat einen Open-Collector Ausgang. Daraus kann man 
sich, mit einem zusätzlichen Widerstand (Datenblatt sagt 560Ω) einen 
TTL-Ausgang schnitzen.

Man kann sich auch was anderes raus schnitzen. Da man uns den aktuellen 
Schaltplan verweigert kann man nur raten ob die Invertierung vielleicht 
am Open-Collector-Ausgang stattfindet, oder wie andere vermuteten an der 
Beschaltung der Sendediode.

Zumindest würde ich im ersten Ansatz weder einen BC547 noch ein Logic-IC 
nehmen. Sondern zuerst mal NACHMESSEN und die eigene Schaltung 
kontrollieren.
_
(*) Warum eigentlich die TC-Variante?

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Hannes J. schrieb:
> an der Beschaltung der Sendediode.
Die wäre sowieso interessant, ist die LED des Senders doch immerhin für 
60-100mA spezifiziert...

von Wolfgang (Gast)


Lesenswert?

Lothar M. schrieb:
> Die wäre sowieso interessant, ist die LED des Senders doch immerhin für
> 60-100mA spezifiziert..

Passend dazu tauchen für die Länge der LWL-Strecke Werte im 
Kilometerbereich auf. 😉

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.