Hallo zusammen, ich versuche mich momentan am CAN-Bus. konkret geht es mir um den Identifier und die Datenbytes. Ich möchte die Bewässerung und Beleuchtung unseres Gartens automatisieren und habe mir dazu folgendes überlegt: - einheitliches Protokoll - einfach erweiterbar - CAN-Knoten sollen günstig sein (Knoten mit Atmega8 und MPC2515 funktioniert bereits) Ich benötige folgende Grundtypen an Nachrichten: - Übertragen von Systemeinstellungen (z.B Uhrzeit, Messintervall) - Rückmeldungen von Knoten über Zustände der Aktoren und Sensoren - Befehle für Sensoren (z.B. Messungen) und Aktoren (z.B. Licht) - Heartbeats Ich möchte gern den 11-stelligen Identifier verwenden und hätte das so aufgeteilt: Identifier: Bit 10 - 7 Grundtyp der Nachricht - 0x1 ist Einstellen System - 0x2 ist Rückmeldung/Ergebnisse - 0x3 ist Befehl - 0x8 ist Heartbeat Bit 6 - 0 Sende/EmpfängerAdresse des Knotens (Abhängig ob Befehl oder Rückmeldung) Datenbyte 1 - Bit 7 0 = Sensor bzw Taster 1 = Aktor z.B Ventil, Pumpe, Relais - Bit 6 - 0 Adresse des Sensors/bzw. Aktors Datenbyte 2 - Zustand (Ein/Aus) - Messwerte Szenario 1: Knoten 3 misst Temperatur mit Sensor 2 und diese soll im EEProm des Knoten 1 gespeichert werden. Knoten 3 schickt folgende Daten auf den Bus: Identifier: 010 0000 0011 (Rückmeldung, Sendeadresse) Datenbyte 1: 0 000 0010 ( Bit 7 = Sensor, Sensoradresse ist 2) Datenbyte 2: messdaten Diese werden vom Knoten 1 nun empfangen und können eindeutig zugeordnet werden. Senario 2: An Knoten 2 wird der Taster betätigt darauf hin soll Lampe 1 an Knoten 1 angeschalten werden. Identifier 0011 0000 0001 (da jetzt Befehl ist Bit 6-0 der Empfänger) Datenbyte 1: 1 000 0001 (Aktor, Nr 1) Datenbyte 2: 0000 0001 (Zustand Ein) Knoten 1 schickt jetzt folgende Meldung: Identifier 0010 0000 0001 (da Rückmeldung ist Bit 6-0 jetzt Sendeadresse) Datenbyte 1: 1 000 0001 (Aktor, Nr 1) Datenbyte 2: 0000 0001 (Zustand Ein) Wie findet ihr das Konzept? Hättet ihr Vorschläge zur Verbesserung? Danke Euch :-)
> Hättet ihr Vorschläge zur Verbesserung? An diesen Standard anlehnen: CANopen. . http://de.wikipedia.org/wiki/CANopen . http://www.can-cia.org/
Nun ja vielen Dank für den Tipp. Ich hab mir das schon angesehen, nur verstehe ich da leider Bahnhof. Weiß leider garnicht wie ich da herangehen soll.... Meines Erachtens ist canopen auch zu oversized für meinen Zweck.
Es gibt im Netz so einige Projekte in dieser Richtung, z.B.: http://code.google.com/p/tech-home-automation/ http://hcan.grundwerk.info/index.php?page=1 http://hcan.grundwerk.info/wiki/doku.php?id=hcan-protocol http://canathome.de/
Hallo, na, dann schmeiß ich doch auch noch 'mal meinen Hut in den Ring: https://github.com/maveric00/HomeCANtrol Benutzt zwar einen extended Identifier (um die Adressierungsart von KNX besser annähern zu können), die paar Bits machen aber keinen Unterschied, was die Bustlast angeht. Ist auch alles vorhanden, was man als Basis so benötigt: Sensor-Knoten (passend für UP-Dosen), Relais-Knoten (für Hutschiene), LED-Treiber-Knoten, CAN-Ethernet-Gateway (naja, kann schon etwas mehr: WLAN, 2*Ethernet, 2*CAN, RS485, RS232; Linux-Betriebssystem, 2TE Hutschienengehäuse, ~2 Watt Stromaufnahme). Software für alle Elemente im Quelltext, inkl CAN-Gateway und einer Controller-Software ink. Web-Server. Einfach auch mal in der Wiki nachsehen, da habe ich mein Protokoll beschrieben. Schöne Grüße, Martin
Hallo zusammen, vielen Dank für Eure Tipps und Links. ich bin auf diesem Gebiet noch absoluter Newbie. Die wichtigste Motivation bei diesem Projekt ist auf jeden Fall der Lerneffekt. z.B. wie entwickelt man das System. Wie Abstrahiert man die Modelle. und wie wird es dann konkretisiert. Also der Faktor Zeit ist erstmal ausgeklammert. :-) Ich habe mir das Can @ Home Projekt eingesehen und wenn ich richtig verstanden habe, gibt einmal eine Ereignisgesteuerte Kommunikation (Broadcast z.B Thermometer oder Lampe ist an) und einmal eine Zielgerichtete (z.B Taster soll Lampe xy anschalten). Dann wurden verschiedene Botschaftstypen definiert: z.B. DDO Read, DDO write, DOR.... Ich möchte mich erst den DDOs widmen: Das ganze funktioniert mit der extended ID (29 Bit) 5 Bit Botschaftstyp, 8 Bit Sender, 8 Bit Empfänger, 8 Bit DataObjektType = 29 Bit Wenn ich nun z.B einen Taster konstruiere, werden diesem dann diese Zuordnungen fest implementiert? Also das ich diese festen Ziel IDs z.B. im EEProm hinterlege und wenn ich den Taster drücke, werden diese auf den CAN Bus gelegt? Vielen Dank Euch :-) Grüße Matthias
Matthias Kugler schrieb: > Wenn ich nun z.B einen Taster konstruiere, werden diesem dann diese > Zuordnungen fest implementiert? Also das ich diese festen Ziel IDs z.B. > im EEProm hinterlege und wenn ich den Taster drücke, werden diese auf > den CAN Bus gelegt? entweder so (dann musst Du den Taster irgendwie konfigurieren), oder per Codierschalter, wo Du die Hexadresse der zugehörigen Lampe einstellst. Das mit den Codierschaltern ist natürlich einfacher zu implementieren, erfordert aber mechanischen Zugriff auf jeden Knoten. Geschickter ist es, jeden Knoten mit einer einzigartigen Seriennummer auszustatten, wo man dann sagen kann: <Konfiguriere> <SN=0000124567b4ee> <Start> <Konfiguriere> <ID=63> <Konfiguriere> <Ende> Wenn Du es einfach haben willst: DS2401 Silicon Serial Number. Jeder Chip hat seine eigene Seriennummer. PS: Wenn Du es noch einfacher haben willst: PIC18F26K80. Enthält eine deutlich verbesserte Version des MCP2515 plus einen 8 Bit Prozessor und ist platzsparender und billiger als Mega8 plus separatem MCP2515. fchk
Stimme Frank uneingeschränkt zu, warum so kompliziert, ein PIC, der CAN kann, ein 18B20 als Temperaturfühler kann sowieso nicht schaden und der hat eine einzigartige Seriennummer. Geht alles auf eine einseitige Platine, passt in die normalen Schalterdosen. Was Martin, CAN@home, hcan usw geschaffen hat, will ich nicht kaputt reden, Respekt.
Vielen Dank für Eure Antwort. Mit PIC's habe ich noch nichts gemacht, aber es gibt immer ein erstes Mal. :-) ich kuck mir den mal an. Danke für den Tip mit dem DS2401...was es nicht alles gibt :-) Das verstehe ich nicht: ><Konfiguriere> <SN=0000124567b4ee> <Start> ><Konfiguriere> <ID=63> ><Konfiguriere> <Ende> Die SN wäre dann Ziel? Dies würde aber doch bedeuten, ich hätte nur immer einen Festen Adressaten pro Nachricht... Eine Seriennr. könnte ich dich auch Softwareseitig implementieren, dann muss ich halt schauen, das die eindeutig ist oder?
Bei CAN ist es so, dass jeder Knoten alles hört und selber ausfiltert, was ihn interessiert. Jetzt definierst Du, dass jeder Knoten auf die ihm zugewiesene ID und auf eine Broadcast-ID (z.B. 0) hört. Damit kannst Du jeden Knoten adressieren, egal ob er eine ID hat oder nicht. Du schickst eine Broadcast-Message mit dem Befehl "Konfigurationsmodus an" und der eineindeutigen Seriennummer ins Netz. Damit sollte nur der passende Knoten in den Konfigurationsmodus wechseln, alle anderen sollten ihn verlassen. Dann schickst Du Deine Konfigurationsdaten per Broadcast und zum Schluss "Konfigurationsmodus aus". So die Idee. Genauso könntest Du Deine Geräte am Bus ermitteln. Broadcast "Identifikation senden", und dann sollten alle Geräte sich mit ihrer Seriennummer melden. Eine eineindeutige Seriennummer kannst Du auch in die vorletzte Page des Flashs (die letzte enthält die Config Words beim PIC) schreiben. Dann musst Du aber Buch führen, und daran denken, dass das Flash beim Neuprogrammieren komplett gelöscht wird. Eine Silicon Serial Number wäre da eine Lösung. Gibts auch mit EEPROM- oder OTP-Speicher. Es gibt von Microchip auch SPI-EEPROMs mit vorprogrammierter MAC-Adresse - da musst Du aufpassen, dass Du die nicht versehentlich löscht. Die Onewire-Dinger sind in dieser Hinsicht idiotensicher. fchk
Ich habe eben und endlich eine Beschreibung meines schon lange laufenden Projektes (Haus- und Gartensteuerung mit einem Can Bus) halbwegs fertig bekommen - auf englisch, aber mit vielen Bildern - das wesentliche sollte mit rudimentaeren Englisch Kenntnissen erraten werden koennen. Das Dokument liegt auf http://cui.unige.ch/~harms/CanSite/CanSite.html Die Beschreibung in dem Dokument ist im wesentlichen als Anregung gedacht fuer jemanden, der auch so etwas machen moechte - Anregung was man machen kann und wie man es machen kann. Juergen
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.