PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Bus-System für 50m Entfernung



SirTwist
15.11.2004, 21:33
Hallo Leute,

ich möchte ganz gerne mehrere AVRs (z.B. Mega16) miteinander verbinden über eine Entfernung von mehreren Zig Metern hinweg. Idealerweise sollte sowohl Stromversorgung als auch Datensignal über ein maximal vieradriges, paarweise verdrilltes Kabel erfolgen (Klingeldraht?). Zum Beispiel: Adernpaar 1 = 9 V AC, Adernpaar 2 = Data. Ach ja, und es sollten auch noch beliebige Anordnungen und Verzweigungen möglich sein :-)

Am liebsten würde ich irgendwie das Two-Wire-Interface dafür missbrauchen, nur ist das ja wohl eher für kleinere Entfernungen gedacht. Aber vom Funktionsumfang ist das schon genau das, was ich brauche, jeder AVR soll mit jedem anderen über eine eindeutige Adresse reden können. Collisions sollten erkannt werden usw usf... als Geschwindigkeit sollten 9.6k oder 19.2k völlig ausreichen.

hat da jemand von Euch eine Idee, was man da machen könnte? Gibts da evtl. (preiswerte) Fertigbausteine, die man nur noch an den AVR dranzu"kleben" braucht? Würd mich über Input und rege Diskussion freuen ;-)

Gruß,
Michael

Frank
15.11.2004, 21:53
Man kann das Two-Wire-Interface (auch I2C-Bus genannt) dafür nutzen. Du müsstest nur einen I2C Bus Extender (IC P82B715) dranhängen. Dann sollen 50m machbar sein!

siehe auch http://www.semiconductors.philips.com/pip/P82B715.html
und https://www.roboternetz.de/phpBB2/viewtopic.php?p=40930#40930

Felix G
15.11.2004, 22:10
Also das schreit doch geradezu nach CAN...

damit könntest du auch problemlos noch viel größere Strecken überbrücken.


und wenn ich mich nicht irre haben zumindest ein paar AVRs schon eine CAN-Schnittstelle integriert.

Michael Holoubek
15.11.2004, 22:48
Hi

Das Hauptproblem sind die beliebigen Abzweigungen, denn egal ob CAN, RS485
oder I2C mit Extender, Abzweigungen sind zumeist nur auf kurzen Strecken möglich.
In der Regel gilt es alle Busteilnehmer entlang des Busses "aufzufädeln" und je mehr
Teilnehmer bzw. je länger die Leitungen sind desto wichtiger wird das.

Wenn du aber nur ein paar MEGAS vernetzt, sollte es aber egal sein was du verwendest.

Flite
16.11.2004, 00:07
Ich bin auch der Meinung, das CAN für dich am geeignetsten sein sollte. Entfernungen sind kein Hindernis damit (mehrere 500m sind möglich), störungsunempfindlich (da auf RS485 Hardware basierend) und die Chips die es fertig gibt übernehmen den Overhead (Collisionserkennung etc.).

Einzige Einschränkung: du darfst keine großen Abzweigungen machen. Falls doch eine notwendig sein sollte mach einen Controller mit CAN an die Abzweigung und fahre von dort mit RS232 weiter. So kannst du das Problem auch umgehen.

Viele Grüße
Flite

stegr
16.11.2004, 06:47
zum Thema Can solltest du dich aber entsprechend einlesen...
CAN ist ein nachrichtenorientiertes System und damit konzeptionell grundverschieden von z.B. I2C. Die andere Sache ist, dass du für CAN Pegelwandler brauchst, da CAn einen differentielles Signal verwendet.
Dann musst der komplette Bus noch in einer Reihe sein, die am Ende terminiert ist.

Aber rein prinzipiell halte ich hier CAN für am geeignetsten.

Protokollseitig ist CAN äußerst sicher (darum wirds auch im KFZ-Bereich verwendet); Alle angeschlossenen Geräte müssen bestätigen, dass sie die Nachricht einwandfrei verstanden haben (auch wenn sie gleich gemüllt wird, da se nicht für denjenigen Teilnehmer bestimmt ist). Die Implementierung ist daher recht aufwendig, was wiederum ein Grund weg von CAN wäre.

Dann käme noch I2C in Betracht. Du hast fertige Module, die meisten deiner AVR's können schon direkt I2C, du brauchst keine Pegelwandler (nur Treiber wegen der Leitungslänge), nur das Problem von I2C ist: lass einmal eine Störung auf die Leitung kommen und alles ist hinüber...
Ausserdem ist I2C nicht Multi-Master-fähig...

Also wenn du die Anwedung in einem Bereich hast, der immer funktionieren muss, dann nimm CAN. Wenn es dir egal ist, ob mal was verloren geht, dann biste mit I2C genauso gut bedient.

MfG
Stefan

16.11.2004, 07:17
das mit der Störanfälligkeit des I²C mag schon stimmen, aber meines Wissens nach ist er schon multi-Master fähig

