Forum: Mikrocontroller und Digitale Elektronik RS485 PC Schnittstelle mit Adressierungsbit


von Sebastian (Gast)


Lesenswert?

Hallo,

ich möchte einen RS485 Bus aufbauen. Alle Slaves erhalten einen µC, der 
PC fungiert als Master.

Um die Interrupt-Last bei den Slaves zu minimieren können diese im 9 Bit 
Mode laufen (Ist das 9. Bit gesetzt handelt es sich um eine übertragene 
Adresse, ist es nicht gesetzt um (8-bit)Daten). So reagieren ALLE Slaves 
nur dann (durch Interrupt) wenn eine Adresse (9. Bit gesetzt) übertragen 
wird.

Meine Frage:
Welche Hardware und ggf. Software benötige ich um vom PC aus serielle 
Datenpakete mit 9 Datenbits zu versenden (PCI RS232 oder RS485 
Steckkarte)??

Sebastian

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Die üblichen im PC-Bereich verwendeten seriellen Schnittstellenbausteine 
unterstützen allesamt nicht den 9-Bit-Modus.

Das können nur ausgesuchte UARTs, wie z.B. die PCIe- oder PCI-Varianten 
von Oxford Semiconductor/PLX. Du brauchst dann aber auch eine 
Devicetreiberunterstützung, die über den normalen seriellen Betrieb 
hinausgeht, da die Architektur der seriellen Treiber, wie sie Windows 
verwendet, nichts vom 9. Bit weiß, und die Win32-API ebenfalls nicht.

Einfacher, aber sehr viel ineffizienter ist eine Software-Emulation, die 
das 9. Bit durch Ausnutzung des Parity-Bits nachahmt. Dazu muss vor dem 
Senden jedes einzelnen Bytes dessen Parität berechnet und die Parität 
der Schnittstelle so umgestellt werden, daß das übertragene Paritätsbit 
den gewünschten Wert erhält. Das ist aufgrund der vielen 
Devicetreiberaufrufe sehr, sehr langsam.

Eine Zwischenlösung wäre es, für die RS485-Ansteuerung einen µC zu 
verwenden, der mit dem PC 8-bittig kommuniziert und das Protokoll zu den 
RS485-Clients hin entsprechend umsetzt.

von (prx) A. K. (prx)


Lesenswert?

Rufus Τ. Firefly schrieb:

> Dazu muss vor dem
> Senden jedes einzelnen Bytes dessen Parität berechnet und die Parität
> der Schnittstelle so umgestellt werden,

Ganz so wild ist es dann doch nicht. Das Parity-Bit lässt sich fest auf 
0 oder 1 legen (mark/space), so dass eine zeitraubende Umschaltung des 
Modus nur zwischen Adresse und Daten erfolgen muss.

Beim Empfang kann man Parity=0 einstellen. Adressen kommen dann mit 
Parity Error rein, Daten normal.

Duplex-Mode ist freilich etwas haariger, aber bei RS485 dominiert ja 
2-Draht half duplex.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

A. K. schrieb:
> Duplex-Mode ist freilich etwas haariger, aber bei RS485 dominiert ja
> 2-Draht half duplex.

Der ist, wenn man die richtige UART verwendet, gar nicht haarig, die 
Sender-/Empfänger-Umschaltung des RS485-Treiberbausteins können bessere 
UARTs automatisch durchführen; das geht sogar mit den 
USB-Seriell-Bridges von FTDI.

von (prx) A. K. (prx)


Lesenswert?

Ich meinte eher, dass die Parity-Umschaltung gleichzeitig Sende- und 
Emfangsrichtung beeinflusst, was bei Duplex-Betrieb die Interpretation 
vom Parity-Status einlaufender Daten interessant machen kann, wenn man 
parallel dazu grad den Parity-Modus umschaltet. Will nicht sagen, dass 
es nicht geht, nur ist das eben ein Stück haariger als die Handhabung 
vom Parity bei Half-Duplex.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Ach so, das meintest Du. Ja, das ist eklig.

von Sebastian (Gast)


Lesenswert?

....vielen Dank! Hab's mir fast gedacht.

Gruß,
Sebastian

von magicman (Gast)


Lesenswert?

> Um die Interrupt-Last bei den Slaves zu minimieren können diese im 9 Bit
> Mode laufen (Ist das 9. Bit gesetzt handelt es sich um eine übertragene
> Adresse, ist es nicht gesetzt um (8-bit)Daten). So reagieren ALLE Slaves
> nur dann (durch Interrupt) wenn eine Adresse (9. Bit gesetzt) übertragen
> wird.

Diese Funktionweise finde ich auch sehr interessant! Welche uC Uart 
können den mit diesem speziellen 9 Bit Modus umgehen und wie bringt man 
den uart zu einem bit9 abhängigen Interrupt?

von spess53 (Gast)


Lesenswert?

Hi

>Diese Funktionweise finde ich auch sehr interessant! Welche uC Uart
>können den mit diesem speziellen 9 Bit Modus umgehen...

Eigentlich alle AVRs mit USART.

>und wie bringt man den uart zu einem bit9 abhängigen Interrupt?

MPCM-Bit in UCSRA setzen und Datenblatt lesen.

MfG Spess

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.