PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation zweier ATmega über ca. 10m Kabel



Björn
26.07.2005, 09:56
Morgen!

Ich möchte, dass zwei ATmega, z.B. ATmega32, miteinander kommunizieren, also Daten austauschen können. Klar - der erste Gedanke ging bei mit richtung Max232 - nur weiß ich nicht ob der Entfernungen von mind. 10m überbrücken kann.
Also - welches "System" der Datenübertragung wäre am besten?

Gruß, Björn

SprinterSB
26.07.2005, 10:07
Clickst du hier: Da steht auch was zu Kabellängen, wenns denn RS232 sein soll:
http://www.hw-server.com/rs232

Björn
26.07.2005, 10:12
Hi,

sehe ich das richtig, dass ich bei einer Baud-Rate von 9600 eine Kabellänge von 150m überbrücken kann?!
Das würde ja massig reichen.

Gruß, Björn

Frank
26.07.2005, 10:14
10m macht gewöhnlich in der Praxis keinerlei Probleme. Für deutlich höhere Kabellängen schau dir mal RS485 an. Ist ebenso einfach zu realisieren

Björn
26.07.2005, 12:33
Ok, nehm ich RS232. Hab das allerdings noch nie für AVR<->AVR benutzt, sondern nur für AVR<->PC. Da braucht dann jeder AVR einen Max232 und diese Sub-9 Buchse - oder?

Gruß, Björn

Frank
26.07.2005, 12:38
EIn Max für jeden wäre bei 10 Metern sinnvoll. Es ginge auch ohne Max, aber dann nur bei geringerer Leitungslänge.
Die SUB 9 Buchse kannst du nehmen, musst du aber nicht. Du kannst auch einfach die dreipolige Stiftleiste nach Roboternetz-Norm verwenden.
https://www.roboternetz.de/phpBB2/dload.php?action=file&file_id=81

Björn
26.07.2005, 12:42
Ja - das wäre ja noch besser.
Und als Verbindung ein 4poliges Flachbandkabel oder gibt's dafür noch etwas anderes?

Gruß, Björn

Frank
26.07.2005, 12:44
Telefonkabel kannst du sicher auch nehmen, ist bei der Länge bequemer und gibts im Baumarkt

Björn
26.07.2005, 12:46
Ja, aber hat das Telefonkabel passende Buchsen, oder muss man die noch anlöten?

Gruß, Björn

olfi13
26.07.2005, 13:15
Meine Empfehlung:
Nimm den RS485-Bus
Als Treiber-IC einen 75176. Da hast Du weniger Störungen und billiger/einfacher ist es auch als RS 232.
Bei 10m brauchst Du wahrscheinlich nichteinmal die Abschlußwiderstande (100 Ohm), schaden wird's aber nicht.
9600 Baud? Da kannste es ja gleich zu Fuß machen :D
Ansonsten gilt immer: Möglichst abgeschirmte Leitungen verwenden


Gruß, olfi

Björn
26.07.2005, 13:20
Hast du irgendwie ne Schaltung parat für RS485?

Gruß, Björn

Frank
26.07.2005, 13:36
siehe auch https://www.roboternetz.de/wiki/pmwiki.php?n=Main.RS485

Björn
26.07.2005, 16:04
Was wäre denn möglich mit 9600 Baud RS232?

Gruß, Björn

olfi13
26.07.2005, 23:25
Eine einfache Schaltung:

Furtion
27.07.2005, 08:13
Brauch man eigentlich 1 oder 2 Max232 um 2 Controller miteinander zu vernetzen?

SprinterSB
27.07.2005, 09:09
Entweder keinen (sehr kurze Leitung, störanfälliger) oder 2 Stück.

Björn
08.09.2005, 18:26
Eine einfache Schaltung:

Nach dieser Schaltung bräuchte ich ja nur 2 Widerstände bzw. Kondensatoren - oder? Dann wäre das ja noch simpler als RS232 ;-)

Gruß, Björn

olfi13
08.09.2005, 18:45
Schau mal genau hin, Schnittstellen-IC brauchst Du.
Wie kommst Du auf nur 2 Widerstände bzw. Kondensatoren ?
Gruß, olfi

Björn
08.09.2005, 18:48
Ja außer dem Schnitstellen-IC (den ich nicht extra mitgerechnet habe - war schon klar dass ich so einen brauch ;) ) sehe ich nur noch zwei Wider stände und die Jumperbox - oder schaue ich an der falschen Stelle des Plans?!

Gruß, Björn

