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.
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.
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.
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
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
Nimm nen ATmega324. Der hat 2 UARTs und die dritte machst Du in Software. Peter
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
Und wenn du den UART für die Kommunikation zum PC nimmst und sich die ATmegas über I2C/TWI oder SPI unterhalten?
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?
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
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.
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 ?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.