stegr
16.11.2004, 08:17
das mit der Störanfälligkeit des I²C mag schon stimmen, aber meines Wissens nach ist er schon multi-Master fähig

Der Bus an sich schon, aber meines Wissens unterstützen das die kleinen AVR's nicht. Aber das muss man einfach nachschauen, hab schon seit rund nem Jahr nix mehr mit AVRs gemacht... Bin eher bei den PIC's zuhause...

16.11.2004, 09:27
Bei RS485 kann man bis zu 1200m (bei DMX das auf RS485 aufgebaut ist) Leitungslänge nehmen. Das Übertragungsprotokoll kannste Dir selber basteln weil RS485 nur die elektrischen Spezifikationen vorgibt. Das ist auch Multi-Master Fähig

Frank
16.11.2004, 09:33
Hi Stegr,
ich glaube auch mit dem Atmel TWI-Interface kann der Multimaster-Betrieb genutzt werden - bin mir aber auch nicht 100% sicher. Wer´s genau wissen will, muß wohl ins Atmel Datenblatt schaun ;-)

Gruß Frank

Michael Holoubek
16.11.2004, 09:37
Hi

Also zumindest beim MEGA8/16 kann das TWI-Interface Master-, und Slave-Modus und die Unterstützung für Multimaster-Systeme ist vorhanden.

SirTwist
16.11.2004, 14:07
Hallo Leute,

erstmal vielen Dank für Euren vielen Hinweise!

ich habe mir jetzt mal die Doku zu einem PCA 82C250 geholt, was wohl ein Leitungstreiber für CAN ist. Was ich aus den Stehgreif noch nicht so gefunden habe, ist eine genauere Beschreibung des Protokolls an sich.

Wenn ich mir aber das 82c250-Datenblatt angucke, würd ich (als naiver Newbie) erstmal sagen, dass das schon alles ist, was ich brauche, ein differentieller Leitungstreiber. Ich überlege gerade, ob ich mir den Protokolloverhead (von dem, was ihr da bislang geschrieben habt) spare und dann über die Elektrik vom 82C250 ein eigenes serielles Protokoll baue.

Schade, dafür wird man das TWI vom AVR nicht benutzen können, muss ich mal schauen, was man da selber bauen kann :-/

Ich habe mit Gurgle nicht wirklich hilfreiche Infos zum THema CANBUS und AVR gefunden, hat jemand vielleicht ein paar Links für mich? Wäre klasse, und nochmals Danke für Infos...

An die Elektroniker hier: wie kritisch wären denn Abzweigungen beim CAN bzw. Stichleitungen von hm... 1-2m Länge?

Gruß,
Michael

16.11.2004, 14:32
Schau mal unter den Artikeln, da steht auch was zu CAN-Bus
https://www.roboternetz.de/phpBB2/artikeluebersicht.php

Felix G
16.11.2004, 18:59
Also ich hab grad nochmal nachgeschaut...
es gibt genau einen einzigen AVR mit CAN, nämlich den AT90CAN128.

aber prinzipiell sollte es kein sooo großes Problem sein das Protokoll softwaremässig bei jedem beliebigen AVR zu implementieren.

natürlich ist es sehr viel unbequemer als ein Controller der von sich aus schon CAN beherrscht,
aber das Protokoll an sich ist ja nicht so extrem kompliziert, daß es nicht schaffbar wäre das zu implementieren.

Was die Stichleitungen angeht...
es kommt auf die gesamte Buslänge bzw. die Anzahl der Teilnehmer an (die Baudrate spielt natürlich auch eine Rolle).
1-2m sollten kein allzu großes Problem sein.

Ich habe auch festgestellt, daß es hilfreich sein kann lange Stichleitungen mit einem Abschlußsswiderstand zu versehen.
Das soll man zwar eigentlich nicht machen, aber was solls

17.11.2004, 17:29
Hi,



ich habe mir jetzt mal die Doku zu einem PCA 82C250 geholt, was wohl ein Leitungstreiber für CAN ist. Was ich aus den Stehgreif noch nicht so gefunden habe, ist eine genauere Beschreibung des Protokolls an sich.
...


Du kannst ohne weiteres hier den I²C-Bus verwenden.
Der CAN-Bus ist softwareseitig um einiges komplizierter zu implementieren.
Und wenn es um Störsicherheit geht, kann man den I²C-Bus auch als Differential betreiben. (mit CAN-Bus-Pegeln)

Ich habe dazu folgendes gefunden: http://cctools.hs-control.de/artikel/index.php?artikel=1823

Das ganze arbeitet auch mit 82C250-Treibern. Aber eben für I²C.

Und längere Stichleitungen sollten auch sehr einfach möglich sein,
da man hier schließlich mehrere Busse hat.
(1x Differential und je einen "normalen" I²C-Bus, den man einige Meter ziehen kann.)

ciao ...