Forum: Mikrocontroller und Digitale Elektronik UARTs synchronisieren


von ARMuser (Gast)


Lesenswert?

Hi,

ich möchte gern bei einem ARM7 LPC die beiden UARTs so konfigurieren 
hardware-technisch, dass beide wirklich zur gleichen Zeit ihre Daten 
losschicken. Natürlich darf das Empfangen von Daten dadurch nicht 
benachteiligt werden.

Gibt es hier eine einfache Möglichkeit diese zu synchronisieren?


ARMuser

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn die UARTs Hardwarehandshake unterstützen, dann ja, und zwar mit der 
Handshakeleitung, die der UART das Senden verbietet.

Sonst: Nein.


Wozu?

von holger (Gast)


Lesenswert?

>Gibt es hier eine einfache Möglichkeit diese zu synchronisieren?

Auf wieviel Nanosekunden musst du die synchronisieren?

von ARMuser (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Wenn die UARTs Hardwarehandshake unterstützen, dann ja, und zwar mit der
> Handshakeleitung, die der UART das Senden verbietet.

Vielen Dank für diese Information. Das müssten die CTS, RTS oder DSR/DTR 
Signale sein, oder?

Kennst du eine Application Note oder ähnliches wie man diese verdrahten 
muss, damit Hardwarehandshake unterstützt wird? Kann das auf eine 
beliebige Anzahl an Uarts ausgedeht werden?

von ARMuser (Gast)


Lesenswert?

und eine kleine Zusatzfrage, sind diese Signale für alle Modis des Uarts 
gültig (RS232, RS422 und RS485)?

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Was hindert Dich daran, im Datenblatt des von Dir verwendeten 
Controllers nachzusehen? Woher soll ich wissen, welcher es ist und was 
für eine Art von UART darin verbaut ist?

Du könntest allerdings noch die Frage beantworten, wozu das ganze gut 
sein soll.

von ARMuser (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Was hindert Dich daran, im Datenblatt des von Dir verwendeten
> Controllers nachzusehen? Woher soll ich wissen, welcher es ist und was
> für eine Art von UART darin verbaut ist?

die Signalleitungen sind vorhanden CTS (clear to send) und RTS (ready to 
send). D.h. es müssen beide RTS mit & Gatter verschachtelt werden und 
dann an beide CTS Eingänge (wahrscheinlich negiert) angeschlossen 
werden.

>Du könntest allerdings noch die Frage beantworten, wozu das ganze gut
>sein soll.

mit zwei Uarts macht es nicht so viel Sinn (nur zur demo), wenn die 
Anzahl aber steigt, dann ist es schön, wenn alle Daten synchron an ihr 
gewünschtes Ziel ankommen. Dann ist das System einfacher zu überblicken.

von Andreas Winkler (Gast)


Lesenswert?

soweit ich weiß werden diese CTS und RTS nur bei RS232 und RS422 
eingesetzt, aber nicht bei Rs485. Dieser Bus besitzt nur zwei Leitungen 
für die Daten.

Andreas

von Falk B. (falk)


Lesenswert?

@  ARMuser (Gast)

>Gibt es hier eine einfache Möglichkeit diese zu synchronisieren?

Schreib die Daten direkt nacheinandwer in die UARTs. Der Versatz um ein 
paar CPU-Takte spielt selbst bei 115k2 Baud keine Rolle.

MFG
Falk

von ARMuser (Gast)


Lesenswert?

hab gestern viel zu kompliziert gedacht, die RTS Leitungen sind egal, 
man benötigt ja nur die CTS Leitungen, die man alle zusammenschaltet und 
per GPIO dann auf low zieht wenn alle Uarts gefüllt sind mit Daten.

Falk Brunner schrieb:
> Schreib die Daten direkt nacheinandwer in die UARTs. Der Versatz um ein
> paar CPU-Takte spielt selbst bei 115k2 Baud keine Rolle.

ich weiß, wollt es lediglich im Hardware-Layout einbauen, dann kann ich 
es selbst mit eigenen Augen sehen g.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

ARMuser schrieb:
> ich weiß, wollt es lediglich im Hardware-Layout einbauen, dann kann ich
> es selbst mit eigenen Augen sehen g.
Na sowas: ein technikungläubiger Techniker...
Glaubst du deinem PC auch nicht, wenn du nicht jedes einzlene Bit und 
jede Operation nachmessen kannst?

> und per GPIO dann auf low zieht
GPIOs wären mir für sowas zeitlich absolut unkritisches viel zu 
wertvoll.

von ARMuser (Gast)


Lesenswert?

Lothar Miller schrieb:
>> und per GPIO dann auf low zieht
> GPIOs wären mir für sowas zeitlich absolut unkritisches viel zu
> wertvoll.

wird ja nur ein GPIO benötigt und davon hab ich noch reichlich vorhanden 
:-)

Lothar Miller schrieb:
> Glaubst du deinem PC auch nicht, wenn du nicht jedes einzlene Bit und
> jede Operation nachmessen kannst?

da läuft auch einiges schief in so einem PC - nur mal Windows und USB 
betrachtet

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> soweit ich weiß werden diese CTS und RTS nur bei RS232 und RS422
> eingesetzt, aber nicht bei Rs485. Dieser Bus besitzt nur zwei Leitungen
> für die Daten.

Das interessiert die UART nicht. Die kennt weder RS232 noch RS485 oder 
RS422, die kennt nur TTL-Pegel, die zur Versorgungsspannung der UART 
bzw. des sie enthaltenden Controllers passen.

von ARMuser (Gast)


Lesenswert?

Rufus t. Firefly schrieb:
> Das interessiert die UART nicht. Die kennt weder RS232 noch RS485 oder
> RS422, die kennt nur TTL-Pegel, die zur Versorgungsspannung der UART
> bzw. des sie enthaltenden Controllers passen.

d.h. prinzipiell kann man diese Flusssteuerung CTS RTS immer anwenden 
mit dem UART (bzw. diese Signale werden immer generiert) und erst durch 
einen folgenden Pegelwandler entscheidet sich ob man RS485 RS422 etc. 
rausschmeißt...

von Nilp (Gast)


Lesenswert?

Mir scheint protokollmaessig etwas ganz falsch zu sein, wenn man UARTs 
per Hardware synchronisieren muss. Das ist ueblicherweise eine Aufgabe 
des Protokolles. Wenn das Timing derart wichtig ist, sollte man im 
ganzen System synchron fahren. Indem man zB einen gemeinsamen Clock hat, 
einen gemeinsamen Trigger und einen oder mehrere synchrone Busse

von Anja (Gast)


Lesenswert?

Hallo,
egal wie ihr euch anstrengt (Handshake per RTS/CTS oder gleichzeitiges 
Schreiben in den UART).
Es wird immer einen Versatz um bis zu 1/16 Bitzeit beim Sender und 1/16 
Bitzeit bei den Empfängern geben, da der Baudratentakt (normalerweise 
Faktor 16 über Baudrate) nie ganz synchron sein wird.

von ARMuser (Gast)


Lesenswert?

Anja schrieb:
> egal wie ihr euch anstrengt (Handshake per RTS/CTS oder gleichzeitiges
> Schreiben in den UART).

gleichzeitiges Schreiben in den UART funktioniert nicht, also bleibt nur 
das Handshake.

Wirkt sich eigentlihc das Zusammenschalten von RTS und CTS beim 
Controller negativ aus, wenn ab und zu Datenpakete received werden?

Die Gegenstelle hat nämlich nicht die Möglichkeit RTS CTS zu verwenden 
(benötigt dies aber auch nicht, da das über das Protokoll selbst 
ausreichend definiert ist, wann überhaupt Daten received werden 
können...)

Anja schrieb:
> Es wird immer einen Versatz um bis zu 1/16 Bitzeit beim Sender und 1/16
> Bitzeit bei den Empfängern geben, da der Baudratentakt (normalerweise
> Faktor 16 über Baudrate) nie ganz synchron sein wird.

Durch was genau wird dieser Versatz hervorgerufen? Liegt das in der 
Generierung des Baudratentaktes, weil möglicherweise Stellen nach dem 
Komma gerundet werden???

von Falk B. (falk)


Lesenswert?

@  ARMuser (Gast)

>> Es wird immer einen Versatz um bis zu 1/16 Bitzeit beim Sender und 1/16
>> Bitzeit bei den Empfängern geben, da der Baudratentakt (normalerweise
>> Faktor 16 über Baudrate) nie ganz synchron sein wird.

>Durch was genau wird dieser Versatz hervorgerufen?

Durch die Arbeitsweise der UARTs. Die Steuerung arbeitet mit einem Takt, 
welcher der 16fachen Baudrate entspricht.

MFG
Falk

von Nilp (Gast)


Lesenswert?

Also Moment. Eine Handshakeleitung signalisiert nur dem Gegenueber einen 
Zustand. Wielange der damit beschaeftigt ist, ist nicht definiert. 
Moeglicherweise wird ein Interrupt ausgeloest, moeglicherweise wird mit 
einem Timer gepollt, moeglicherweise steht was Wichtigeres an.

von spess53 (Gast)


Lesenswert?

Hi

>Durch was genau wird dieser Versatz hervorgerufen? Liegt das in der
>Generierung des Baudratentaktes, weil möglicherweise Stellen nach dem
>Komma gerundet werden???

Hier scheint einiges am Verständnis der Funktionsweise einer UART im 
Argen zu liegen.

MfG Spess

von ARMuser (Gast)


Lesenswert?

ich glaub habs verstanden: wenn der Uart bereit ist Daten zu senden, 
wird die RTS Leitung auf low gezogen --> ist RTS direkt mit CTS 
verbunden -> die Daten werden gesendet, weil CTS dann auch auf low ist.

Wenn Daten an den Uart gesendet werden, werden diese solange im FIFO des 
Uarts gespeichert, bis dieser voll ist -> RTS und CTS spielen hier gar 
keine Rolle. Der Sender an den Uart hat nämlich keinen Handshake 
eingebaut.

D.h. die RTS und CTS haben nur symbolischen Charakter "signalisieren, 
dass der Empfang möglich oder nicht möglich ist", aber sperren den 
Empfang z.B. nicht...

von Nilp (Gast)


Lesenswert?

RTS & CTS laufen immer ueber den Controller, das UART hat keinen 
direkten Zusammenhang zwischen den Handshakeleitungen und dem 
Schieberegistern. Das genuegt auch so, weil das UART eh fuer jedees 
Byste einzeln bedient werden muss. Das geht weil zwischen den Bytes 
genuegend Zeit ist.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

> einen Versatz bis zu ... 1/16 Bitzeit bei den Empfängern geben,
Oder noch mehr, abhängig vom Empfänger: es gibt auch welche mit 8-fachem 
Oversampling, z.B. AVR im Asynchronous Double Speed Mode. Und das sind 
garantiert nicht die einzigen...   :-o

von Peter D. (peda)


Lesenswert?

Nilp schrieb:
> RTS & CTS laufen immer ueber den Controller, das UART hat keinen
> direkten Zusammenhang zwischen den Handshakeleitungen und dem
> Schieberegistern.

So isses, die Handshakeleitungen sind nur extra GPIOs mit Interrupt on 
Change.

Es wurde auch immer noch nicht die Sinnhaftigkeit des Vorhabens 
dargelegt.
Der Empfänger wartet immer auf das Startbit und damit ist es pupegal, 
wann ne UART sendet.


Peter

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> RTS & CTS laufen immer ueber den Controller, das UART hat keinen
> direkten Zusammenhang zwischen den Handshakeleitungen und dem
> Schieberegistern.

Das ist so nicht unbedingt korrekt. Was Du da beschreibst, ist eine UART 
ohne Unterstützung für Hardwarehandshake. So etwas gibt es, aber das ist 
glücklicherweise nicht die einzige Möglichkeit. Einerseits existierten 
UARTs, die sehr wohl echtes Hardwarehandshake unterstützen, andererseits 
existieren UARTs, die zusätzlich noch über Sende- und EmpfangsFIFOs 
verfügen.
Und die findet man auch in µCs.

Da --wie ich bereits kritisiert hatte-- der Threadersteller nicht 
beschrieben hat, welchen µC er verwendet ("LPC" ist nicht ansatzweise 
ausreichend genau, auch nicht, wenn ARM7 dazu genannt wird), können wir 
nur raten. Es gibt beispielsweise von Philips/NXP ARM7-Varianten aus der 
LPC2xxx-Reihe, deren UARTs dem PC-Klassiker 16550 enstpricht - und das 
ist 'ne UART mit Sende- und Empfangs-FIFOs und Hardwarehandshake.

von Peter D. (peda)


Lesenswert?

Rufus t. Firefly schrieb:
> LPC2xxx-Reihe, deren UARTs dem PC-Klassiker 16550 enstpricht - und das
> ist 'ne UART mit Sende- und Empfangs-FIFOs und Hardwarehandshake.

Dann sag mir mal, wo im Datenblatt das steht:

http://www.google.de/url?sa=t&source=web&ct=res&cd=3&ved=0CBQQFjAC&url=http%3A%2F%2Fwww.national.com%2Fds%2FPC%2FPC16550D.pdf&ei=wuZIS66fCduh_AaV0PGgAg&usg=AFQjCNHdc9W4k68aWPnn6keU1fHQrzGSXA

Die Modem-Controll-Logic ist völlig abgekoppelt von der UART-Funktion.


Peter

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.