Björn
08.09.2005, 18:52
P.S.: Ist das der richtige Treiber µC Link (http://www.reichelt.de/inhalt.html?SID=18lETC76wQARMAAHhLABE5dc66f32459b5 97957d36dd9c149474b;ACTION=3;LASTACTION=4;SORT=art ikel.artnr;GRUPPE=A225;WG=0;SUCHE=75176;ARTIKEL=SN %252075176BP;START=0;END=16;STATIC=0;FC=667;PROVID =0;TITEL=0;CASE=ignore;CONNECT=AND;WHOLE_WORD_SEAR CH=0;SORT_SEARCH=standard)

Gruß, Björn

olfi13
09.09.2005, 10:16
Hi,
Jupp, das ist er.
Wenn Du nur 2 µC's miteinander verbinden willst kannst Du übrigens auch DE und RE an einen Port anschließen.

Auch den 4k7 habe ich nur deshalb eingebaut damit ich den µC aus dem Sockel ziehen kann ohne meinen Bus zu stören (mehrere Teilnehmer).

Gruß, olfi

Björn
09.09.2005, 15:45
Soll heißen ich benötige nur denn 100Ohm Widerstand? Ich möchte ja nur 2 verbinden und diese sind auch permanent verbunden.

Gruß, Björn

olfi13
09.09.2005, 17:07
So ist es
Gruß, olfi

Björn
12.09.2005, 17:32
Hättest du auch Beispiel Code?

Gruß, Björn

olfi13
12.09.2005, 18:26
Fertigen, für Dich verwertbaren, Code habe ich nicht.
Einige Gedanken schon:
Lasse einen AVR Master sein, der andere ist Slave.
Der Slave darf nur nach Aufforderung durch den Master senden. So verhinderst Du Kollisionen auf dem Bus.

Nun brauchst Du noch ein Protokoll das den Datenaustausch regelt.
Ich mache das meistens etwa folgendermaßen:
Kennzeichnung für Datenbeginn: %%%
Die Daten kommen in der Form x%x%x%x usw.
x ist das Byte das Du senden willst (Was für eine Verschwendung)
Kommt anstelle des % ein D so bedeutet das Ende der Übertragung.
Komplette Sequenz für die Übertragung deines Nicks wäre dann:
%%%B%j%ö%r%nD

Aufforderung zum Senden macht der Master zum Beispiel so:
%%S
Danach schaltet der Master seinen 75176 auf Lesen und wartet auf die Sequenz vom Slave.

Wie man die serielle Schnittstelle anspricht weißt Du ja vom RS232, den 75176 ansteuern ist denke ich auch kein Problem.

Bei Fragen stehe ich gerne zur Verfügung.
Gruß, olfi

Björn
12.09.2005, 18:39
Mh ja, ich habe noch nie etwas mit Master und Slave gemacht und auch mit RS232 nur Daten an Rechner, nicht zurück gesendet. Ist also noch Neu-Land ;) Dafür brauche ich auch noch einen Code, mit dem ich Daten des PC über den Max232 empfangen kann.

Wenn ich mehrere Werte gleichzeitig senden will, sagen wir die Zahlen 2, 23, 45 und 35 - würde das dann so gehen (nach deiner Methode):
%%%2%23%45%35D ?

Gruß, Björn

olfi13
12.09.2005, 18:50
Mh ja, ich habe noch nie etwas mit Master und Slave gemacht und auch mit RS232 nur Daten an Rechner, nicht zurück gesendet.
Ist also noch Neu-Land ;) Dafür brauche ich auch noch einen Code, mit dem ich Daten des PC über den Max232 empfangen kann.


Ist ja schon dasselbe Spiel. Ob der PC oder ein anderer AVR die Daten empfängt ist grundsätzlich egal.
Du sendest und empfängst immer über die UART.



Wenn ich mehrere Werte gleichzeitig senden will, sagen wir die Zahlen 2, 23, 45 und 35 - würde das dann so gehen (nach deiner Methode):
%%%2%23%45%35D ?


Fast, nur 23, 45 und 35 sind jeweils nur ein Byte, also ein Zeichen.

Wenn, dann kann ich dir nur in Asm helfen (machste in dieser Sprache?), deshalb die allgemeine Form.

Gruß, olfi

Björn
12.09.2005, 19:38
Tja, leider Bascom - Frage mal im Bascom Forum nach.
Danke für deine Hilfe!

Gruß, Björn

olfi13
12.09.2005, 19:41
gerne geschehen.

Björn
13.09.2005, 16:03
Mir ist gerade ein Problem aufgefallen:
Eigentlich wollte ich das so machen:
ATmega32 <----- RS 485 --------> ATmega8 <----- RS 232 -----> Computer

Nur ich kann ja mit dem ATmega8 nicht gleichzeitig beide Schnittstellen betreiben - oder?

Gruß, Björn

olfi13
13.09.2005, 17:49
Tja, nun hast Du doch 3 Teilnehmer....
Geht aber immernoch.
Du mußt ja nicht 2 Busse haben, einer reicht.
Muß dein PC halt auch eine RS485 bekommen und natürlich auch dein Protokoll kennen.

Erzähle doch einmal möglichst genau was Du machen willst / welches Problem du lösen möchtest. Dann ist es einfacher eine Lösung zu finden.

Gruß, olfi

Björn
13.09.2005, 17:53
Hi,
also - der ATmega32 steh etwas weiter entfernt und liefert permanent Daten (z.B. Temperatur) - dieser sendet er an einen ATmega8 der diese an den Rechner weiterleiten soll - - - Moment, da hab ich grad nen Gedanken: Könnte ich nicht direkt vom ATmega32 über RS 485 an den Rechner senden? Oder geht das nicht...?

