Hallo, vor ein paar Tagen kam mir die Idee dass es doch praktisch wäre, einen kleinen einfachen "Hausbus" zu haben, der auch gleich die für Mikrocontroller benötige 5V Spannung liefert. Ich habe zwar noch nie damit gearbeitet, aber in dem Moment schien mir I2C dafür geradezu ideal geeignet - bereits in vielen µCs eingebaut, braucht nur 2 Kabel, ist Multimaster-fähig etc. Also kam mir die Idee, dass es ja möglich sein müsste einfach ein 4adriges Kabel durch die Wohnung zu verlegen, dass neben den beiden I2C-Leitungen noch zwei Leitungen für +5V und GND hat. Das praktische daran wäre meiner Meinung nach, dass man 1) nicht für jede Schaltung die man in der Wohnung benutzt ein eigenes Steckernetzteil + eine 5V-Spannungsreglerschaltung benötigt 2) weiterhin auch noch gleich Daten von jedem I2C-fähigen angeschlossenen Gerät zu jedem anderen transportieren kann Somit müsste es meiner Meinung nach ja dann möglich sein, Geräte/Schaltungen/Sensoren etc. an den Bus anzuschliessen, die im Minimalfall aus nichts weiter als einem Mikrocontroller bestehen, da diese ja I2C oftmals direkt unterstützen und zum Betrieb fast nichts als eine 5V-Spannungsquelle benötigen (zumindest bei den AVRs ist das ja so) Als mögliches Problem ist mir dann jedoch die maximale Kabellänge aufgefallen, da I2C ursprünglich ja für die gerätinterne Kommunikation gedacht ist. Kurz danach habe ich dann allerdings im Internet gesehen, dass es im Grunde genau diese Idee längst gibt, unter dem Namen "Access Bus" - und hier ist die maximale Kabellänge mit 9m angegeben, was für meine Zwecke eigentlich ausreichend wäre. Auch geringe Übertragungsraten wären im Grunde kein Problem. Nun meine Fragen: - Sind die beim "Access Bus" verwendeten I2C-Leitungen vollkommen stinknormale I2C-Leitungen, oder unterscheiden sie sich in irgend einem Punkt? (z.B. andere Ströme/Spannungen o.Ä. wegen der grösseren Kabellänge) - Wäre meine Idee tatsächlich so einfach umsetzbar wie ich mir das gerade vorstelle (4adrige Leitung durch die Wohnung verlegt (da Wohnung sehr klein ist, würden 9m sogar tatsächlich genügen), an die 5V + GND Leitungen eine stabilisierte 5V-Spannungsquelle angeschlossen, und dann an beliebigen Stellen am Kabel einfach die Signale abgegriffen und an die 4 entsprechenden Pins des µC angeschlossen? - Falls das wirklich ginge: Welches Kabel sollte ich dafür am besten nehmen? (genügt geschirmtes 4adriges Kabel, wie es z.B. zum Verlegen von ISDN benutzt wird?)
Ich würde für deinen Fall den guten alten 485´ger BUS vorziehen. Da könnens ruhig ein paar Meter mehr sein...
9 m reichen, dann ist deine Wohnung noch kleiner als meine :) Bedenke auch bei deinem Vorhaben, dass beispielsweise 0,14 mm² "Klingel"-draht schon einen beachtlichen Widerstand hat, also unbedingt mit dem Strombedarf der angeschlossenen Schaltungen abchecken, dass der Spannungsabfall über der Zuleitung nicht zu hoch ist.
@Sascha:
Ich kenne RS485 zwar nicht, aber aber ein kurzer Blick bei Reichelt
zeigt mir dass entsprechende Interface-Bausteine ja doch recht teuer
sind (ab 1,75 Euro aufwärts). Das käme zwar noch durchaus in Frage,
aber wenn es irgendwie per I2C oder SPI ginge wäre das natürlich
besser, weil billiger + weniger Bauteile
@Thomas:
> 9 m reichen, dann ist deine Wohnung noch kleiner als meine :)
Ich fürchte fast, ja! 29,5qm, wer bietet weniger? ;-)
Als RS485 Transceiver empfehle ich den SN75176. Kostet bei Reichelt 0,51 Euro. RS485 ist wesentlich störfester als I2C und verträgt auch höhere Übertragungsraten. Markus
hmm ob da 4 adern reichen?? eventuell sollte eine 2 ader leitung +5V/gnd und eine 3 ader leitung für clock/daten/schalung verwenden. wer weiß denn schon, was da so bei dir in der luft alles rum schwirrt.
du kannst den rs485 ja als half duplex fahren-- dann brauchst nur 2 leitungen, du kannst dann trotzdem hohe baudraten fahren, musst halt nur aufpassen, dass nicht zwei teilnehmer gleichzeitig senden wollen, also musst du master-slave betrieb fahren.. PS.: entschuldigt die kleinschreibung.. frühstücke gerade und hab somit nur eine hand frei.. :-)
Hallo! Hatte mal die gleiche Idee wie du. Habe mehrer LM75 Temp.Sensoren unter der Holzdecke liegen, die meine Halogentrafos überwachen (per µC gedimmt). Der I2C Bus ist ca 12m lang und funktioniert one Probleme. Habe 4x0.14 Telefonleitung genommen, ebenfallst VCC, GND, SCL, SDA. Allerdings muß ich sagen, dass ich das ganze mit sehr geringen Geschwindigkeiten betreibe ca. 1kHz. Auf der sicheren Seite liegst du natürlich mit RS485, das geht bis 1000m (theoretisch). Gruß Thomas
Ich habe gesehen dass in der Dezember-Ausgabe von Elektor auch so etwas ähnliches vorgestellt wird ("USB/I2C-Hausbus"), aber wenn in der aktuellen Funkamateur da auch sowas drinsteht dann werde ich mir doch mal gleich nachher eine Ausgabe holen. 51 Cent für 'nen RS485 Transceiver wären allerdings auch nun wirklich nicht die Welt, da wäre es vermutlich wirklich sinnvoller gleich auf RS485 zu setzen. Kann mir Jemand zu RS485 eine gute URL empfehlen, wo ich mich mal etwas schlauer machen kann? Schon mal vielen Dank für eure ganzen Tips!
hmm, leg doch usb-kabel und hänge da, wo du i2c brauchst ein usb-i2c wandler an. naja, ich habe mal mit dem usb-iow von codemercs i2c geräte angeseuert. nicht besonders schnell das ganze, aber es hat funktioniert.
Habe gerade eine gute Übersicht etc. zu RS485 gefunden. Hat mich voll überzeugt, ich denke ich werde wirklich auf RS485 setzen. Aber eines wundert mich: Im Gegensatz z.B. zum MAX232 benötigen die RS485-Bausteine ja offenbar keinerlei weitere Bauteile (wie z.b. 4 Elkos beim MAX232 für die anderen Spannungen). Wäre es von der Theorie her dann sogar möglich, RS485 direkt im Mikrocontroller nur durch Software zu implementieren? (Nicht dass ich das wirklich machen wollte, nur interessehalber)
RS485 hat den Nachteil, daß man einen hohen Softwareaufwand betreiben muß für das Protokoll (Fehlersicherung, Kollisionserkennung, Retry usw.). Außerdem ist er nicht Multimaster bzw. man muß die Multimasterfunktion in Software emulieren (z.B. Übergabe des Master-Tokens). Deshalb wurde ja der CAN-Bus entwickelt, der alle Vorteile des I2C (Multimaster, Kollisionsvermeidung) und des RS485 (Störsicherheit, hohe Datenrate) vereint. Zusätzlich machen CAN-Controller schon ne Menge Protokoll bereits intern (CRC-Check, Acknowledge, Retry). Deshalb funktioniert CAN auch bereits völlig ohne Protokoll sehr zuverlässig. Einfach die Adresse des Empfängers und die Daten in den Sendepuffer stellen, um den Rest kümmert sich das CAN dann vollautomatisch. O.k., Du benötigst einen CAN-Controller (z.B. MCP2515: 1,95) und eine CAN-Treiber (PCA82C251: 1,25), aber das dürfte die Gesamtkosten nicht wesentlich beeinflussen. Peter
hi, der gag am rs422/485 oder auch apple-talk-bus ist, dass nur pegelunterschiede gewertet werden, die minimal 200mV betragen müssen aber durchaus höher sein dürfen. für eine log. 1 ist leitung A gegenüber leitung B min. 200mV positiver, für eine log. 0 negativer. das ist mit den üblichen 5V allemal zu machen, deshalb keine ladungspumpen etc. man kann deshalb so elend lange kabel verwenden, weil eine störeinstreuung den pegel beider leitungen anhebt oder absenkt, die differenz der leitungen zueinander und damit die information bleibt aber immer erhalten. du kannst den bus auch mit (fast) jedem pc direkt via rs232 schnittstelle ablesen wenn am sn75176 keine buswiderstände hängen, hab' noch nie erlebt, dass das nicht ginge. gruss, harry
@Peter, schonmal was damit gemacht? Ich will ein Bedienteil und eine Alarmzentrale mit sowas verbinden, dachte auch erst an RS485? Mike
@ Peter, noch mal zum Verständnis, RS485 ist doch die hardware-beschreibung, das Protokoll (die Software) ist ein anderer Layer. Oder habe ich da etwas verwechselt? Wenn ich mir DMX anschaue, ist die Software ziemlich einfach. Nur wegen der Interrupt-Häufigkeit ist esa eine ziemliche Belastung. Michael
@Joachim: Wo hast Du denn die gute RS485-Uebersicht gefunden? Wuerde mich auch interessieren. Danke.
Wer kennt denn eine µC-taugliche Implementierung für Multimaster auf RS485? Möglichst ohne Zufallszahlen für die Verzögerung o.ä. Muß nicht hocheffektiv sein; wenn es bei durchschnittlichen 10 % Auslastung noch ohne Deadlock funktioniert, reicht das schon. Bevor ich anfange, selbst etwas zu basteln: kennt jemand eine Lösung, die auch kleinen Controllern eine Chance gibt?
@Johannes: Schau mal unter http://www.elektronik-projekt.de/include.php?path=content/articles.php&contentid=16 Noch mal eine Frage zu RS485: Wenn ich das mittlerweile richtig verstehe dann implementiert Rs485 ja nur den physikalischen Layer; mit anderen Worten RS485 überträgt einfach nur die Bits mittels differentieller Spannungspegel, alle weiteren Netzwerkschichten muss man selbst implementieren, richtig? Ist es dann nicht möglich, einfach die I2C-Pins des Mikrocontrollers an den RS485-Transceiver-Baustein anzuschliessen und somit quasi "I2C over RS485" zu benutzen, oder habe ich da einen Denkfehler?
Der Artikel stellt sehr schön den Hauptnachteil des RS485 heraus: Es ist nur der Single-Master/Multi-Slave Mode praktikabel. D.h. der Master muß ständig die Slaves der Reihe nach abfragen, ob einer mal was zu sagen hat. Alles andere bedeutet erheblichen Protokollaufwand, wofür in Industrieanwendungen schon einige Mannjahre an Entwicklungsaufwand drin stecken. Deshalb ist mir der CAN lieber, wo alles bereits die Hardware macht. Ich selber benutze den T89C51CC01. Ein Kollege hat aber auch den SJA1000 und den MCP2510 benutzt. Kennt man einen, kann man sie alle. @Joachim, im Prinzip kann man I2C auch über CAN-Treiber differentiell übertragen, da die ja auch kollisionsvermeidend sind (recessive/dominate Signale). Allerdings brauchst Du dann I2C mit getrennten Aus- und Eingängen, was meines Wissens nur der PCF8584 unterstützt und der ist schweineteuer und asbachuralt. Peter
@ Joachim, die I2C Pins gehen nicht, da du nur ein Signal übertragen kannst und nicht 2. Weiterhin findet die Synchronisation bei I2C mit einer Taktflanke statt, bei RS485 ist es Timing. Deshalb wird bei RS die UART genommen. Wenn du z. B. den Treiber 75176 nimmst, hast du einen Tranceiver-Baustein. Der kann aber zur gleichen Zeit entweder empfangen oder senden (Halbduplex heißt das glaub ich). Dafür könntest du die gleiche Leitung nehmen. Vor langer zeit (ca. 4 Jahre her) hab ich soetwas mal aufgebaut. Alls Controller sind über die UART auf eine 9-bit Datenübertragung gestellt worden. Dann wurde eine Adresse gesendet. Der Baustein, der sich angesprochen fühlte, ist in den 8-Bit Modus gegangen. Dann haben sich Host und Client über das Wetter unterhalten... Die Controller im 9-bit Modus wurden nicht durch Interrupts ausgebremst. Nach Beenden des Protokolls sind beide wieder in den 9-bit Modus gewechselt und alle Busteilnehmer waren aktiv auf Empfang. Ich glaube die Dokumentation dazu findest du bei Atmel im 8051-Bereich. Michael
Hätte Software für den RS485 Bus die sehr gut funktioniert. Hierbei wird nicht das 9.Bit als Adressbit genützt, damit alle Controller der Welt sich verstehen und auch ein Rs232 Netz möglich ist sowie auch ein PC am Busverkehr teilnehmen kann. SG Josef
Hallo, weis jemand ob es den AZ90CAN128 irgend wo zu kaufen gibt? Bei Reichelt und Conrad mit Schnellsuche erstmal nicht. Mike
Bin selbst auf der Suche nach einem Hausbus. Mir wuerde der i2c-Bus am besten zusagen, fuer die Laenge waere der RS485-Bus sicher geeigneter. Hab mir ueberlegt ob man nicht beides verbinden kann und wurde im google fuendig. http://vodka.tky.hut.fi/~jap/Electronics/I2C-adapter/#schematic Mit zwei RS485 und einem 74LS33, findet ihr das kann funktionieren ?
Hardwaremäßig wird das schon gehen, aber wie oben schon geschrieben, beim CAN Controller braucht du dir über das Protokoll nicht allzuviel Sorgen zu machen und bist kompatibel (wie das Schniepel). Machts du sowas mit I2C oder rs232 nach rs485 (würde ich vorziehen) dann mußt du dir dein Protokoll schreiben und evtl. mit den Einschränkungen oder Unwegbarkeiten die man sich dan selber baut leben. Oben das soll heisen AT90CAN128 das ist ein AVR mit CAN Schnittstelle es gibt auch 8051 Architektur mit CAN eingebaut wie Peter schon geschrieben hat. Mir wäre aber eben AVR lieber, weil 8051 ist schon ein paar Jahre her. Immer noch die Frage, wo gibts das Teil? Mike
Ich kenn den CAN-Bus nicht. Die Aussage "Es ist nur der Single-Master/Multi-Slave Mode praktikabel." stoert mich. Ich stell mir ein Multimaster-System vor wie eben i2c. Er ist billig, hardware-maesig implimentiert, schnell genug und mit den zwei verdrillten Leitungen kann man die Masse und VCC gleich mitverlegen (praktisch). Mich wuerde interessieren wie es bei CAN mit Sternverdratung aussieht. Ist das problematisch? Stefan
Hallo miteinander, wir haben das Ganze vor einem halben Jahr hier schonmal diskutiert, wer Interesse hat, kann sich das ja mal reinziehen: http://www.mikrocontroller.net/forum/read-1-66019.html#86460 Ich baue mir selber auch gerade einen Hausbus, nach langer Überlegung (s.o.) bin ich von RS485 abgekommen und habe CAN verwendet. Übrigens ist CAN auf der physikalischen Schicht nicht weit entfernt von RS485 - frühere CAN-Implementationen hatten teilweise RS485-Treiber benutzt. Das automatische Kollisionshandling bei CAN hat für mich letztlich den Ausschlag gegeben. Ich benutze den mega16 zusammen mit einem/zwei MCP2515, über SPI-Bus gekoppelt. D.h. ich kann bei Bedarf 2 CAN pro Controller realisieren, um eine stern-ähnliche Verdrahtung möglich zu machen. Der Hauptnachteil für CAN ist aus meiner Sicht, dass sternförmige Verdrahtung laut Spec. nicht möglich ist. Ob das geht, ist eine andere Sache, bei niedrigen Baudraten sind sicher auch längere Stichleitungen möglich, aber eben ausserhalb der Spec. Die beste Lösung ist sicherlich eine kombinierte Power/Datenleitung (2-adrig wie bei EIB), aber auch nach langem Suchen habe nicht richtig passendes gefunden. >Ich kenn den CAN-Bus nicht. Die Aussage "Es ist nur der >Single-Master/Multi-Slave Mode praktikabel." stoert mich. Woher kommt denn diese Aussage? Genau das Gegenteil ist eigendlich richtig: es gibt keinerlei Master, und es muss sich auch niemand um die Verwaltung des Busses kümmern. Übrigens bin ich gerne bereit, Schaltpläne und Layouts zu teilen, aber ich bin mit der Doku noch nicht ganz so weit, und auch die Programmierung ist im Augenblick noch in Arbeit. Übrigens habe ich mich sehr von www.CANatHome.de inspirieren lassen - konnte mich aber doch nicht dazu durchringen, "nur" nachzubauen ;-) Viele Grüße, Stefan
@Steff: IIC würde ich ganz kritisch sehen. Dieser Bus ist eigendlich nur als Kommunikation innerhalb einer Platine gedacht, max. innerhalb eines Geräts. Die Ein/Ausgänge haben keinerlei besonderen Schutz. Vielleicht mag es bei 9m Länge (noch) funktionieren, aber wenn Du erstmal dabei bist, werden schnell weitere Leitungen dazukommen. Schonmal daran gedacht, die Zimmerpflanzen über einen Feuchtesensor mit einer Alarmlampe zu vernetzen (5m Kabel mehr)? Viele Grüße, Stefan
Hallo, @Stefan, der MCP2515 hat mir auf den ersten Blick auch gefallen, ich werde mir mal das Datenblatt reinziehen, mal schauen ob ich's hin bekomme. Bis denn, Mike
Hallo Stefan, hast du zwischen die SPI Anschlüsse AVR und MCP2515 Widerstände gemacht, damit die ISP Programmierung beim AVR noch geht? Mike
Hallo Mike, nein, ich programmiere über den JTAG-Debugger, in die Verlegenheit, den SPI zu benutzen, bin ich bisher noch nicht gekommen. Aber es sollte eh ohne Widerstände funktionieren. Die einzige relevante Leitung ist MISO, und die schaltet der MCP2515 nur aktiv, wenn * a) sein CE low ist und * b) ein gültiger READ-Befehl vom mc empfangen wurde. Stefan
Hallo Stefan, in einer Appl. von Microchip ist nach dem MCP2515 noch ein Treiber MCP2551 geschaltet, ich gehe mal davon aus der ist nötig? Mike
Fragen über Fragen, in den Datenblättern steht immer was von 12V oder 24V Systemen. Sind da di Puspegel gemein oder die Versorgungsspannung der Treiber? Wo finde ich eine gute CAN Bus Beschreibung (wer hat den erfunden)evtl. mal in Deutsch. Mike
Man braucht einen Treiber, z.B.: MCP2551 == ATA6660 == PCA82C251 == TJA1050 Die sind 24V fest, d.h. man kann versehentlich +/-24V auf die CAN-Leitungen legen, ohne das was abraucht. Die Betriebsspannung ist +5V. Wenn Du über SPI programmieren willst, mußt Du an CE des MCP2515 einen Pull-Up gegen VCC schalten (z.B. 10k). Peter
CE kann ich nicht finden im Datenblatt, SCK, SO, SI ist klar, CS ist low aktiv, lege ich auf Masse weil ich kein anderes SPI IC anschließe. INT und Reset ist auch soweit klar, wobei brauche ich einen INT? Unklar ist noch TX;0;1;2RTS braucht man die für einfach mal Daten Senden / Empfangen? Na, ja fürs erste mal noch viele Unklarheiten, ein Schaltbild währe mal nicht schlecht, in den Appl. von Microchip habe ich keine Beispielschaltungen gefunden. Mike
Die Aussage mit dem "Single-Master/Multi-Slave" hab ich aus einem Forum ueber c2control. Ich hab so eine im Inselbetrieb laufen (wenig ausgelastet) und faende es gut wenn ich sie einbinden kann (sie war nicht billig) oder kann ich das vergessen? Ich lese mich gerade ein, wuerde aber gern wissen ob der CAN genormte Datenpakete verschickt und nur die Interprtation individuell gestalltet werden muss? Gruss Stefan
"Ich lese mich gerade ein, wuerde aber gern wissen ob der CAN genormte Datenpakete verschickt und nur die Interprtation individuell gestalltet werden muss?" Ja, soweit ich das verstanden habe ist das genau so. Eben dadurch, dass in den CAN-Controllern ein genormtes Übetragunsprotokoll incl. jeglicher Kollisionsbehandlung usw. usw. bereits implementiert ist. Und das ist dann wohl auch der grosse Vorteil gegenüber RS485, wo man das alles halt noch selbst erledigen muss, von den RS485-Treibern also nur die unterste, rein physikalische Netzwerkschicht bereitgestellt wird.
Hi, ich habe letztens ein can modul für meine Experimentier Platine entwickelt wenn ihr interesse habt dann könnte ich ne kleine serie Produzieren. Im anhang hab ich mal den schaltplan. Das modul past auf eine normale 2,54mm Lochraster Platine ... oder eben auf meine Experimentier Platine. mfg Knirps
@Mike: Peter Danegger hat Recht, einen Pullup an CS (oder CE, ist dasselbe) solltest Du vorsehen. Den CS brauchst Du, auch wenn nur 1 IC am SPI hängt. Das CS signalisiert den Start einer neuen Übertragung. Ich führe den SPI übrigens noch auf einen externen Stecker, darüber kann ich von Relaistreiber bis zu Graphikdisplays alles anschliessen, ohne großen Aufwand. >wobei brauche ich einen INT? Brauchen ist relativ - ein Mofa ohne Motor kannst Du auch mit den Pedalen treten. Ohne IR wird das Programmieren wesentlich schwieriger, sobald Dein Programm etwas komplizierter wird. Schliess den IR an, wenn Du im ersten Versuch pollst - ok, später wirst Du ihn ganz sicher brauchen. Unklar ist noch TX;0;1;2RTS Musst DU nicht benutzen. Du kannst sie aber als zusätzliche I/O verwenden. @Steff: genormt insoweit: ein CAN-Paket hat vorneweg einen Identifier (eine Art Adresse), mit der ein (oder auch mehrere) andere Geräte angesprochen werden können. So ziemlich alles andere kannst Du entweder Dir selbst ausdenken oder noch ein Protokoll draufstülpen. Hier ein paar Links (leider alle Englisch): http://www.canathome.de/Dokumentation.htm http://www.kvaser.se/can/edu/index.htm http://caraca.sourceforge.net/ Gruß, Stefan
Hallo, @Stefan, INT0 brauche ich für eine Transponder-Leseeinheit und INT1 wollte ich für einen Drehimpulsgeber nehmen, Funkuhr sollte auch noch ran. Bei A-Tiny gibts den Pin Change Interrupt, ich sehe gerade ATmega gibst mehr als 2 INT. Mike
@Mike, Drehgeber, DCF77-Uhr benötigen keinen Interrupt-Pin (siehe Codesammlung). Peter
Ich habe heute mal auf canathome.de gelesen, ein Datenfeld ist maximal 8 Byte lang? Wie wird denn die ganze Sache dann praktisch gelöst? Ich habe meinetwegen von einem Gerät einen Text sagen wir mal 22 Byte lang zu empfangen, lege ich die einfach auf nen Buffer und schicke die der Reihe nach über SPI zum MCP2515 oder muß ich alles selbst zerlegen? Auf der Empfangsseite siehts ja genauso aus, kann ich mit nem INT vom MCP dann einfach nen Buffer auslesen wieder über SPI zum AVR? Danke Mike
Ich hätte mal noch zwei grundsätzliche Fragen zu Übetragungsfehlern auf Datenbussen: 1. Der "Clou" von differentiellen Bussen wie RS485 ist ja, soweit ich das verstanden habe, dass sich Störungen durch die verdrillten Kabel auf beide Leitungen ungefähr gleich auswirken - wodurch die SpannungsDIFFERENZ sich fast gar nicht ändern. Wenn man aber nun bei einem nicht-differenziellen Datenbus die Masseleitung mit der Datenleitung verdrillt - so hat man meiner Logik nach doch einen ganz ähnlichen Effekt, nämlich dass sich auch hier die SpannungsDIFFERENZ zwischen der Datenleitung und GND fast gar nicht ändert. Wo ist da mein Denkfehler? 1. I2C ist ja grundsätzlich nur für sehr kurze Distanzen gedacht. Ich habe aber gelesen dass grundsätzlich auch Entfernungen von 100m oder mehr machbar sind - mit entsprechend extrem niedrigen Übertragungsraten. Ähnliches gilt ja vermutlich bei fast allen Bussen. Welcher Umstand kommt denn da zum Tragen, also welcher Effekt bewirkt dass lange Kabellängen und hohe Übertragungsraten konkurrierende Ziele sind? Und wie kann ich mir diesen Effekt bildlich (z.B. als Unterschied der Graphen eines beim Sender und eines beim Empfänger aufgestellenten Oszilloskops) vorstellen?
Hallo Das Generelle Problem an I2C, Can sind doch immer die Kabel. Hat jemand mal über eine Bluetooth oder Wlan Variante nachgedacht? Wlan ist der Aufwandt glaube ich hoch, auch die Kosten, Stromverbrauch und implementierung. Mit einem USB/Bluetooth und dann adhoc. Man könnte dann über ein solches Netz intelligente Heizkörperventile,... vernetzen und das ganze mit dem Rechner überwachen ohne das Haus in einen Kabelbaum zu verwandeln. Wenn man noch eine Bridge von Adhocmaincontroller ins Netz macht, zum Rest gibt es ja reichlich Ideen. Auch Komisysteme aus Can/I2C und Bluetooth wären denkbar, sozusagen ein RAN(Room area Network), das nur einen Raum in seiner Gewalt hat. So könnte man mit einem Bluetooth PDA/Handy bestimmen in welchem Raum man ist. Sebastian
Hallo Sebastian, hast Du mal geschaut, was Bluetooth für Microcontroller kosten? Die einfachen USB-Bluetooth-Adapter brauchen einen USB-Host, den man üblicherweise im Microcontroller nicht zur Verfügung hat. (Die japanische Hostadapter-in-Software-Lösung lasse ich mal außen vor, die ist unzureichend dokumentiert.) Da würden sich natürlich auch die ganz normalen 433/866MHz-Teile anbieten, die sind da sicher günstiger. Markus
Hallo Habe mich noch nicht mit USB und Bluetooth befasst. Klar, sollte schon ein 0815 Teil sein das man hinter geworden bekommt. Hast Du Informationen zu so was? Sebastian
Am PC kannst Du so ein Billigteil wohl schon verwenden, am Mikrocontroller aber nicht. Dort brauchst Du sowas wie das von der c't verwendete WML-C09A-AHR, wofür Segor(.de) 39 Euro will. Wenn man davon ein paar braucht, dann geht das ganz schön auf den Geldbeutel. Markus
Ja und woran liegt das? Kann ich nicht einen uC dazu bewegen über USB(wenn nötig selbst geschriebenen Treiber) mit meinem USB Bluetooth gerödels reden zu lassen? Wer hat dazu Datasheets,...? Denke ien AVR oder PIC reicht doch dicke um USB zu machen muss ja nicht schnell sein. Sebastian
Doku zu USB gibts hier. Laß Dich nicht von den 650 Seiten abschrecken. http://www.usb.org/developers/docs/ Ansonsten habe ich hier mal etwas darüber geschrieben: http://www.mikrocontroller.net/wiki/USB
@Sebastian: USB-Bluetooth-Modul? Um das anzusteuern, brauchst Du einen USB-Host. Und das ist RICHTIG aufwendig. Bluetooth braucht übrigens für eine solche Anwendung viel zu viel Strom, wenn schon, dann Zig-Bee Funkmodule. Und Funktechnik überhaupt - hat leider den Nachteil, das die Stromversorgung über Funk noch nicht funktioniert. An Stellen, wo leider ein Kabel vergessen oder nicht möglich ist - ok, aber ansonsten finde ich Kabel immer noch praktikabler. Es gibt übrigens Entwicklungen, z.B. Lichtschalter so zu konstruieren, dass der Tastendruck genügend Energie für das Funkmodul erzeugt, das könnte ich mir sogar noch vorstellen ... Ich habe heute mal auf canathome.de gelesen, ein Datenfeld ist maximal 8 Byte lang? Wie wird denn die ganze Sache dann praktisch gelöst? Ich habe meinetwegen von einem Gerät einen Text sagen wir mal 22 Byte lang zu empfangen, lege ich die einfach auf nen Buffer und schicke die der Reihe nach über SPI zum MCP2515 oder muß ich alles selbst zerlegen? Auf der Empfangsseite siehts ja genauso aus, kann ich mit nem INT vom MCP dann einfach nen Buffer auslesen wieder über SPI zum AVR? @Markus: Du musst Deinen Text halt in mehreren Datenpaketen hintereinander senden. Praktisch läuft das Ganze so: Du hast eine Funktion, die ein Paket an eine bestimmte Adresse auf dem CAN-Bus (->Identifier) verschicken kann. Wenn mehr als 8 Byte vorliegen, einfach diese Funtion entsprechend oft wiederholen. Du kannst natürlich auch immer nur ein Byte schicken, dann hast Du eine Analogie zur RS232-Schnittstelle ;-) Viele Grüße, Stefan
Hallo Na ja, stimmt nicht ganz, die Feldstärke muss noch hoch genug sein, dann kann mana auch richtig Energie übertragen, aber wenn dann beim Nachbarn was abfackelt ist das weniger schön. Ein KW Bestrahlungsgerät in einem Krankenhaus hat mal im Nachbarraum mit Arbeitsplatte einen Brand verursacht, waren Aluleisten an der Wand -> Funkenstrecke. grins Die meusten habe an vielen Stellen im Haus elektrischen Strom und auch am Schalter. Doch ein Datenkabel zu verlegen ist aufwendig. Über PLC, na ja. Man muss klar sagen das die PLC Geräte einfach KEINE Zulassung haben, sich rechtlich in einer Grauzone befinden. Außerdem sind die auch teuer. USB ist recht kompiziert gebe ich zu. Letztendlcih brauche ich ja auch gar kein USB, auch kein Bluetooth sondern nur eine genormte Funkübertragung. Hat jemand Projekte wo man sich was abschauen kann? Sebastian
[Joachim:] > Wenn man aber nun bei einem nicht-differenziellen Datenbus die > Masseleitung mit der Datenleitung verdrillt - so hat man meiner > Logik nach doch einen ganz ähnlichen Effekt, nämlich dass sich > auch hier die SpannungsDIFFERENZ zwischen der Datenleitung und > GND fast gar nicht ändert. So weit, so richtig. Aber Du hast den zweiten Clou vergessen: bei RS485, CAN und Konsorten hast Du bei Low + auf der einen Datenleitung, - auf der anderen; bei High ist es umgekehrt. Damit darf sich im Laufe der Kilometer durch Leitungswiderstand usw. die Differenz fast beliebig annähern -- solange sich das Vorzeichen der Differenz nicht umkehrt, kann ein Differenzverstärker das Signal immer retten. Bei einem Signal, das zwischen Ground und Highlevel schaltet, mußt Du immer eine Schwelle angeben, ab wo das Signal als High interpretiert werden soll. Wenn Du die zu niedrig wählst, kann jede kleine Störung einen Bitfehler verursachen, obwohl der Pegel eigentlich gut genug gewesen wäre. Wählt man sie zu hoch, ist ab einer gewissen Leitungslänge halt keine Detektion mehr möglich, weil sich die Differenz im Kabel verbraucht hat.
Ok, ich hab mir schon gedacht dass die Übertragung des Signals als + und - da noch hineinspielt; nur der genaue Sinn war mir bisher noch nicht so ganz klar. Aber bringt es dann trotzdem etwas für die Maximallänge/maximale Übertragungsgeschwindigkeit, wenn man die GND-Leitung mit der Datenleitung verdrillt?
Ja und nein (immer wieder sehr hilfreiche Antwort, gell?). Wenn Du in störsignalreicher Umgebung bist, bringt es sicherlich einiges, weil nicht jeder eingespeiste Impuls Dir ein Bit versauen kann. Oft ist aber auch der begrenzende Einfluß die Kapazität: die Bustreiber haben einen gewissen Widerstand (alleine schon durch Schutzbeschaltung), dann schaffst Du es bei hohem Bustakt nicht mehr, einen Impuls durchzukriegen, wenn Du Dutzende Meter verdrilltes Kabel mit 200 pF/m hast.
Die CAN-Treiber funktionieren immer noch, wenn bis zu +/-5V Potentialdifferenz zwischen den Massen besteht und halten auf Dauer +/-40V aus. Also 3V Brummspannung z.B. über ne Erdschleife stören die Übertragung nicht. Trotzdem sieht man in Industriesteuerungen oft, daß zwischen Transceiver und Controller 2 Optokoppler geschaltet werden, um gar nicht erst ne Erdschleife entstehen zu lassen. Peter
@Knirps meinst Du als "kleine Serie" die Platine oder komplett bestückt? Was würde das denn dann kosten? Jens
Es gibt I2c-Bus Extender ( P82B715 ) die zusammen mit niedrigen Pull-Up Widerständen (zB 330 Ohm) die Störanfälligkeit drastisch reduzieren und auch längere Leitungen ermöglichen. Hatte ich früher problemlos als Feldbus bis zu 50m verwendet. Für noch größere Störsicherheit oder noch längere Leitungen kann man I2C auch mit CAN-Treiber-ICs physikalisch auf die CAN-Übertragung übersetzen. Eine fertige Lösung: http://cctools.hs-control.de/ext_index.php?artikel=1823 Der CAN-Bus ist auch ein differenzieller Bus. Im Gegensatz zu RS 422 und RS485 arbeitet er aber wie auch I2C nach dem Open-Collektor (bzw Open-Drain) Prinzip. So wie bei I2C jeder Teilnehmer das Signal auf GND ziehen kann bei CAN jeder (zugleich) das CAN_L-Signal auf Low und das CAN_H-Signal auf High ziehen. Statt der Pull-Up Widerstände wirken die Abschlußwiderstände zwischen beiden Leitungen. Siehe Datenblatt des PCA82C250 : http://www.semiconductors.philips.c.....atasheets/PCA82C250_5.pdf Aufgrund dieser Verwandschaft ist der I2C-Bus leichter auf CAN-Physik zu übersetzen als auf RS 422 oder RS 485. Wie steht hier drin: http://www.semiconductors.philips.c.....licationnotes/AN460_1.pdf Das schöne ist, dass das I2C-Protokoll bleiben kann über das gesamte System. Mit einem CAN-Controller geht zwar eine CAN-Verbindung von einem MC zum andern, aber auf andere I2C Bausteine kann man damit nicht zugreifen.
Steht alles schon in: http://www.mikrocontroller.net/articles/I2C_als_Hausbus :) Davon abgesehen ist dieser Beitrag schon 7 Jahre alt!
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.