Forum: Mikrocontroller und Digitale Elektronik UART mit Senden und Empfangen auf einer Leitung


von nmbx (Gast)


Lesenswert?

HI,

ich hab da mehrere Atmegas die über 1 Datenleitung verbunden werden 
sollen. Verwendet werden soll der UART mit 9600 als Baudrate, Kabel sind 
einige Meter lang, daher die niedrige Baudrate.
Anfangs war geplant, dass nur das Hauptsteuergerät Daten an die 
einzelnen Module sendet. Daher soll TXD des Hauptsteuergeräts mit RXD 
der Module verbunden werden. Das wären ca. 8 Stück.
Müsste doch so klappen, oder?

Es kam natürlich bald die Idee auf, ob man nicht auch Daten andersherum 
wieder zurücksenden könnte, das am besten auch noch mit nur 1 Leitung, 
also ohne eine neue ziehen zu müssen.
Die Idee ist, dass das Hauptsteuergerät einem bestimmten Modul mitteilt, 
dass es in den Sendemodus wechseln soll. Danach würde das 
Hauptsteuergerät seinen UART-Sender abschalten und den Empfänger 
einschalten. Das Modul würde den Sender einschalten und den Empfänger 
abschalten. Dann würden die Daten gesendet werden. Nach einer 
festgelegten Zeit, nachdem ein paar Byte übertragen wurden wird wieder 
der Anfangszustand hergestellt und in den "normalen" Modus gewechselt.

Wäre das so möglich? Das waren jetzt erstmal theoretische Überlegungen, 
ob es hernach auch wirklich gebaut wird sei mal dahingestellt. Die Idee 
entstand aus einer Diskussion heraus.

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


Lesenswert?

Schaue mal nach LIN-bus

Baustein: TJA1020 von NXP.

von Sam .. (sam1994)


Lesenswert?

oder du nutzt onewire.

von Reinhard Kern (Gast)


Lesenswert?

nmbx schrieb:
> ich hab da mehrere Atmegas die über 1 Datenleitung verbunden werden
> sollen. ...

Hallo,

logisch ist das garkein Problem, wenn du die Software für beide Seiten 
programmierst. Allerdings ist es eine furchtbar schlechte Idee, die 
CMOS-Signale des Prozessors direkt durch die Gegend zu verlegen, und 
ausserdem brauchst du einen abschaltbaren Ausgang zum Senden. Da landest 
du schnell bei RS485, das benutzt die gleichen Leitungen zum Senden und 
Empfangen, allerdings eine Doppelleitung mit Differenzsignalen, weil das 
erheblich störsicherer ist. Wenns aber unbedingt sein muss, kann man 
auch nur einen Draht davon verwenden.

Schau dir mal RS485-Treiber-ICs an.

Gruss Reinhard

von Ralf L.K. (Gast)


Lesenswert?

nmbx schrieb:
> Daher soll TXD des Hauptsteuergeräts mit RXD
> der Module verbunden werden. Das wären ca. 8 Stück.
> Müsste doch so klappen, oder?
>
> Es kam natürlich bald die Idee auf, ob man nicht auch Daten andersherum
> wieder zurücksenden könnte, das am besten auch noch mit nur 1 Leitung,
> also ohne eine neue ziehen zu müssen.
Wie oben schon angesprochen sind TTL / CMOS Signale mies.

Meine Idee wäre die Controller als Ring zu verbinden wobei dann die 
Daten noch Adressierungsinfos enthalten müßten. Daten die nicht zum 
jeweiligen Controller gehören würden einfach per Software zum Nächsten 
weiter geleitet werden.

Und die Pegel dann als RS232 auslegen. Dürfte preisgünstig sein und 
genauso viel Programmieraufwand wie die anderen 1 Leitungsideen haben.

von Frank K. (fchk)


Lesenswert?

LIN ist etabliert und funktioniert in Millionen von Autos und Maschinen 
störungsfrei, und es ist haargenau das, was Du willst. Atmel baut einige 
AVRs, die direkt LIN-Unterstützung enthalten (Break-Erkennung etc), aber 
LIN ist so ausgelegt, dass es auch mit einem normalen UART oder ganz in 
Software zu realisieren ist.

LIN verwendet wie CAN immer externe Transceiver-Chips für den Physical 
Layer.

http://www.lin-subbus.org/

Andere Möglichkeit: Single-Wire CAN. Auch dafür gibts Transceiver.

fchk

von Detlev T. (detlevt)


Lesenswert?

Optimal ist natürlich was anderes.

Man sollte vermeiden, dass durch Fehler elektrische Kurzschlüsse 
entstehen. Naheliegend wäre es daher, "Pull-Down"-Widerstände gegen -12V 
(oder was die Spannung gerade ist) zu nehmen und vor die Ausgänge der 
Treiber Dioden (Anode an den Ausgang, Kathode zum Bus).

Im Idle-Zustand ist dann -12V auf dem Bus, also eine logische 1. Wer 
sendet, zieht den Bus dann auf +12V. Wenn mehr als einer sendet, gibt es 
zwar logisches Kuddel-Muddel, Kurzschlüsse verhindern aber die Dioden. 
Als Protokoll kannst du ja einmal einen Blick auf SNAP werfen.

von ahlol (Gast)


Lesenswert?

Danke erstmal für eure ganzen Tipps! :-) Das was ich vorhabe würde schon 
in Richtung des LIN-Bus gehen.

Was ist eigentlich das Problem an den TTL Signalen? Macht die 
Flankensteilheit da Probleme?

von Christian (Gast)


Lesenswert?

