Forum: Mikrocontroller und Digitale Elektronik UART Menger | 1 auf 3 & 3 auf 1


von Linekeying (Gast)


Lesenswert?

Hallo,

ich suche ein IC, dass aus einer (seriellen) UART mehrer macht bzw. 
Befehl verteilt.

Mein Problem ist, dass mein ATmega32 nur 1 x UART hat. Ich möchte aber 2 
weitere ATmega's sowie einen PC daran hängen. Dafür suche ich nun einen 
Chip, der mir quasi das Singal teilt bzw. dem man vor abschicken eines 
Befehls sagt, wo er das ganze hinleiten soll. Wieder wäre es nicht 
schlim, wenn alles was "rein" kommen soll in den ATmega immer dort hin 
geleit wird. Es wäre sogar vorteilhaft, da dieser der "Hauptchip" ist.

ATmega32 (Chip)
|          |
|- ATmega >|
|          |
|- ATmega >|
|          |
|- PC --->--

Das man alle drei nicht paralle schalten kann ist mir bewusst, da es 
sonst ja ein Timingproblem geben würde wenn alle 3 gleichzeitig etwas an 
den "Hauptchip" senden würden. Also muss das Bauteil einen Buffer 
besitzen.

Jemand eine Idee?

Liebe Grüße

P.S.: Beispiel Codes in C sollte es für den Chip geben, da ich mich 
nicht sonderlich mit Bits verdrehen auskenne.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das lässt sich mit einem Multiplexer erledigen. Der wird mit ein paar 
zusätzlichen Portpins angesteuert, die auswählen, mit welcher 
Gegenstelle kommuniziert werden soll.

Das bedeutet aber auch, daß Daten immer nur von einer Gegenstelle 
empfangen werden können. Ein "Mischen" der Daten ist sehr 
fehleranfällig, denn was passiert, wenn zwei Gegenstellen gleichzeitig 
senden?

Für Deine Anforderung ist möglicherweise eine Software-UART sinnvoller, 
damit kannst Du auch auf einem AVR, der nur eine Hardware-UART hat, 
mehrere voneinander unabhängige Schnittstellen einrichten.

von Linekeying (Gast)


Lesenswert?

Wie meinst du das, mit der Software? Der Hauptchip ist so gut wie voll 
belegt. Aus diesem Grund muss ich jetzt "Erweiterungsplatinen" bauen.

Und ja, wenn alle 3 gleichzeitig senden habe ich ja das Problem... Ich 
habe mir das so vorgestellt, dass wenn jeder gleichzeigt sendet das 
Signal gebuffert wird und dann nach einander dem Chip übergeben wird. 
Dieser könnte ja auch gleichzeitig an alle das Singal raußschicken. 
Diese wäre ja nicht schlim. Ich könnte in den erstens Byte angeben für 
wen der Befehl bestimmt ist.

von Frank K. (fchk)


Lesenswert?

Linekeying schrieb:
> Hallo,
>
> ich suche ein IC, dass aus einer (seriellen) UART mehrer macht bzw.
> Befehl verteilt.
>
> Mein Problem ist, dass mein ATmega32 nur 1 x UART hat. Ich möchte aber 2
> weitere ATmega's sowie einen PC daran hängen. Dafür suche ich nun einen
> Chip, der mir quasi das Singal teilt bzw. dem man vor abschicken eines
> Befehls sagt, wo er das ganze hinleiten soll. Wieder wäre es nicht
> schlim, wenn alles was "rein" kommen soll in den ATmega immer dort hin
> geleit wird. Es wäre sogar vorteilhaft, da dieser der "Hauptchip" ist.

Nimm doch einfach einen größeren AVR mit 4 UARTS wie den M1280/2560. 
Dann hast Du keine Klimmzüge nötig.

Oder Du baust einen RS485-Bus auf. Da hängen alle Controller an einem 
Adernpaar, und jeder kann an jeden senden. Während Du bei RS232 einen 
MAX232 oder MAX3232 nehmen würdest, nimmst Du bei RS485 einen LTC485 
oder MAX485.

Siehe http://www.mikrocontroller.net/articles/RS-485

Und daran denken: Bei einem Bus ist es wie bei einer Wurst - Die Enden 
müssen abgeschlossen sein, mit 120 Ohm.

fchk

von Peter D. (peda)


Lesenswert?

