PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RS232 ------------- Reichweite



Ronnie (Snoop)
14.11.2005, 02:44
Hallo Geminde,
bevor ich mich wieder einmal in irgendwelche Wälder mit vielen Bäumen die ich nicht sehe -begebe-, frage ich lieber mal nach :rolleyes:

Über welche Strecke funktioniert eigentlich die RS232 Schnittstelle (MCU to MCU) ohne das man das Signal aufbereiten muss? (3 wire)

Sind da so 10-15m drin?

Liegt im Garten sollte eigentlich nichts weiter reinstören..

Dank schee

Ronnie (der Waldmensch)

edgar
14.11.2005, 08:10
Hallo Snoop,

was meinst Du mit Aufbereiten?
RS232 bedeutet,dass ein MAX232 Chip an jedem Kabelende haengen muss.
...alles Weitere macht Dein MC ueber die UART.
Je geringer die Baudrate desto laenger darf Dein Kabel sein....weit mehr als Deine Angabe von 15m sind problemlos machbar...abgeschirmtes Kabel benuetzen falls viele Stoerenfriede im Wege sind.

:)

Rudo
14.11.2005, 09:59
standard sind 15m (=2500pF) bei 20 kBd, mit z.B. 4800kBd kommste bestimmt auf 30m und mehr.
In Notebooks sind manchmal LowPower-Treiber drin, da musste vielleicht Ruecksicht nehmen ;)

Ronnie (Snoop)
14.11.2005, 14:26
Grüsse
@Ed
@Rudo

OPPS, siehste hab ich mich schon falsch ausgedrückt..
UART to UART muss es heisen..:o

Klar, MAX 232..sind Pegelwandler.
Braucht man ja nur wenn es vom Rechner über die Com Port zum MC geht wegen der unterschiedlichen Spannungen..

In meinen Fall ist es eigentlich UART zu UART also 5V..
Aber es würden sogar 2400kBd ausreichen, es werden nur 2 Byte von Zeit zu Zeit "abgeholt"..

Mit Aufbereiten meinte ich so ne Art Booster.. (müsste erst mal Googeln)

Ich denke ich Bastel mir da mal eine Versuchsschaltung auf, so 20m quer durchs Haus. :D

Könnte man da dann nicht auch mehrere UART's zusammenschalten?
Die dann auf verschiedene "Zeichenfolgen" reagieren??
Oder bekomme ich dann ärger mit den pF's..
Ich weiß die dicken dinger 89XXXXXXXXXED2 usw haben so einen "Multicontroller mode oder so" nur 4051er halt nicht. (für was auch..)

Ronnie

edgar
14.11.2005, 14:49
Hallo nach Bayern,

Punkt fuer Punkt: wenn Du Leistungsgatter CD4049 nimmst dann koennte das schon klappen...ein Inverter muesstest Du in Reihezu 3 Parallelen Invertern schalten.....auf der Empfaengerseite spielst Du das signal wieder ein ueber einen Inverter oder zwei.
Das bildet auch einen Schutz fuer den MC.
Wichtig ist,dass die Signale mit richtiger Phase ankommen.
Experimentiere nur viel kann nicht schiefgehen.

Zur letzten Frage....dicke oder duenne ...'51 ist '51 : auch der 2051 kann das 9bit Protokoll ...das ist Intel Mode 3. ...und funktioniert 100%.

Gruss vom Schwoob
:)

edgar
14.11.2005, 15:04
Ronnie,

hab Dir kurz eine Skizze auf den TouchScreen gemalt...so koennte es gehen.
An den Eingang koennte man vielleicht ein Filter bauen...

ciao
:)

Ronnie (Snoop)
14.11.2005, 20:45
@ed
grazie, für deine Zeichnung!
Ich werde aber erst mal strippen ziehen... und probieren...

>Zur letzten Frage....dicke oder duenne ...'51 ist '51 : auch der 2051 kann das 9bit Protokoll ...das ist Intel Mode 3. ...und funktioniert 100%.
Das zitat stammt aus dem Datenblatt der AT89C51ED2.. ein Hammerteil!










Automatic Address Recognition





The automatic address recognition feature is enabled when the multiprocessor communication feature is enabled (SM2 bit in SCON register is set).

