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.
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.