Frank K. schrieb:
> Oder Du baust einen RS485-Bus auf. Da hängen alle Controller an einem
> Adernpaar, und jeder kann an jeden senden.

Nö, dann gibts Kollisionen.
Es darf immer nur einer senden!
Du brauchst einen Master oder ein spezielles Protokoll (Token Passing).

Daß jeder sendet, geht z.B. bei CAN (Carrier Sense Multiple Access / 
Collision Resolution)


Peter

von Peter D. (peda)


Lesenswert?

Nimm nen ATmega324.
Der hat 2 UARTs und die dritte machst Du in Software.


Peter

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

es gibt kaum noch einzelne UART-ICs (z.B. 85C30), aber die sind designt 
für einen Bus und brauchen daher 13 bis 16 Leitungen als Anschluss an 
den Prozessor. Teuer sind sie auch.

Günstiger wird es, wenn du dir einen einfachen AVR oder PIC als 
UART-Slave selbst zurechtbastelst.

Gruss Reinhard

von G a s t (Gast)


Lesenswert?

Und wenn du den UART für die Kommunikation zum PC nimmst und sich die 
ATmegas über I2C/TWI oder SPI unterhalten?

von Linekeying (Gast)


Lesenswert?

Erstmal danke für die guten Antworten!

Also nochmal: ATmega32 ist für mich soweit ausreichend. Platine ist 
soweit fertig und kann auch nicht mehr geändert werden. Die I/O Ports 
sind fast vollständig belegt!

Nochmal kurz Software UART ...was genau ist damit gemeint? Wie 
funzt's?

von Fabian (Gast)


Lesenswert?


von ich (Gast)


Lesenswert?

Erst zusammenlöten und dann nachdenken was man will funktioniert nicht.

Den Aufwand den du jetzt treibst ist größer als eine neue Platine zu 
machen mit größerem Controller

von Uwe .. (uwegw)


Lesenswert?

Ich würde I2C als Verbindung zwischen den AVRs verwenden. Damit bist du 
sehr flexibel, weil weitere Controller problemlos hinzukommen können, 
ohne das mehr Pins gebraucht werden.

Ansonsten haben manche AVRs auch einen UART-Modus mit Adressierung (über 
das neunte Bit). Damit kann man dann alle Empfänger parallel schalten 
und jeder reagiert nur auf seine Daten. Die Sender dann per Dioden 
zusammenführen, und jeder antwortet nur, wenn er zuvor dazu aufgefordert 
wurde. Da müsste man nur schauen, wie das mit dem PC zusammen 
funktionieren würde.

von Fabian (Gast)


Lesenswert?


von Linekeying (Gast)


Lesenswert?

Uwe ... schrieb:
> Ansonsten haben manche AVRs auch einen UART-Modus mit Adressierung (über
>
> das neunte Bit). Damit kann man dann alle Empfänger parallel schalten
>
> und jeder reagiert nur auf seine Daten. Die Sender dann per Dioden
>
> zusammenführen, und jeder antwortet nur, wenn er zuvor dazu aufgefordert
>
> wurde. Da müsste man nur schauen, wie das mit dem PC zusammen
>
> funktionieren würde.

^^ Das wäre doch ne Idee...  =)  Wie genau funktioniert das mit dem 
neunten Bit ?

von Linekeying (Gast)


Lesenswert?

P.S.: Ist es den auch Möglich die ATmega's über den 1Wire - Bus laufen 
zu lassen und nur den PC an die UART ?

Ich kann ja jetzt bereits per 1Wire den DS1820 Sensor auslesen. Dieser 
Antwortet mir dann. Nun aber woher bekomme ich jetzt die Seite? Die 
anderen Chips würden ja dann als Slaves an der Datenleitung mit dran 
hängen.

von Uwe .. (uwegw)


Lesenswert?

Linekeying schrieb:
> ^^ Das wäre doch ne Idee...  =)  Wie genau funktioniert das mit dem
> neunten Bit ?
Steht im Datenblatt als "Multi-processor Communication Mode".

> P.S.: Ist es den auch Möglich die ATmega's über den 1Wire - Bus laufen
> zu lassen
Prinzipiell ja, allerdings ist es vom Timing her deutlich kritischer. 
I2C/TWI können die AVRs dagegen in Hardware, was speziell bei den Slaves 
sehr nützlich ist.

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.