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.
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
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.
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
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.
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?
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.
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?
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.
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".
> 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.
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!
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.
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