Forum: Mikrocontroller und Digitale Elektronik Controllereingang an "langer Leitung"


von Stefan K. (repman)


Lesenswert?

Hallo zusammen,
ich möchte zwei ATMega328 über ein ca. 2 m langes Kabel miteinander 
koppeln (ein Ausgang des einen soll an einen Eingang des anderen 
angeschlossen werden). Es handelt sich lediglich um ein Schaltsignal, 
keine schnellen Signale oder gar PWM.
Den Eingang habe ich über 10k gegen +5V gezogen.
Brauche ich für den Ausgang einen Bustreiber oder eine 
Transistor-Schaltstufe oder geht das auch so? Kabellänge wie geschrieben 
ca. 2 m.
Was würdet Ihr empfehlen?
Viele Grüße
repman

von Rainer U. (r-u)


Lesenswert?

Bei langsamen Signalen geht es auch so. Kleiner Tiefpass / 
Keramik-Kondensator (10-100nF) zwischen Masse und Signal und Leitung 
verdrillen hilft gegen Induktionen von außen. Ein fehlererkennendes / 
korrigierendes Übertragungsprotokoll hilft bei Bedarf zusätzlich.

: Bearbeitet durch User
von Michael F. (sharpals)


Lesenswert?

Was soll denn da übertragen werden ?  Der ATmega hat ja HW-Uarts , die 
schreien geradezu nach anwendung.


Beim Pullup würde nur von 10K auf 1K gehen ...

Ich selbst benutze soetwas gerade mit einen Uart am 2313 und als 
softuart am Attiny85.

Das kabel selbst stellt auch einen kondensator da. Ist dann der pullup 
zu hoch, dann wird die flanke von dem impuls zu sehr verschliffen.


Bei 9.6K könnten 10-100nF als abblockkondenstator etwas hoch sein.

Wenn die umgebung sauber ist , reicht der pullup. Wenn die umgebung mit 
viel störungen behaftet ist, dann benötigst du einen treiber, der aus 
dem assymetrischen signal, ein Symetrisches macht ( siehe RS422). Dann 
kannst du mit einem verdrillten kabel die signale übertragen und die 
einstrueungen heben sich auf.

in etwas nobler sieht es so aus : 
http://www.intersil.com/en/products/interface/serial-interface/rs-485-rs-422/ISL8489E.html

die gibt es aber auch ,,einseitig" und günstiger.

Du kannst aber auch anstelle eines Pullups , einen widerstand vom 
eingang gegen die masse legen und den Treiber des Uarts als 
stromschnittstelle betreiben.

Da der Atmel bis zu 20mA treieben kann und einen gegentaktausgang hat, 
ist das etwas robuster, als die übertragung des spannungspegels.

: Bearbeitet durch User
von Stefan K. (repman)


Lesenswert?

Hallo Michael,
danke für die schnelle Antwort.

Michael F. schrieb:
> Was soll denn da übertragen werden ?  Der ATmega hat ja HW-Uarts , die
> schreien geradezu nach anwendung.

Viel zu kompliziert gedacht: Ich will einfach nur dem einen Controller 
(dem Slave) von seinem Master sagen, dass er in 10 sec. abgeschaltet 
wird und er sich bitte darauf vorbereiten soll. Wenn der Slave also an 
seinem Eingang ein LOW-Signal bekommt, weiss er, dass bald der Saft 
abgedreht wird und er z. B. einen kleinen Motor langsam stoppen oder 
eine LED-Leiste runterdimmen soll.
Es geht also nicht direkt um eine Signalübertragung. Die Kopplung ist 
eher wie ein Schalter.

Viele Grüße
repman

von Michael F. (sharpals)


Lesenswert?

achso ...

dann würde ich den vorgeschlagenen kondensator nehmen und den pullup auf 
1K reduzieren.

von Stefan K. (repman)


Angehängte Dateien:

Lesenswert?

Michael F. schrieb:
> achso ...
>
> dann würde ich den vorgeschlagenen kondensator nehmen und den pullup auf
> 1K reduzieren.


Also dann so?

Viele Grüße
repman

von Michael F. (sharpals)


Lesenswert?

ja das sollte reichen.

Nimmst du ein pegelinterrupt ?

Wenn du verhindern willst, das ein glitch stört, würde ich den port 
zweimal abfragen.

Ich lasse an meinem eine 1ms impuls ausgeben.

Wenn dann der ,,slave" feststellt, daß er angesprochen wird, wartet er 
nocheinmal 0,5 ms und schaut nach, ob der port immernoch gesetzt ist.

von A. S. (Gast)


Lesenswert?

Es mag konrintiert klingen, aber die Randbedingungen sind (mir) noch 
nicht klar. Bei 2m stellen sich so fragen wie