Implemented in hardware, automatic address recognition enhances the multiprocessor communication feature by allowing the serial port to examine the address of each incoming command frame.
Only when the serial port recognizes its own address, the
receiver sets RI bit in SCON register to generate an interrupt.
This ensures that the CPU is not interrupted by command frames addressed to other devices.
If desired, the user may enable the automatic address recognition feature in Mode 1. In this configuration, the stop bit takes the place of the ninth data bit. Bit RI is set only when the received command frame address matches the device’s address and is terminated
by a valid stop bit.
To support automatic address recognition, a device is identified by a given address and a broadcast address.
Note: The multiprocessor communication and automatic address recognition features cannot be enabled in Mode 0 (i. e. setting SM2 bit in SCON register in Mode 0 has no effect).

Given Address
Each device has an individual address that is specified in SADDR register; the SADEN
register is a mask byte that contains don’t care bits (defined by zeros) to form the
device’s given address. The don’t care bits provide the flexibility to address one or more
slaves at a time. The following example illustrates how a given address is formed.
To address a device by its individual address, the SADEN mask byte must be
1111 1111b.
For example:




SADDR 0101 0110bSADEN 1111 1100b
Given 0101 01XXb




The following is an example of how to use given addresses to address different slaves:





Slave A:SADDR 1111 0001b

SADEN 1111 1010b
Given 1111 0X0Xb
Slave B:
SADDR 1111 0011b
SADEN 1111 1001b
Given 1111 0XX1b






Da kann man ja einen Bus mit UART machen... :D

Ronnie

edgar
14.11.2005, 22:01
Hi,

sicherlich moechtest Du nicht 32 '51er zusammenschalten.
Automatische Adresserkennung ist bei wenigen MCs nicht noetig.
Beim 2051 kannst Du zwei/drei Pins fuer die Einstellung der Adresse benuetzen.
Wenn der Master MC eine bestimmte Adresse anspricht, dann ''hoeren'' alle MCs
aber nur der Gewuenschte antwortet.

man braucht also keinen Dicken fur Dein Vorhaben...sondern nur etwas clevere Software.

viel Spass dabei:)

Rudo
14.11.2005, 22:56
Ich werde aber erst mal strippen ziehen... und probieren... achte drauf, dass die Strippen nicht so viel pF pro km haben:D
Falls vorhanden den Schirm auf PE an beiden! Seiten anschliessen, Elektronik-GND nicht mit PE verbinden.

Ronnie (Snoop)
14.11.2005, 23:10
Grüsse Ed,
verstehe ich das jetzt richtig Du mit der Portpins die Zuweisung einer Adresse meinst?
Also:
P1.1 Lo
p1.2 Hi
p1.3 Hi
ist Adresse 01
P1.1 Lo
p1.2 Lo
p1.3 Hi
ist Adresse 02
usw...
Und der SBUF wird dann "Nur" auf die eingestellte Adresse gecheckt??
Der angesprochene Antworted ... aber das bekommen die anderen ja auch wieder mit, und horchen was los ist... Wer Arbeitet dann noch..:(
Ausserdem könnte man doch die Adressen doch auch fest vergeben oder? Weil Ports sind kostbar bei den kleinen..

Ich glaub ich bin schon wieder im Wald...:confused:

@Rudo,
Jop! da hau ich auf jeder Seite einen fetten Erdspieß rein und tütel die Abshirmung rum --- und gut is es :D
So wie Du schreibst glaube ich kann man die pF's erst mal dahinstellen...

Ronnie

edgar
14.11.2005, 23:45
Natuerlich wird/kann man Pins sparen und Adressen fest vergeben.

alle MC-Sklaven empfangen per Interrupt die Meldung ZB 3 . MC 1,2 und 4 fuehlen sich nicht angesprochen und gehen ihrer Arbeit nach...waehrend die 3 den 3° MC befriedigt und in ein entsprechendes Unterprogramm (InterruptServiceRoutine) springen kann.Die 3 Antwortet dann indem sie die vorhergesehenen Daten an den Master schickt.

Es geht sicher auch primitiver....zB du rufst ins Feld MC1 antwortet nach Zeit 1,MC2 1 sekunde spaeter , MC3 nochmals 1 s spaeter usw.

Lass die MCs arbeiten !
...die langeweilen sich sonst :)