Gruß, Björn

olfi13
13.09.2005, 18:13
Na, erzähl mal weiter, möglichst detailiert. Vielleicht kommen ja noch mehr Ideen.
Wenn der PC eine RS485 angebastelt bekommt geht es, klar

Gruß, olfi

Björn
13.09.2005, 18:16
Ok:

Mein Bruder und ich bauen einen Tauchbot (ähnlich dem von Luk-AS, nur viel kleiner und mehr die LowBudget Version). Im Bot selber, befindet sich die Mega32 Platine, die permanent Daten wie Temperatur, Feuchtigkeit im Rumpf durch das Kabel an das Notebook senden soll. Das ist die ganz grobe Ansicht. Erst hatte ich gedacht, eine kleine Zwischen-Platine direkt ans Notebook zu machen, die die Daten weiterleitet.

Gruß, Björn

olfi13
13.09.2005, 19:06
Das ist schon ein ehrgeiziges Projekt :)
Am Notebook hast Du eine RS232?
In diesem Falle würde ich die so nutzen und es mit dieser Schnittstelle und einem MAX232 am AVR probieren. Mehr als 2 Teilnehmer hat dein Bus ja nicht. Ist der geringere Aufwand.

Solltest Du einen langen Übertragungsweg benötigen oder befürchtest Du Störungen so solltest Du die RS485 nehmen.
Dann mußt Du für's Notebook tatsächlich einen Schnittstellenwandler bauen.

Gruß, olfi

Björn
13.09.2005, 19:11
Ja, ich habe RS232 am Notebook. Allerdings geht das ja nicht so weit und bei einer Kabellänge von ca. 20m ist das wahrscheinlich zu lang für RS232 - oder?

Gruß, Björn

olfi13
13.09.2005, 19:41
Ich habe dir einen Link herausgesucht:
http://lexikon.golem.de/RS232

Störungen können auch durch Impulse auf den anderen Adern deiner Leitung entstehen.
Abschätzen mußt Du das allerdings selber. Der RS485 ist halt unempfindlicher.

Gruß, olfi

Björn
13.09.2005, 19:45
Naja ich wollte in jedem Fall eine abgeschirmte Leitung nehmen. Das ist dann die Frage...
RS232 wäre ja auch jeden Fall einfacher - deshalb würde ich sagen erstmal einen Versuch wert, bevor man sich einen Riesenaufwand macht und er gar nicht notwendig wäre...

Gruß, Björn

olfi13
15.09.2005, 01:48
RIESENaufwand ist es nicht, aber probier das ruhig mal so aus.
Viel Glück :cheesy: Sonst meldest Du Dich einfach.

Gruß, olfi

Sandro
15.09.2005, 07:28
Nur weil du dir den "riesen Aufwand" ein Multiprozessorprotokoll zu schreiben
sparen möchtest musst du doch nicht auf RS485 verzichten.
Benutze einfach die 4-Draht Variante. Je zwei Leitungen für RxD und TxD.

Nach Außen hin verhält sich das ganze wie ein RS232. Aber mit der
Störsicherheit eines RS485.

Ich habe mal auf die schnelle was gezeichnet um das zu verdeutlichen.
Auf PC-Seite brauchst du natürlich noch einen Wandler von RS232 zu TTL,
aber keinen extra Controller!

Torsten_G
15.09.2005, 12:52
Hallo miteinander,

ich bin neulich hier im Forum über einen tollen Artikel (https://www.roboternetz.de/phpBB2/zeigebeitrag.php?t=4585) gestolpert, dort findet man u. a. einen Link (http://www.semiconductors.philips.com/pip/P82B715.html) mit Hinweisen, wie man den I2C-Bus mit zusätzlicher Harware auf 50m Kabellänge "aufbohren" kann.

Das würde zwar voraussetzen, dass PC-seitig ein weiterer µC die Daten vom I2C-Bus auf die RS232 zum PC wandelt, dafür wäre aber das Schnittstellen-Protokoll im Hauptprozessor des Fahrzeugs schon fix und fertig.

Ich könnte mir auch gut vorstellen, dass die Einbindung weiterer Prozessoren in den I2C-Bus einfacher geht als bei der RS232.

Also etwa so:

[Master-µC]--I2C (50m)---[Schnittstellen-µC]--- RS232---[Notebook]

Wenn das Quatsch ist, sagt es ruhig; ich stecke noch in den Anfängen mit den AtmelProzessoren...

Viele Grüße

Torsten

jay-1982
10.11.2005, 21:35
Hallo!
Sehe ich das richtig, dass wenn ich 2 Controller miteinander kommunizieren lassen will über eine sehr kurze Distanz, ich dann auch keinerlei Treiber/MAX232 etc. benötige sondern das RX des einen mit dem TX des anderen und umgekehrt verbinden muss?!?!

SprinterSB
10.11.2005, 21:57
So ist es.

jay-1982
10.11.2005, 22:05
Vielen Dank!!! :cheesy: