mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I2C vs. RS232


Autor: Stephan R. (Gast)
Datum:

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

Autor: Zwölf Mal Acht (hacky)
Datum:

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

Autor: ist_halt_so (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nimm i2c ist für so etwas gedacht...
ne lib findest du hier:  Beitrag "TWI I2C Slave Library"

viel erfolg

Autor: ist_halt_so (Gast)
Datum:

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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

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

Autor: Stephan R. (Gast)
Datum:

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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

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

Autor: H.Joachim Seifert (crazyhorse)
Datum:

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

Autor: Frank M. (ukw) (Moderator) Benutzerseite
Datum:

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

Autor: XXX (Gast)
Datum:

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

Autor: Entwickler (Gast)
Datum:

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

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.