www.mikrocontroller.net

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


Autor: Linekeying (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Linekeying (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank K. (fchk)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nimm nen ATmega324.
Der hat 2 UARTs und die dritte machst Du in Software.


Peter

Autor: Reinhard Kern (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: G a s t (Gast)
Datum:

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

Autor: Linekeying (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Fabian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Linekeying (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ?

Autor: Linekeying (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Uwe ... (uwegw)
Datum:

Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.