elmar
17.11.2005, 12:13
Hi,


eine echte V24 Schnittstelle überbrückt ziemlich lange Kabellängen. Man nehme Telefonkabel mit zwei gedrehten Aderpaaren oder noch besser CAT-5 Kabel. Bei einfacher dreidrahtkopplung nimmt man dann immer ein Paar pro Richtung, ein mal Daten, ein mal Masse. Den Schirm (sofern vorhanden) legt man einseitif (!) auf Masse.
Bei 9600 Baud kann man dann 100m oder mehr überbrücken. Ich habe bei mir im Haus zwischen Server und einer IBM3101 (70er Jahre Datensichtstation) etwa 40m liegen, die liegen auf ganzer Länge parallel zu bis zu 6 CAT-5 Ethernetkabeln und ca. 20m zu einem Haufen Elektrokabeln und Telefonkabeln in einem engen Schacht.

Der Trick an der RS232 ist der große Spannungshub von ca. 24V ('1' = -12V, '0' = +12V).
Beim C64 auf der seriellen Schnittstelle, die sich als Bus durch Floppys, drucker und anderen Datenträgern zieht kann man etwa 15m erreichen, sofern man die Kabel nicht am Monitor vorbeizieht. In den Geräten sitzen Schmidt-Trigger Gatter, die die Störungen und weichen Flanken zu einem vernünftigen TTL-Pegel umwandeln. Der C64 Serialbus läuft auf +5V.
Der C64 hat eine Soft-UART am Userport. Der arbeitet auch mit +5V TTL Pegel. Die alten CIAs (I/O Baustein) mögen keine langen Kabel. Verbindet man zwei C64 miteinander, so funktioniert das nur bis zu 2m Kabellänge, ab 5m kann sogar die CIA durchbrennen wegen den hohen Strömen, die durch umladen der Kabelkapazitäten entstehen.

Wenn Du auf jeder Seite einen MAX232 spendierst, so erhälst Du einen Spannungshub von ca. 16-18V (Ladungspumpen machen etwa 8-9V aus den +5V), in dem Fall ist das nicht zur Pegelanpassung zum PC gedacht, sondern um den Spannungshub der Datenleitungen zu erhöhen und somit einen größeren Signalabstand zu eingestreuten Störsignalen zu erreichen. Hier sollten 50m bei 9600 Baud kein Problem darstellen. Auch treibt der MAX232 größere Kabelkapazitäten an, als der blanke µC Port das je könnte. Zudem verzeiht der MAX232 auch überlastung durch zu große Kabellängen und sogar kurzschlüsse. Der MAX232 sorgt für eine größere mögliche Kabellänge und schützt den µC. Auch sorgt der Empfangsseitig für schöne, steilflankige TTL-Signale.

Bei 9600 Baud sollten 50m kein Problem darstellen. Notfalls bei wiedrigen Umgebungen musst Du die Baudrate senken.

Gruß
Elmar

Ronnie (Snoop)
17.11.2005, 23:30
Hi,

@ed
Es funktioniert! Zwar erstmal nur als Kabelbündel auf dem Tisch, ohne lange Leitungen aber es geht! JUHU.....:)

@elmar
Genau! die Max232 haben ja Ladungspumpen drin.. ich denke ich spendiere mal 2 Stück. Schon wengen der Störungen..
Und eine Tolle Beschreibung übrigens! Wie man es von dir gewohnt ist!
SUPER!!! :cool:

Ich sag jetzt erstmal Danke!
Und wenn ich nochwas wissen möchte, dann hau ich den Treat wieder nach oben.....

Ronnie

Ronnie (Snoop)
18.11.2005, 19:47
Hi, ich schon wieder..;)

Folgende Frage:
Ist es möglich den ED2 zu flaschen auch wenn auf der Leitung noch anderes hängt?

http://home.arcor.de/snoop1x1/forum/s_100.bmp

oder sollte man den Max so verschalten?? Und geht das dann?

http://home.arcor.de/snoop1x1/forum/frage2.bmp

Ronnie

elmar
18.11.2005, 20:02
Hi,