- gemeinsame Versorgung (Vcc)?
- zweipolige Verbindung (Signal + Masse)?
- Gefahr von Ausgleichstströmen (welches "Masse-"Potential?


Ich persönlich würde die Widerstände so wählen, dass etwa 50% des 
maximalen IO-Stroms fließen (wenn stromsparen kein Thema ist) dafür aber 
Serienwiderstände an Ein- und Ausgang in Richtung Kabel setzen. Also 
z.B. bei Pull-Up 10k ein Serienwiderstand von 1k im Sender und 
Empfänger. (Zwecks besserem Pegel den Pull-Up an den Ausgang, nicht an 
den µC-Pin.)

Wenn Kabelbruch/Kurzschluss detektierbar sein sollen, dann ist entweder 
ein ADC-Eingang oder eine mini-Transistorschaltung mit zweitem 
Eingangssignal notwendig (oder halt ein togglendes Signal).

von Thomas E. (picalic)


Lesenswert?

Servus,

1k Pullup halte ich für Stromverschwendung, 5 oder 10 k, zusammen mit 
dem Kondi, sind schon ok. Empfehlen würde ich aber Serienwiderstände: 
100-200 Ohm am Ausgang, und auch einen Serienwiderstand vor dem Eingang 
des empfangenden µC. Das schützt die Ports beim Anstecken und verhindert 
Probleme mit Überschwingern an den Flanken.

von Michael F. (sharpals)


Lesenswert?

auch nicht schlecht :-)

Aber dann kann man auch gleich ein Optisches toslink nehmen.
Dann hast die wirklich alles erschlagen.

Sender ToslinkLED
strecke ( billiges ) optisches kabel

empfänge Toslinkempfänger.

Bei 10K pullup könnte das kabel schon als antenne wirken. Das habe ich 
selbst erlebt. Und bei der kurzen schaltdauer, stören die 1K auch nicht.


Dann würde ich aber die 1K gegen masse legen und  270 Ohm am ausgang ( 
dann würden etwas unter 20mA fließen, wenn kurzschluß.

@ Stefan  sind die schaltung fest miteinander verbunden ?
Dann würde ich nur noch den zusätlichen 270 ohm an ausgang anfügen ( zur 
sicherheit ).

von Stefan K. (repman)


Angehängte Dateien:

Lesenswert?

Danke allen, die sich an der Diskussion beteiligen!
Ich habe das mal zusammengefasst (s.o.).

VCC und Masse werden natürlich ebenfalls verbunden. VCC des Slave wird 
über einen Mosfet geschaltet, so dass der Master dem Slave den Saft 
abdrehen kann. Da der Slave aber vorher noch einiges erledigen muss, 
kann ich nicht einfach den Strom abstellen, sondern muss ihm (über ein 
PortPin) sagen, dass gleich eine Stromsperre kommt. Dann kann er - 
bildlich gesprochen - noch schnell den Kopf von Shampoo befreien kann, 
bevor das Wasser abgestellt wird. .-)
VG
repman

von Stefan F. (Gast)


Lesenswert?

Sind die Schaltungen beide direkt oder indirekt geerdet?

Wenn ja, dann hast du eventuell Probleme durch eine Masseschleife. 
Magnetfelder induzieren einen Strom in der GND Leitung, so dass die GND 
Pegel links und rechts nicht gleich sind. Bei mehr als 0,6V Differenz 
kommt es dann zu Fehlfunktionen.

Wenn eine Erdung vorhanden ist, dann bitte nur an einem Ende das Kabels.

von Stefan K. (repman)


Lesenswert?

Stefan U. schrieb:
> Sind die Schaltungen beide direkt oder indirekt geerdet?

Beide Schaltungen sind nicht geerdet. Sitzen in einem Plastikgehäuse 
ohne Metallkontakt nach aussen.
VG
repman

von Michael F. (sharpals)


Lesenswert?

ja dann reicht es, was du jetzt eingezeichnet hast :-)

Du kannst den II.prozessor auch einfach in einen deepsleep versetzen, 
dann brauchst du ihn nicht ausmachen ...

Wenn du den pegel nach unten laufen lässt, bereitet er sich auf das 
schlafen vor, indem alles erledigt wird und er geht dann in den 
tiefschlaf.

Ziehst du den pegel wider nach oben, wacht er erneut auf.

von Jobst M. (jobstens-de)


Lesenswert?

Optokoppler. Dann sind Masseschleifen und Versorgung egal.

Gruß
Jobst

von A. S. (Gast)


Lesenswert?

R2 und R3 heben den Low-Pegel an Pin32-Slave ja an (hier etwa 1V).

Den Effekt von R3 kannst Du eliminieren, wenn Du ihn zwischen Pin32 und 
R1/c5 schaltest.

von Wolfgang (Gast)


Lesenswert?

Stefan K. schrieb:
> Brauche ich für den Ausgang einen Bustreiber oder eine
> Transistor-Schaltstufe oder geht das auch so?

Das kommt drauf an, wie verstört deine Umgebung ist. Es ist ein 
Unterschied, ob daneben ein meterlanger Funken gezogen wird oder ob du 
in einem Faraday'schen Käfig sitzt.
https://youtu.be/k8lXOnsvD80?t=49

von Winfried M. (win)


Lesenswert?

100nF direkt an einen Port sind auch nicht so die "feine Art". Ist eine 
recht hohe kapazitive Last. Würde da eher auf 10nF reduzieren.

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.