Forum: Mikrocontroller und Digitale Elektronik UART Senden/Empfangen RTS verwenden oder unnötig?


von Studi (Gast)


Angehängte Dateien:

Lesenswert?

Hallo allerseits

Ich verwende Matlab Simulink um serielle Daten vom Mikrocontroller zu 
senden und zu empfangen (siehe anhang).
Ich schaff es problemlos Daten von Matlab zum Controller zu senden, aber 
ich kriege es nicht hin, dass er daraufhin Daten wieder zurücksendet. 
Der ablauf sieht so aus:

Matlab sendet Daten --> Controller

Controller empfängt gültige Daten ---> sendet "OK" an Matlab zurück

Anstatt das "OK" zu erhalten, empfange ich nur daten, die ich gesendet 
habe.
Nun hab ich gelesen, dass man RTS verwenden muss, um zwischen Senden und 
Empfangen zu schalten.

Ich habe auch unter Matlab eine Option gefunden, um auf RTS zu schalten. 
Meine Frage ist, wie wird es auf der
Controllerseite gemacht? Gibt es dazu ein Register?
Oder ist RTS gar nicht nötig und muss nur vor dem Senden an Matlab das 
Empfangsregister deaktivieren?

Über eure Tipps wäre ich sehr dankbar!!

Grüsse

von Karl H. (kbuchegg)


Lesenswert?

RTS hat mit deinem Problem ziemlich sicher nichts zu tun.
CTS/RTS ist eine Handshake Methodik. Damit sagt der Empfänger dem 
Sender: "Hey nicht so schnell, ich komme nicht nach. Warte mal ein 
wenig"

von Peter D. (peda)


Lesenswert?

Karl heinz Buchegger schrieb:
> CTS/RTS ist eine Handshake Methodik. Damit sagt der Empfänger dem
> Sender: "Hey nicht so schnell, ich komme nicht nach. Warte mal ein
> wenig"

Ja, das kommt noch aus den Urzeiten, wo die UARTs noch keine FIFO hatten 
und der PC noch mit 4,77MHz lief.
Heutzutage sind unter Windows 4kB FIFO üblich, das reicht in der Regel.
Und auf seinem MC sollte man auch nen FIFO einrichten, der der zu 
erwartenden Paketlänge entspricht.

Die zusätzlichen "Bremsleitungen" werden daher kaum noch verwendet.


Peter

von Studi (Gast)


Lesenswert?

Hallo

danke erstmal für die Info.
Ich verwende den Baustain MAX483 und dieser hat ein Enable Pin, welcher 
zwischen Senden und Empfangen schaltet (laut Datenblatt). Dieser Pin ist 
bei mir mit PD2 verbunden. Frage: Muss ich diesen Pin immer vor dem 
Senden auf High schalten und sofort danach wieder auf low in der Art:

Set Port PinD to High // enable sending
TransmitData(Data);
Set Port PinD to Low // disable sending

So hab ich es verstanden. Wird das so gemacht od. mach ich es mir wieder 
viel zu einfach? :P

von Michael (Gast)


Lesenswert?

Hallo

Kann das sein das du irgendwo eine Brücke zwischen Rx und Tx hast? Dann 
würden die Daten die du über Tx sendest sofort wieder über Rx Empfangen.

Gruß
Michael

von ... .. (docean) Benutzerseite


Lesenswert?

http://de.wikipedia.org/wiki/RS485

rtfm!!!

1. Es ist normal bei rs485 seine eigene Nachricht wieder zu empfangen

2. ja der enable pin ist anzusteuern

3. hast du überhaupt mal das Datenblatt gelesen und verstanden? 
geschweige die Texte über rs485?

von spess53 (Gast)


Lesenswert?

Hi

>Muss ich diesen Pin immer vor dem Senden auf High schalten und sofort
>danach wieder auf low in der Art:...

Vorsicht. Die UART des ATMega8515 ist gepuffert. D.h. wenn du das Senden 
nicht unterbrechen willst, musst du abwarten, dis das letzte Byte raus 
ist
-> TXC-Bit in UCSRA auswerten.

MfG Spess

von Studi (Gast)


Lesenswert?

Hallo

ich verwende einen RS-485 Interface Konverter. Das Gerät hat 4 
Anschlusspins:

DCE/DTE....................Monitor
----------------------------------
Transmitter +V.............Receiver 1 +V

Transmitter -V.............Receiver 1 -V

Receiver -V................Receiver 2 -V

Receiver +V................Receiver 2 +V

Zurzeit sind jeweils Transmitter und Receiver gebrückt.
Wie müsste man die Pins richtig verschalten? Hat jemand erfahrung mit 
dem konverter?
Die Anleitung ist ziemlich mager, da steht kaum was drinen :(

von spess53 (Gast)


Lesenswert?

Hi

>Receiver -V................Receiver 2 -V
>Receiver +V................Receiver 2 +V

????????

MfG Spess

von Studi (Gast)


Lesenswert?

hallo spess

das steht so im Manual. weiss auch nicht was die damit sagen wollen.

der konverter ist dieser hier 
http://shop.deinfo.net/p/43460522/aten-konverter-rs-232-auf-rs-422-rs-485-point-to-point?cid=google_base

von meinem kontroller kommen halt nur zwei drähte (Bus über MAX483) zum 
Konverter. wie ich die beiden bus-leitungen am konverter verschalten 
kann, steht da nicht drin. bei zwei drähten ist nur halb-duplex möglich. 
hab es so verstanden, dass zwischen senden und empfangen über das 
"Enable" geschaltet werden muss. Hab es auch so in meiner routine. Aber 
entweder schaff ich es nur zu senden oder nur zu empfangen :(

Hat denn och nie einer diesen komischen konverter bbenutzt?

von spess53 (Gast)


Lesenswert?

Hi

>von meinem kontroller kommen halt nur zwei drähte (Bus über MAX483) zum
>Konverter.

Nur 2? Du brauchst TX,RX und Masse.

MfG Spess

von Studi (Gast)


Lesenswert?

Hallo
nein, ich spreche von einem Bus. TX und RX gehen auf den MAX483 und die 
Ausgänge sind die beiden Bus-Leitungen ;)

µC (RX,TX, EnablePin für Senden/Empfangen) ----> MAX483 ---> 2 Leitungen 
(A, B) ----> Konverter ----> PC Monitor

Habe die Verdrahtung jetzt nach Halb-duplex umgeändert. Und ich schaffe 
es zwar zu senden ( RTS im Hyperterminal eingeschaltet).
Aber das empfangen auf dem hyperterminal geht gar nicht, trotz dass ich 
RTS ausschalte.

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.