Der Störabstand ist hauptsächlich das Problem. Auf langen Leiteungen 
(z.B. neben normaler 230V Stominstalation) hat man schnell 2 - 3 V 
Einstreuung. Und schon ist dein 0 Signal High... Die Flanken werden 
natürlich auch je nach Leitung verschliffen. Bei niedrigen Baudraten ist 
das aber nicht so kritisch.

von Jam (Gast)


Lesenswert?

Für das eingangs geschilderte Problem gibt es die bereits beschriebene 
Standardlösung der RS485-Übertragung. Ohne viel Probleme und ohne 
irgendwelche speziellen Busprotokolle implementieren zu müssen läßt sich 
damit ein einfaches Übertragungssystem aufbauen. Bei galvanisch 
getrennten Schnittstellen sind leicht mehrere 100 Meter Kabellänge bei 
über 100 kBaud sicher zu beherrschen. Warum also komplizierter denken 
als nötig?

von Detlev T. (detlevt)


Lesenswert?

Jam schrieb:
> Für das eingangs geschilderte Problem gibt es die bereits beschriebene
> Standardlösung der RS485-Übertragung.

Dann erzähl 'mal. Von einem RS485-Standard über nur einen Draht habe ich 
nämlich noch nie gehört.

nmbx schrieb:
> Es kam natürlich bald die Idee auf, ob man nicht auch Daten andersherum
> wieder zurücksenden könnte, das am besten auch noch mit nur 1 Leitung,
> also ohne eine neue ziehen zu müssen.

von Frank M. (ukw) (Moderator) Benutzerseite


Lesenswert?

Detlev T. schrieb:
> Dann erzähl 'mal. Von einem RS485-Standard über nur einen Draht habe ich
> nämlich noch nie gehört.

Man müsste erstmal wissen, was mit "Draht" gemeint ist. Eine einzelne 
Litze? Oder zumindest noch eine weitere für die Masse?

RS485 funktioniert bei nicht zu langen Kabellängen auch ohne schirmende 
Masse. Voraussetzung sind aber für den Differenzbetrieb 2 verdrillte 
"Drähte".

von Jam (Gast)


Lesenswert?

> Dann erzähl 'mal. Von einem RS485-Standard über nur einen Draht habe ich
> nämlich noch nie gehört.

Der mathematische Faktor zwischen einem Draht und der genannten 
Leitung/Kabel kann mit "zwei" bezüglich der Einzeladern angenommen 
werden.

von Entwickler (Gast)


Lesenswert?

Irgendwie lustig, der TO schreibt von einer 'Datenleitung', welche der 
eine als ein Stück Draht und der andere als 20 verdrillte und einzeln 
geschirmte Adernpaare interpretiert.

Der eine empfiehlt den KFZ LIN-Bus mit TJA1020, den man an jeder Ecke 
bekommt und der typ. mit 12V versorgt werden möchte; der andere sieht 
dagegen das Problem bei parallel laufenden 230VAC Leitungen, die nichts 
anderes machen als zu stören.

Die Anforderung, über einige Meter mit niedriger Baudrate zu übertragen, 
wird als Anlaß genommen, auf die schlechte Signalqualität bei langen 
Leitungen hinzuweisen.

@nmbx
Klär uns doch einfach 'mal besser auf!

von nmbx (Gast)


Lesenswert?

Es geht wirklich um 1 "Draht"
Die Entfernung sind ein paar Meter in einem normalen Wohnhaus, ohne 
besondere Umgebung wie starke Motoren, Leuchtstoffröhren oder 
ionisierender Strahlung ;-)

Die Idee war ja, eben mit wenig Aufwand zum Ziel zu kommen. Wäre das 
also mit UART grundsätzlich möglich? Offenbar ja schon. Die maximale 
Baudrate soll ja nur bei etwa 9600 liegen. Das Testen mit einigen Metern 
Draht war auch bei höheren Baudraten und einem FTDI Chip möglich.

von Spess53 (Gast)


Lesenswert?

Hi

>Es geht wirklich um 1 "Draht"

Mit einem Draht geht es nicht. Du brauchst zumindest noch Masse.

MfG Spess

von Entwickler (Gast)


Lesenswert?

>Es geht wirklich um 1 "Draht"

Das nenne ich dann Antenne.

von Reinhard Kern (Gast)


Lesenswert?

Entwickler schrieb:
>>Es geht wirklich um 1 "Draht"
>
> Das nenne ich dann Antenne.

Auch die funktioniert nicht ohne Masse, auch wenn man die auf den ersten 
Blick nicht unbedingt sieht. Jedenfalls nicht bei 1 Draht. Für einen 
Dipol braucht man halt auch 2. Die physikalischen Gesetze können 
ungeheur stur sein.

Gruss Reinhard

von Entwickler (Gast)


Lesenswert?

>Auch die funktioniert nicht ohne Masse,

Und wie machen das die Kosmo-/Astronauten? Haben die eine Masseleitung 
an der ISS?

von abc (Gast)


Lesenswert?

Das ist bei denen 0.05er Kupferlackdraht zur Erde gespannt. Nicht 
sichbar für uneingeweihte.
Tricks.. wo man sie kaum vermutet

von nmbx (Gast)


Lesenswert?

ja und der Strom wird wohl auch durch Induktion zu meiner Schaltung 
übertragen ;-)#

klar gibts GND...

von Bingo (Gast)


Lesenswert?

Atmel has an Appnote for a Single-wire Software UART

AVR274: Single-wire Software UART on tinyAVR and megaAVR devices
http://www.atmel.com/dyn/resources/prod_documents/AVR274.pdf
http://www.atmel.com/dyn/resources/prod_documents/AVR274.zip

mfg
Bingo

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.