mikrocontroller.net

Forum: Haus & Smart Home I2C Hausbus NSLU2


Autor: Hans Schmitt (mrbubble)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen!

Ich bin gerade damit angefangen mich mit der Thematik 
Hausautomatisierung zu beschäftigen und auf diesem Gebiet noch sehr 
"planfrei". Ich würde gerne damit anfangen, mein Haus (befindet sich in 
einer "schleichenden und permantenten Renovoerungsphase") nach und nach 
mit einem Hausbus auszustatten. Meine Wahl viel jetzt (vielleicht 
voreilig??) auf den I2C-Bus. Die Steuerung würde ich gerne über mein 
NSLU2 (Debian  -lenny) realisieren. Ich hab mir auch gleich ein USB-I2C 
Inteface beim ELV bestellt um vielleicht schon ein wenig experemtieren 
zu können. Da ich relativ viel Erfahrung in der Softwareentwicklung 
unter Unix habe (ich entwickle größere SW-Systeme beruflich) sehe ich 
dort auch keine Probleme. Ich habe aber leider keine richtige 
Vorstellung davon, wie ich jetzt zum Beispiel das betätigen eines 
Lichtschalters als Signal auf den Bus bringen kann damit ich üner das 
NSLU2 bestimmte Steckdosen oder das Licht schalten kann. Kann mir jemand 
einen Link nennen wo diese Informationen auch "Frischlingsmäßig" erklärt 
werden?

Vielen Dank und viele Grüße,

Hans

Autor: Abdul K. (ehydra) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NXP i2c manual.

Aber so nebenbei: i2c ist nicht für größere Buslängen geeignet. Weder 
hat er hohe Treiberleistung, noch Überspannungsschutz, noch ist er 
galvanisch isoliert. i2c ist ideal für erweiterbare Kommunikation auf 
ein paar Steckkarten in einem Gerät. Dafür wurde er auch ausgelegt.

Das nächstbeste wäre RS485 mit Manchestercode aka Übertragern. Da kann 
ich dann nicht ganz so viel meckern...

Mach dir erstmal Gedanken darüber, wieviel Eigenintelligenz die 
einzelnen Blätter haben sollen.


Gruß -
Abdul

