Forum: Haus & Smart Home I2C als "Hausbus"


von Joachim Schäfer (Gast)


Lesenswert?

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?)

von Sascha Koths (Gast)


Lesenswert?

Ich würde für deinen Fall den guten alten 485´ger BUS vorziehen.
Da könnens ruhig ein paar Meter mehr sein...

von Thomas Burkhardt (Gast)


Lesenswert?

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.

von Joachim Schäfer (Gast)


Lesenswert?

@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? ;-)

von Josef (Gast)


Lesenswert?

Es gibt Booster (Elektor) die den I2C auf 20 m aufblasen.

Josef

von Markus (Gast)


Lesenswert?

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

von KoF (Gast)


Lesenswert?

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.

von scout (Gast)


Lesenswert?

schau mal in der aktuellen funkamteur nach die . da gibts genau dein
projekt.

von Mike (Gast)


Lesenswert?

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.. :-)

von Thomas (Gast)


Lesenswert?

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

von Joachim Schäfer (Gast)


Lesenswert?

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!

von KoF (Gast)


Lesenswert?

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.

von Joachim Schäfer (Gast)


Lesenswert?

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)

von Peter D. (peda)


Lesenswert?

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

von harry (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

@Peter,

schonmal was damit gemacht? Ich will ein Bedienteil und eine
Alarmzentrale mit sowas verbinden, dachte auch erst an RS485?

Mike

von Michael (Gast)


Lesenswert?

@ 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

von Johannes M. Richter (Gast)


Lesenswert?

@Joachim: Wo hast Du denn die gute RS485-Uebersicht gefunden? Wuerde
mich auch interessieren.
Danke.

von Philipp Sªsse (Gast)


Lesenswert?

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?

von Joachim Schäfer (Gast)


Lesenswert?

@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?

von Johannes M. Richter (Gast)


Lesenswert?

Danke Joachim.

von Peter D. (peda)


Lesenswert?

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

von Michael (Gast)


Lesenswert?

@ 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

von Josef (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

Hallo,

weis jemand ob es den AZ90CAN128 irgend wo zu kaufen gibt?
Bei Reichelt und Conrad mit Schnellsuche erstmal nicht.


Mike

von Steff (Gast)


Lesenswert?

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 ?

von Mike (Gast)


Lesenswert?

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

von Steff (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Angehängte Dateien:

Lesenswert?

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

von Stefan Kleinwort (Gast)


Angehängte Dateien:

Lesenswert?

@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

von Mike (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

Hallo Stefan,

hast du zwischen die SPI Anschlüsse AVR und MCP2515 Widerstände
gemacht, damit die ISP Programmierung beim AVR noch geht?

Mike

von Stefan Kleinwort (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

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

von Mike (Gast)


Lesenswert?

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

von Steff (Gast)


Lesenswert?

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

von Joachim Schäfer (Gast)


Lesenswert?

"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.

von Knirps (Gast)


Angehängte Dateien:

Lesenswert?

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

von Knirps (Gast)


Angehängte Dateien:

Lesenswert?

Hier noch die Platine :-)

von Stefan Kleinwort (Gast)


Lesenswert?

@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

von Mike (Gast)


Lesenswert?

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

von Peter D. (peda)


Lesenswert?

@Mike,

Drehgeber, DCF77-Uhr benötigen keinen Interrupt-Pin (siehe
Codesammlung).


Peter

von Mike (Gast)


Lesenswert?

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

von Joachim Schäfer (Gast)


Lesenswert?

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?

von Sebastian W. (Gast)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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

von Sebastian W. (Gast)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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

von Sebastian W. (Gast)


Lesenswert?

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

von Markus (Gast)


Lesenswert?

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

von Stefan Kleinwort (Gast)


Lesenswert?

@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

von Sebastian W. (Gast)


Lesenswert?

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

von Philipp Sªsse (Gast)


Lesenswert?

[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.

von Joachim Schäfer (Gast)


Lesenswert?

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?

von Philipp Sªsse (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

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

von Jens (Gast)


Lesenswert?

@Knirps

meinst Du als "kleine Serie" die Platine oder komplett bestückt? Was
würde das denn dann kosten?

Jens

von Jobst Q. (jobst_q)


Lesenswert?

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.

von Jörg S. (joerg-s)


Lesenswert?

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
Noch kein Account? Hier anmelden.