Archiv verlassen und diese Seite im Standarddesign anzeigen : Kommunikation zweier ATmega über ca. 10m Kabel
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
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
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
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
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
Ja - das wäre ja noch besser.
Und als Verbindung ein 4poliges Flachbandkabel oder gibt's dafür noch etwas anderes?
Gruß, Björn
Telefonkabel kannst du sicher auch nehmen, ist bei der Länge bequemer und gibts im Baumarkt
Ja, aber hat das Telefonkabel passende Buchsen, oder muss man die noch anlöten?
Gruß, Björn
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
Hast du irgendwie ne Schaltung parat für RS485?
Gruß, Björn
siehe auch https://www.roboternetz.de/wiki/pmwiki.php?n=Main.RS485
Was wäre denn möglich mit 9600 Baud RS232?
Gruß, Björn
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.
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
Schau mal genau hin, Schnittstellen-IC brauchst Du.
Wie kommst Du auf nur 2 Widerstände bzw. Kondensatoren ?
Gruß, olfi
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
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
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
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
Hättest du auch Beispiel Code?
Gruß, Björn
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
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
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
Tja, leider Bascom - Frage mal im Bascom Forum nach.
Danke für deine Hilfe!
Gruß, Björn
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
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
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
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
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
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
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
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
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
RIESENaufwand ist es nicht, aber probier das ruhig mal so aus.
Viel Glück :cheesy: Sonst meldest Du Dich einfach.
Gruß, olfi
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:
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.