Moin! Ich bin immernoch am Abwägen, wie ich meine fünf Atmegen8, von denen einer das Ruder in der Hand hat und die anderen fleissig Sollwerte übernehmen und Istwerte berichten sollen, nun miteinander verdrahte. (Distanz bummelig 1m.) Am einfachsten erscheint mir die gemuxte UART zu benutzen, wohin ich bereits hier im Forum zu hingeraten wurde und womit ich mich eigentlich bereits abgefunden habe. Doch je mehr ich mich mit I2C beschäftige (und das ist noch nicht sehr viel), so habe ich den Eindruck, schöön Allemann an einem Bus hängen, jeder eine Adresse für sich und kein Gemurkse mit Mux, das klingt auch gut. (Also, I2C Benutzung). Für mein Verständnis: lassen sich per I2C genauso einfach Strings übertragen, wie über die gute alte UART?
Die beiden Verbindungsstandards sind nicht austauschbar und erfuellen verschiedene Zwecke. Waehrend der I2C auf der Leiterplatte bleibt, ist der RS232 fuer Kabel gedacht. Der RS232 ist fuer eine punkt zu punkt Verbindung. Der I2C ist ein Leiterplatten Bus, der die Richtung umschaltet. Ich wuerde beide nicht verwenden. Ein RS422 waere passender, denn er ist fuer einen Bus, und fuer auf Kabel. Wenn es einen Master gibt, ist der RS422 passender wie der RS485, denn der RS422 muss die richtung nicht umschalten. Der Master kann immer senden.
nimm i2c ist für so etwas gedacht... ne lib findest du hier: Beitrag "TWI I2C Slave Library" viel erfolg
achso wenn es nur 1m ist kannste auch i2c nehmen ... 1m kabellänge macht der schon noch mit. hab das mal mit 800khz getestet, ging problemlos. ;-)
1m, tja, als was soll man das einordnen? Eigentlich zuviel für direkte Verbindungen, zu wenig für echte Bustreiber (nicht im Sinne von das funktioniert nicht, sondern eher im Sinne von noch nicht nötig). Irgendwie ein komisches Zwischending. Ich würde folgendes probieren: -UART-Verbindung, alle Rx auf eine Leitung -alle Tx über eine Diode ebenfalls auf diese Leitung -aktiven pullup (Stromquelle) nach Vcc Alle empfangen alles (auch das eigene gesendete Signal!) Senden darf immer nur einer, per Protokoll auskaspern.
Tjor. DIE Lösung scheints nicht zu geben (also erstmal nen Flens). H.joachim Seifert schrieb: > Ich würde folgendes probieren: > -UART-Verbindung Das ist eig auch mein Plan, auch schon fliegend fertig, nur hab ich Angst, dass... wovor eigentlich? Aber klämmte ich alle Rxe zusammen, so würde ja jeder uC ständig am interrupten sein und von der Arbeit abgehalten werden. Also Mux dazwischen. (Gegenstimmen?)
Wenn deine MC so am Anschlag werkeln, dass si nicht mal mehr einen popeligen UART-Interrupt hinbekommen, hast du den falschen Controller gewählt. Wenn ich es nicht besonders eilig habe, nehme ich normalerweise 19200Baud. Da tröpfelt alle 0,5ms ein Byte rein. Angenommene 12MHz Takt: alle 6000 (!) Takte ist ein Byte abzuholen und zwischenzuspeichern. Schlecht programmiert dauert das 100 Takte. Selbst ein dauernd feuernder Bus bringt nur <2% Auslastung.
Und in echt (und C): es sind 55 Takte. Inklusive ISR anspringen, Register sichern, Byte abholen, in einem Buffer speichern, Überprüfen ob Bufferüberlauf, Zeiger auf nächsten fein Speicherplatz setzen, Anzahl der empfangenen Bytes erhöhen, Rückkehr zum unterbrochenen Programm. Noch Fragen?
Stephan R. schrieb: > Für mein Verständnis: lassen sich per I2C genauso einfach Strings > übertragen, wie über die gute alte UART? Wenn Du Dich bereits gut mit UARTs auskennst, häng an jeden µC einen RS485 Transceiver und gut ist. Dann kannst Du einfach Deine Kommandos an den ersten Sklaven über den UART rausschicken, auf die Antwort warten und dann den nächsten abklopfen. Schick bei Deinem UART-Befehl einfach eine Adresse mit, damit klar ist, wer das Kommando entgegennehmen und antworten soll. Gruß, Frank
Hallo Mach es so wie HJ Seifert es beschrieben hat. Habe ich bei meiner Diplomarbeit auch so gemacht. Ein 8051, der das sagen hat -> TXD auf die RXD aller anderen. Die TXD aller anderen mit Dioden verdrahtet an den RXD des Chefs. Der Chef hat alle der Reihe nach abgefragt, die anderen durften nur was sagen, wenn der Chef sie gefragt hat. Hat wunderbar funktioniert. Gruß Joachim
Alle TxDs der Slaves per OR-Verknüpfung auf den RxD des Masters wäre eine Möglichkeit. RS485 eine weitere. Recht einfach, störunanfällig und erweiterbar, wäre UART Übertragung mit CAN-BUS-Treibern in halb-duplex. Fürs Protokoll nimmt man am besten die Multiprozessorfunktion der AVRs. Damit ist die Adressierbarkeit geklärt und die Belastung unbeteiligter Slaves minimal.
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.