das geht nicht. Man darf keine Ausgänge parallelschalten. Was ist wenn der eine HIGH sagt, der ander LOW sagt? Das gibt einen kurzschluß. Kommunikation nicht möglich.

Da mußt Du einen Umschalter einbauen, der wärend des flashens den anderen Teilnehmer abschaltet. Das kannst Du auch vor dem MAX machen, rein auf TTL Pegel mit Multiplex-ICs.

Gruß
Elmar

Ronnie (Snoop)
19.11.2005, 11:25
@elmar
Hallo, habe ich mir schon fast gedacht...
Ich mach einfach nen Umschalter rein. WORK <---> Flash und gut is es :)
Ronnie

elmar
19.11.2005, 11:36
Hi,


Klinkenbuchse mit Schalter auf einen Multiplexer IC und gut ist. Am besten den Schalter an den µC und der schaltet dann nach einer Sekunde, also wenn der Stecker richtig drin ist den MUX IC um.

Gruß
Elmar

elmar
19.11.2005, 11:52
P.S.:


Der MAX232 hat ja zwei Leitungen pro Richtung. Gedacht ist das für CTS/RTS, also Hardwareflußkontrolle. Aber man kann auch zwei mal Daten je Richtung senden. Je nach dem wie viele Recourcen (und Pins) Dein µC übrig hat, kannst Du auch eine zweite, software RS232 anbinden. So kannst Du entweder die normale Kommunikation oder das Flashen via Soft-RS232 abwickeln. Durch eine erkennung, dass Daten zum flashen reinkommen kann man da auch bequem softwaremässig umschalten. Dadurch entfällt der Schalter und es wird automatisch erkannt, was gemacht werden soll.

Gruß
Elmar

Ronnie (Snoop)
20.11.2005, 01:38
Hallo Elmar,
Hmm, das mit den MUX ist schon eine feine Sache....
Mal sehen was die so kosten, weil Schalter hätte ich ja :)

Ronnie

Ronnie (Snoop)
22.11.2005, 00:23
Hi,
eigentlich sollte ich einen neuen threat aufmachen, aber dann müsste ich alles nochmal erklären...
Folgende Problematik ist mit heute rein zufällig aufgefallen :confused:

Wir habe hier einen Master und (z.Zt) einen Slave über Max232 verbunden.
Der Slave hat die Aufgabe einige Werte seiner Umgebung zu Sammeln und auf Anfrage zum Master zu schicken.
Wenn diese Daten vom Slave nicht gerade zusammengeholt werden, läuft dieser in einer Scheife, die nix anderes macht als den UART auf Sendeanfrage zu checken.
Solange diese Scheife durchläuft ist alles OK.
Wenn Zeichen "d" empfangen wird werden 5 Byte Daten am den Master geschickt.. Alles Problemlos..

So, nun ist der Slave gerade am datensammeln (IRQ, Timer 0) und in diesen moment will der Master seine Daten haben, dann hängt der Master in seiner Receive Schleife fest :mad: Und der Slave bekommt auch nicht mit, das jemand was von ihm will.

Ich dachte eigentlich das der IRQ vom UART auch aktiv ist auch wenn was anderes zu tun ist und das RI gesetzt wird..:confused: was ja durch die Schleife danach wieder abgefragt wird.. und die Daten dann geschickt werden könnten

Jetzt hab ich auch gelesen das es da noch das IP Register gibt und gleich den PS gesetzt , Hmm war wohl nix..

Jetzt versuch ich schon den ganzen Abend dieses manko auszumärzen..
was irgentwie nicht gelingen will.

Was übersehe ich da???

Ronnie

elmar
22.11.2005, 18:56
Hi,


nach beginn des Startbits hast Du maximal ein halbes Bit zeit, darauf zu reagieren. Tust Du das nicht, so ist das erste Byte und je nach dem alle folgenden Bytes Müll. Benutze mindestens zwei Stopbits senderseitig. Das Stopbit ist kein Bit, es definiert eine Pause zwischen zwei Bytes. Also die Zeit, die der Sender die Leitung in den Ruhezustand bringt, bevor wieder was kommt. Durch die Pausen hat der Empfänger eine Chance, zwischendurch wieder "einzurasten", selbst wenn ein Bit der Übertragung verschlafen wurde.

