Forum: Mikrocontroller und Digitale Elektronik UART Single Wire Signal Invertierung


von Arno W. (horido)


Lesenswert?

Hallo zusammen,

gibt es einen einfachen Weg (=IC) ein serielles TTL Signal Single Wire 
(ein-Draht-Verbindung für RX und TX) zu invertieren. Ich habe das 
Problem das der SAMD21 Cortex M0+ beim SoftwareSerial im Single Wire 
Mode nicht invertieren kann, also muss eine Hardwarelösung her. :(

von Gustl B. (gustl_b)


Lesenswert?

Wenn es TTL ist und keine echten RS232 Pegel, dann geht ein NOT Gatter.

von Arno W. (horido)


Lesenswert?

....gibt es NOT GATTER auch bi-direktional

von H.Joachim S. (crazyhorse)


Lesenswert?

Arno W. schrieb:
> SoftwareSerial

sollte sich in der Software invertieren lassen.

von Arno W. (horido)


Lesenswert?

Ja, nur das funktioniert eben beim XIAO ATSAMD21G18A-MU nicht darum 
brauche ich eine alternative Hardwareergänzung

von Jim M. (turboj)


Lesenswert?

Normaler UART (TX und RX), normales 2x NOT, danach den RX und TX Zweig 
via Diode und Widerstand verschalten (also 2 Draht -> 1 Draht extern).

von Gustl B. (gustl_b)


Lesenswert?

Arno W. schrieb:
> ....gibt es NOT GATTER auch bi-direktional

Verdammt, das mit dem einen Draht hatte ich übersehen.
Aber gut, es kann ja immer nur eine Quelle die Leitung treiben. Und da 
gibt es schon Schaltungen die bidirektional funktionieren. In 
Spannungsübersetzern sind die drinnen.
https://www.ti.com/lit/gpn/TXB0102
Nur das selber zu bauen und um zwei NOT Gatter zu erweitern ist eher 
eine große Baustelle.

Ist denn wenigstens ein weiterer Pin als Ausgang verfügbar? Dann könnte 
man ein Gatter verwenden mit enable Eingang dessen Ausgang man also 
hochohmig schalten kann.

: Bearbeitet durch User
von Wolfgang (Gast)


Lesenswert?

Gustl B. schrieb:
> Aber gut, es kann ja immer nur eine Quelle die Leitung treiben.

Du hast wired-or nicht verstanden.

Bei CAN, LIN oder 1-wire sind mehrere Datenquellen auf einer Leitung 
(Bus) sogar zum Prinzip erhoben. Man spricht dann von dominantem und 
rezessivem Pegel. Um das friedliche Miteinander kümmert sich das 
Protokoll.

von Wilhelm M. (wimalopaan)


Lesenswert?

Wenn es nicht umschaltbar sein soll, ist es nicht schwer: Inverter vor 
RX und ein P-Channel mit pull-down bei TX, dann zusammen.

von Wolfgang (Gast)


Lesenswert?

Arno W. schrieb:
> Ich habe das Problem das der SAMD21 Cortex M0+ beim SoftwareSerial
> im Single Wire Mode nicht invertieren kann, also muss eine
> Hardwarelösung her. :(

Und die soll genau was machen?
Was ist der rezessive Pegel jeweils auf den beiden Teilnehmerseiten?

von Wilhelm M. (wimalopaan)


Lesenswert?

Wolfgang schrieb:
> Und die soll genau was machen?

SingleWire Half-Duplex mit invertierten Pegeln: 0V == inactive

Beispiel: S.Port im RC-Modellbau

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

Arno W. schrieb:

> gibt es einen einfachen Weg (=IC) ein serielles TTL Signal Single
> Wire (ein-Draht-Verbindung für RX und TX) zu invertieren.

Nein.

> Ich habe das
> Problem das der SAMD21 Cortex M0+ beim SoftwareSerial im Single Wire
> Mode nicht invertieren kann, also muss eine Hardwarelösung her. :(

Das ist gleich doppelt Blödsinn. Denn natürlich wäre es trivial, den 
Pegel bei Verwendung einer Soft-UART zu invertieren. Es geht aber nicht. 
Der Witz bei singe-wire UART ist ja, daß TxD ein open-collector (bzw. 
open-drain) Ausgang ist. Damit die Gegenseite auch senden kann, muß der 
passive (rezessive) Pegel H sein. Realisiert durch einen 
Pullup-Widerstand.

Im Prinzip könnte man das mit invertiertem Pegel mit einem Pulldown und 
einem PNP open-collector Ausgang machen. Hat ein µC aber nicht. Und 
extern läßt sich das nur dann nachrüsten, wenn man getrennte Sende- und 
Empfangspins hat.

von Bauform B. (bauformb)


Lesenswert?

Dann muss man eben den zweiten Pin opfern. Man will doch nicht etwa 2 
SAMD21 miteinander verbinden, sondern einen mit so einem S.Port? Also 
kann man ein total normales UART benutzen und TX mit einem PNP/P-Kanal 
invertieren. RX kann der SAM wahrscheinlich intern invertieren.

von Arno W. (horido)


Lesenswert?

Wilhelm M. schrieb:
> Wolfgang schrieb:
>> Und die soll genau was machen?
>
> SingleWire Half-Duplex mit invertierten Pegeln: 0V == inactive
>
> Beispiel: S.Port im RC-Modellbau

Ja es ist genau dafür! :)

von Wilhelm M. (wimalopaan)


Lesenswert?

Arno W. schrieb:
> Ja es ist genau dafür! :)

Dann steht oben die Lösung in meinem Beitrag

von Uwe K. (ukhl)


Lesenswert?

Oder man klemmt einen ATtiny13a o.ä. dawzischen. Der übersetzt dir das 
Signal in beide Richtungen. Damit wird der Bus entkoppelt.

Vorsicht mit dem PullUp/Down. Wenn idle auf 0V ist, gehen ich von einem 
PullDown aus. Die 0V darf dann nicht aktiv auf den Pin gelegt werden, 
sonst kann es zu einem Kurzschluss kommen.

: Bearbeitet durch User
von Arno W. (horido)


Lesenswert?

Vielen Dank für die offene Diskussion. Ich habe die Library von 
SoftwareSerial angepasst (Halfduplex inverted)) und es funktioniert.

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.