www.mikrocontroller.net

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


Autor: nmbx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaue mal nach LIN-bus

Baustein: TJA1020 von NXP.

Autor: Sam .. (sam1994)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
oder du nutzt onewire.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ralf L.K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ahlol (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Detlev T. (detlevt)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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".

Autor: Jam (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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!

Autor: nmbx (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Es geht wirklich um 1 "Draht"

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

MfG Spess

Autor: Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Es geht wirklich um 1 "Draht"

Das nenne ich dann Antenne.

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Entwickler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Auch die funktioniert nicht ohne Masse,

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

Autor: abc (Gast)
Datum:

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

Autor: nmbx (Gast)
Datum:

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

klar gibts GND...

Autor: Bingo (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.