Das Hauptproblem ist aber, dass der Slave unflexibel auf Datenübertragung reagiert. Verschläft der das Byte abzuholen bevor das nächste eingetroffen ist (also <10 Bitlängen Zeit zum abholen), so überschreibt das neue Byte das alte und keiner hat es gemerkt. Also wäre es besser, die Messungen im Pollingverfahren durchzuführen und die Übertragung durch einen Interupt beginnen zu lassen. Und dann natürlich noch Timeouts setzen, die nach x Sekunden Datenpause die Kommunikation abbricht.

Umgehen kann man das folgendermaßen:
Du schaltest Parity ein, also 11 Bits pro Byte:
1 Startbit
8 Datenbits
1 Parity Bit
1 Stopbit, besser mehr, geht leicht durch ein delay nach dem senden

Dasd Paritybit hat jetzt aber nicht die Aufgabe, die Übertragung zu korrigieren, das Biest erkennt nur 50% aller möglichen Fehlübertragungen, sondern fungiert als Umschalterbit. Man kann die µC UART so einstellen, dass die ein Bit aus ei nem bestimmten Register als Paritybit sendet. Damit kann man wunderbar zwei verschiedene Datenarten unterscheiden. Die Kommunikation könnte so aussehen, ich benutze ein Hochkomma, wenn das Paritybit "mutwillig" gesetzt ist und keines, wenn es auf 0 steht. Die Pfeile zeigen die Richtung der Kommunikation an, also -> für Master nach Slave und <- für Slave nach Master:

-> A' (bedeutet Slave A, hörst Du auch brav zu?)
<- A' (Hier Slave A, bin Sende und Empfangsbereit.)

(Wenn der Master nicht innerhalb kurzer zeit kein A' hört, probiert er es noch mal.)

-> <Befehlzeichen> (Löst irgendeine Aktion aus, hier Datenübertragung)
<- <Daten>

Und das schöne an der Sache ist, dass man viele µC Uarts so einstellen kann, dass die erst einen Interrupt werfen, wenn das Paritybit gekommen ist. Also wenn unerwartet was gesendet wird, ignoriert das die Gegenstelle. Beii open Collector TTL RS232 kann man mehrere Slaves parallelschalten. Erst wenn ein slave via gesetzem Paritybit aufgerufen wird hören alle zu und wissen wer dran ist. Die unbeteiligten klinken sich aus und nur dere angesprochene macht weiter. So kann man mit der UART bequem einen ganzen Bus betreiben und braucht keien I²C hardware oder Softwarelösung.

Gruß
Elmar

Ronnie (Snoop)
22.11.2005, 22:37
Schwierig!

Rudo
23.11.2005, 14:33
Ronnie,
die Prios sind eine Sache, aber achte auch darauf, dass du dich nicht zu lange im IRQ aufhaelst, also nur grad Buffer auffuellen, wenn ein Byte ankommt und wieder raus. Dabei aber auch alle anderen IRQs kurz sperren! Auch das TI nicht unnoetig auf hi lassen!

Ronnie (Snoop)
24.11.2005, 00:58
Danke erst mal.
Ich glaube ich hab es..
läuft seit 4 Stunden ohne Fehler.. juhu
Was mich noch interesieren würde.. wie kann man den receive buffer löschen?
ein mov sbuf,#0h funktioniert irgendwie nich so recht..

Bin 2 Tage weg..

Ronnie

elmar
24.11.2005, 10:54
Hi,


der Recive Buffer ist ein Hardwareregister. In der Uart sitzt ein schieberegister, dass Du unter dieser Adresse abfragen kannst. Beschrieben werden kann es nur von der Uart selber.

Das löschen macht auch keinen Sinn, denn eine Null kann ja genausogut vom PC aus gesendet worden sein. Aber Du kannst und solltest das Flag löschen, das signalisiert, dass da was im Puffer liegt.

Gruß
Elmar

Ronnie (Snoop)
24.11.2005, 11:54
Ach so.....:o
Also die RI, TI Flags im SCON ...
Jetzt dämmert's
Danke
Ronnie

jetzt bin ich aber echt wech..........