Autor: Micha B. (chameo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe meine Hausautomation via CAN Bus realisiert. Der große Vorteil 
des Einsatzes von CAN Controllern ist, dass man sich nicht um den Bus, 
mögliche Kollisionen, korrekte Übertragung usw. kümmern muss. Daten 
senden, fertig!
Meine Universalmodule für die UP-Dose haben 13 frei konfigurierbare I/O 
Pins. Über eine Huckepackplatine kann ich bei Bedarf zwei 230V 
Triac-Schaltstufen anfügen.
Die Zentrale bildet bei mir ein normales Centrino Notebook (<20W 
Verbrauch), welches über ein RS232/CAN Gateway an den Bus angeschlossen 
ist.

Bei meiner Steuerung wird also der Lichtschalter an ein Universalmodul 
angeschlossen. Das Modul sendet eine Nachricht an die Zentrale, sobald 
der Schalter betätigt wird.
Die Zentrale entscheidet aufgrund ihrer Programmierung was nun zu tun 
ist und sendet dann den Schaltbefehl an das Universlamodul mit 230V 
Schaltstufe an welchem die zugehörige Glühbirne angeschlossen ist (oder 
mehrere Befehle an mehrere Module, z.B. Treppenhausbeleuchtung).

Wenn Du noch Fragen hast, melde Dich ruhig per PN.

Autor: Hans Schmitt (mrbubble)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo!

Vielen Dank für eure Antworten. Wenn ich euch richtig verstehe, ist der 
i2c nicht unbedingt eine gute Wahl, oder?

@Abdul:
Eigenintillegenz müssen die einzelnen Knoten ja eigentlich nicht haben, 
das die Steuerung über die NSLU2 erfolgen soll oder habe ich da jetzt 
etwas falsch verstanden?

@Micha:
Das hört sich sehr interessant an... Wie sieht ein solches 
Universalmodul von Dir denn aus?

Viele Grüße, Hans

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I2C ist gar keine Wahl bei den im Haus üblichen Leitungslängen. Nimm was 
RS485-basiertes.

Autor: Micha B. (chameo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Hans
Mein Universalmodul ist eine runde Platine mit 50mm Durchmesser. In der 
Mitte sitzt ein ATmega8, darüber die 5V Spannungsregelung mit 7805, 
darunter der CAN Controller MCP2515 und Transceiver PCA82C251. Rund 
herum am Rand der Platine sitzen Stiftleisten im RM 2mm auf welchen die 
IO Pins herausgeführt werden. Jedem IO Pin steht ein Masse Pin und ein 
5V Pin zur Seite, um angeschlossene Sensoren/Aktoren zu versorgen. 
Eingangsspannung und CAN Bus werden über Schraubklemmen verbunden.

Ich habe derzeit 12 dieser Module im Einsatz (drei weitere folgen noch). 
10 davon haben 230V Schaltstufen an denen meine Rollläden hängen. Die 
Busleitung besteht aus geschirmter Fernmeldeleitung 0,6mm² in zwei Ästen 
zu je ca. 70m Länge.

Autor: Uwe Berger (boerge) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
MoinMoin,

nun I2C ist ja nun nicht so schlecht. In Sachen Leitungslängen gibt es 
auch Repeater-ICs...

Gerade in Hinsicht auf Linux hat I2C auch einen Vorteil, in aktuellen 
Kernel-Versionen sind bereits entsprechende Kernel-Module enthalten. 
Eine Anlaufstelle, um sich etwas zu belesen wäre hier:

http://www.harbaum.org/till/i2c_tiny_usb/index.shtml

und auch hier:

http://bralug.de/wiki/BLIT2008-Board_mit_i2c-tiny-...

Grüße Uwe

Autor: Sven H. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
I2C ist als Hausbus völlig unangepasst! Alleine schon dadurch, dass die 
Übertragung nicht symetrisch erfolgt. Lege mal 5m I2C Bus neben eine 
230V Leitung. Dann hat es sich schon ausge-i2c-t.

Ich bin für CAN!

Autor: moro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jeder der hier genannten Busse hat seine Vor- und Nachteile und 
persönliche Vorlieben spielen auch eine große Rolle.

I2C: Ist billig, gut unterstützt mit Freeware Compilern und geht im 
Standard Mode (100kHz) bis 10m problemlos. I2C wird z.B. als IPMI-BUS in 
hochverfügbaren Systemen der Telekomindustrie eingesetzt, da können die 
Leitungen über mehrere Racks gehen und erreichen schon mal die 10m. Wenn 
man die Clockspeed auf z.B. 10kHz reduziert, kommt man auch auf größere 
Längen und für ein paar Sensoren und Stellglieder ists allemal genug.

RS485: Ist billig, läßt große Leitungslängen zu, hat aber das ärgerliche 
Limit der 32 Loads an einem Bus. Wenn man RS232 für die Protokollebene 
verwendet ist es noch dazu watscheneinfach und wirklich universell.

CAN: Ist billiger als früher aber noch immer die teuerste Lösung. Allein 
das man bei jedem Element einen Controller und einen Treiber braucht, 
schlägt mit ca. 7 Euro zu Buche - und die Menge machts halt.

Als Denkanregung beschreibe ich was ich realisiert habe, in einem 
Wohnhaus mit 100qm Grundfläche und 3 Stockwerken+Keller. In jedem 
Stockwerk ist ein I2C (10kHz, 20m) vorhanden mit bis zu 8 
Temperaturmeßpunkten. I2C deshalb weil es die sowohl einfachste als auch 
billigste Realisierung darstellt - für den Sensor nimmt man MCP9801 (12 
Bit Temp-Sensor mit I2C), die Außenbeschaltung besteht aus einem 
Kondensator und den Adressjumpern.
In jedem Stockwerk sitzt ein ATTiny2313 als I2C Master. Alle 
"Stockwerkscontroller" sind über RS485 vernetzt, als Master an diesem 
RS485 fungiert ein ATMega128 der mit einer 512MB SD-Karte als Datalogger 
fungiert und Minutenwerte aller max. 48 Temperatursensoren aufzeichnet. 
Die Ressourcen im I2C reichen ganz locker für ein Vielfaches der 
benötigten Datenrate.

In weiterer Folge sollen in der vorhandenen Topologie aktive 
Stellglieder für die Heizung (Fußboden + Radiator in jedem Raum) 
dazukommen.

Autor: Micha B. (chameo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@moro

20m bei I2C sind recht mau. Zudem muss man ständig pollen.

Bei RS485 muss man sich -wenn man Multimaster haben will- selbst ums 
Protokoll kümmern (RS232 ist kein Protokoll). Geht zwar, kostet aber 
unnötig Nerven und Speicherplatz. Zudem die erwähnte Einschräkung auf 32 
Teilnehmer.

Die o.g. CAN Komponenten kosten aktuell 3,30 Euro. Dafür kriegt man dann 
Störsicherheit, Multimaster und 128 Busteilnehmer.

Das komplette Material für eines meiner Universalmodule kostet 8 Euro. 
Dafür hab ich dann einige Freiheiten. Meine Modulsoftware untersützt 
z.B. den Anschluß eines HD44780 kompatiblen Displays sowie einer 
Tastaturmatrix. Damit wird das Modul im Handumdrehen zur Anzeige- bzw. 
Bedieneinheit. Zwei analoge Anschlüsse zur Messung von Helligkeit und 
Temperatur sind auch mit drauf.

Autor: Hans Schmitt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Zusammen!

Nochmals vielen Dank für die umfangreichen Antworten. Aktuell bin ich 
aber jetzt ein wenig verwirrt...

Vom Gefühl her gefallen mir die Lösungen von moro und Micha B am besten. 
8 Euro für ein solches Universalmodul sind zwar schon eine Hausnummer 
aber im Rahmen. Ein wenig im dunkeln liegt bei mir noch die Frage, wie 
ich jetzt die einzelnen Module mit meiner NSLU2 auslesen bzw. antriggern 
kann. Gibt es da schon vorgefertigte Interfaces wie z.B das I2C<->USB 
Inteface? Eine weitere Möglichkeit sehe ich in der Variante von moro. 
Ich steuere die einzelnen "I2C-Stockwerkscontroller" über meine NSLU2 
an...

Viele Grüße,

Hans

Autor: Uwe Berger (boerge) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Gibt es da schon vorgefertigte Interfaces wie z.B das I2C<->USB
> Inteface?
>
ja, auf dem Webseiten, deren Links ich oben gepostet habe findest du 
solche Interfaces, einmal mit einem ATmega8 und auf der Seite von Till 
Harbaum mit einem ATtiny45... Der Aufwand für den Bau eines solchen 
Interface ist nicht allzu hoch.

Grüße Uwe

Autor: moro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Micha B.:
Im Prinzip hast du natürlich recht, I2C über 20m ist kein 
Geschwindigkeitswunder. Nur will ich ja keinen Rekord aufstellen, 
sondern jede Minute 8 Messwerte von je 12 Bit übertragen - und dafür 
reicht schon fast die sprichwörtliche Brieftaube;-)

Multimasterprotokoll auf RS485 ist übrigens aus ebendiesem Grund des 
wahnsinnig hohen Datenaufkommens auch nicht notwendig.

Die 7 EUR sind übrigens Preisbasis von heute wobei als Einschränkung 
anzumerken ist das ich als Österreicher mir ein paar Bauteile nicht um 
10 EUR Versandspesen aus Deutschland bestellen werde ... kann also 
durchaus sein dass das Zeug bei euch billiger ist.

Was für mich nicht unerheblich war, ist dass ich kein ausgesprochener 
Embedded-Freak bin. Ich hatte gar nicht den Anspruch einer universell 
einsetzbaren Lösung für alles und jenes, sondern die klar definierte 
Anforderung der Temperaturmessung mit ein bisserl Reserve um später 
eventuell Stellkommandos für Heizungsventile zu übermitteln.

Dafür habe eine einfache und billige Lösung gesucht und bin über den 
Bascom gestolpert der in der Demoversion bis zu 4k Code erlaubt - langt 
dicke. I2C Support ist vorhanden und sehr komfortabel, auch war es 
ziemlich einfach den UART für ein simples Eigenbauprotokoll zu 
verwenden. Sogar für CF bzw. SD ist bereits einiges vorgeleistet, auch 
wenn ich noch mit einigen Details kämpfe.

Autor: moro (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Hans Schmitt (mrbubble)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@moro:
Den Artikel hatte ich auch schon gesehen und mir danach überlegt, dass 
der i2c Bus für mich ideal wäre...

Jetzt bin ich allerdings wirklich etwas verunsichert, welches System ich 
denn jetzt verwenden werde. Wie schon geschrieben, gefällt mit das 
System von moro und Micha B. am besten. Ich versuche mich gerade ein 
wenig "einzulesen" um auch mal abzuschätzen in wie weit sich die 
VArianten mit meinen Fähigkeiten am Lötkolben vereinbaren lassen...

Viele Grüße,

Hans

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Tu dir selbst einen gefallen und nimm den CAN bus.

Ich habe anfangs auch mit I2C geliebaeugelt. Nach ein paar Versuchen bin 
ich aber schnell davon abgekommen. I2C verwendet, wie schon geschrieben, 
keine differenzielle Datenuebertagung. Liegt irgendwo eine 230V Leitung 
in der Naehe dann wird das Signal ziemlich versaut.

Eine gewisse Verbesserung der Uebertragungsqualitaet laeest sich zwar 
mit dem P82B96 erreichen, aber ueberzeugen tut das auf Leitungslaengen > 
50m  nicht wirklich, Ganz zu schweigen von den Mehrkosten des P82B96. 
Und will man spaeter mal in Richtung Multimaster gehen, dann wirds 
richtig spassig mit dem I2C.

Ich habs nicht bereut mich fuer CAN entschieden zu haben. Es ist am 
Anfang etwas Aufwand sich in die Materie einzuarbeiten, aber wenn man es 
mal kapiert hat, erleichtert es die Entwicklung ungemein. Can Nachricht 
in die Register laden und gut is. Den Rest macht der Can Controller. Um 
Kollisionen, Multimaster etc braucht man sich nicht zu kuemmern. Auch 
grosse Leitungslaengen stellen kein Problem dar. Momentan betreibe ich 
23 Knoten auf ca. 150m Leitungslaenge, und das Signal sieht immer noch 
astrein aus.

Autor: Daniel Held (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Micha B.
...
Bei RS485 muss man sich -wenn man Multimaster haben will- selbst ums
Protokoll kümmern (RS232 ist kein Protokoll). Geht zwar, kostet aber
unnötig Nerven und Speicherplatz. Zudem die erwähnte Einschräkung auf 32
Teilnehmer.
..

Woher hast Du die Info mit den 32 Teilnehmern?? Das ist natürlich 
Quatsch, wir haben pro 400m RS485 Ast 100 Teilnehmer und das 
funktioniert problemlos.

Ich wäre auf jeden Fall für RS485 weils günstig und ausreichend schnell 
ist.

Autor: Micha B. (chameo)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Daniel Held
Das ist natürlich kein Quatsch sondern Bestandteil der EIA-485 
Spezifikation, die von einer bestimmten Gerätelast (unit load) für einen 
Standard RS-485 Treiber ausgeht.

Das es inzwischen Treiber gibt, die nur 1/8 dieser Last erzeugen und 
somit bis zu 256 Teilnehmer ermöglichen ist zwar richtig, kann aber 
nicht als allgemein gültig für den RS-485 Standard betrachtet werden.

Siehe auch: http://focus.tij.co.jp/jp/lit/an/slyt086/slyt086.pdf

PS: Nichtsdestotrotz läuft mein Hausbus mit CAN und das ist gut so!

Autor: Gerrit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die NSLU2 hat auch einen eingebauten I2C-Bus. siehe: 
http://www.nslu2-linux.org/wiki/Info/PinoutOfI2CPort

Dann an den Bus einen Atmega und die entsprechenden anderen Teile, wie 
Treiber, etc.

mfg Gerrit

Autor: Ben (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit geeigneten Treibern (billiger als CAN) kann man mit RS-485 
Problemlos 128 oder sogar  256 Teilnehmer verwalten. Der alte Standard 
ist für diese Tatsache völlig irrelevant.
Die Kosten und die Einfachheit der Implementierung für eigene 
Entwicklungen sind mit CAN z.Z. nicht zu toppen.

Autor: Robert Weber (rweber)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ben wrote:
> Mit geeigneten Treibern (billiger als CAN) kann man mit RS-485

Die uCs moegen billiger sein, die Treiber aber mit Sicherheit nicht:

LTC485 2,5E
MAX485 1,6E

PCA 82C251 0,73E

> Die Kosten und die Einfachheit der Implementierung für eigene

Einfachheit ok, aber nur solange EIN Master vorgesehen ist. Am 485 
Multimaster haben sich schon einige versucht, meist mit eher geringem 
Erfolg.

Ich finde es wesentlich praktischer wenn eine Node Ihre Daten auf den 
Bus legt, wenn sie was zu sagen hat, anstatt einen Master, der stur alle 
Nodes pollt ob irgendwer was zu melden hat. Ab einer bestimmten Anzahl 
von Nodes macht das keinen Sinn mehr.

@ Micha B.
> PS: Nichtsdestotrotz läuft mein Hausbus mit CAN und das ist gut so!

Full ACK.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.