www.mikrocontroller.net

Forum: Haus & Smart Home CAN- als Haus-Bus


Autor: Michael S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo liebe Forenmitglieder,

In meinem kleinen Hausbus (bisher I2C und völlig ungeeignet) möchte ich 
nun endgülig auf ein einfachereres Bussystem umsteigen. CAN scheint mir 
da fast das richtige zu sein, da schön einfach und fehlerquellenfreier.
Die Sache hat nur einen Haken deren Lösung mir nicht bekannt ist. Es 
muss allerdings eine Lösung geben, da scheinbar einige von euch CAN im 
Hausbus nutzen.

also FRAGE:
Welche Topologie nutzt ihr, dass ihr den CAN-bus in euer Haus bringt?
CAN schreibt ja quasi eine Linientopologie mit Abschlusswiderständen 
vor.
Im Haus kann ich aber quasi nur Baumtopologien verwirklichen...
Wie soll das laufen? die 120Ohm Abschluss-Widerstände aufteilen in 
mehrere größere?
Oder schafft ihr das wirklich mit einer Linientopologie?

Vielen Dank
Michael

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gibt HUB Chips für den CAN Bus, z.B. AMIS42700 von ON Semi, mit denen 
Du verschiedene CAN-Segmente designen kannst. Damit kannst Du auch eine 
Stern-Topologie verwirklichen. Aber auch hier gilt die Regel jedes 
Segment ordnugsgemäss mit einem Widerstand zu terminieren.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Adern und Länge reichen kann man einen Kabelstern auch so legen, 
dass es exakt 2 Enden gibt. Ein Aderpaar hin und eins wieder zurück.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Linientopologie muss sein.
Wir haben, aufgeteilt in mehrere Stränge mit dem AMIS Chip, bereits über 
400 CAN Knoten vernetzt. Mehrere km Kabel.
Und es geht!

Autor: Praxis fehlt (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es gab von Maxim, glaube ich, mal eine App. Note wie die Widerstände 
aufgeteilt werden muessen, damit du wieder 60Ohm auf dem Kabel hast, 
sprich Sterntopo. Mehr kann ich dir dazu aber auch nicht berichten, es 
soll aber "theoretisch" funktionieren.

Autor: Michael S. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hmm wie löse ich denn mein Problem?

diese AMIS42700 hab ich jetzt bei keiner meiner Bezugsquellen gefunden, 
wobei mir das auch nicht ganz gefällt für quasi jeden Knoten einen 
Verteiler zu brauchen...

Es muss doch irgend einen simplen, bezahlbaren, mulimasterfähigen Bustyp 
geben den man in Baumstrukturen bringt!
Mit simpel meine ich etwas in Richtung CAN-einfachheit.
Und bezahlbar heißt unter 5€ pro Knoten...

Kann ich durch begrenzen der Baudrate da was machen? ich wüsste eh keine 
großen Datenmengen die über den Bus müssten...

Autor: Ein unbekannter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Erfahrungen sind nur mit Einfamilienhäusern gesammelt, aber mit 
ein paar Anpassungen von Baudrate und ein bißchen probieren mit dem 
Widerstand ging es.
Hier spricht auch ein Anwender:
http://koervernet.de/joomla1.5/index.php?option=co...

Welche Topologie hast du denn?

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibts hier:
http://search.digikey.com/scripts/DkSearch/dksus.d...

Und hier:
http://de.farnell.com/on-semiconductor/amis42770ic...

Probiere mal das mit CAN und Stern mit 20KBaud.
Wenn es nicht geht, kannst Du einen AMIS dazwischen schalten. Wenn der 
nicht zum Auftreiben ist eine CPU mit 2x CAN und die Telegramme mit ein 
wenig Software hin und her auf die Bus-Stränge kopieren.

Autor: theo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: NochAmBasteln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also ich habe hier ein Hausbus-System in der Entwicklung, das Routing 
beherrscht, sodass du einfach mehrere Linienbusse vernetzen kannst.
So hat man wirklich von einander unabhängige Segmente, zwischen denen 
man allerdings trotzdem kommunizieren kann. Das funktioniert auch 
soweit, inklusive Bootloader.

Was mir bisher mehr Sorgen macht, ist der Stromverbrauch: Bisher bin ich 
bei ca. 100 mW pro Knoten, mit ein wenig Arbeit schaffe ich wohl auch 
noch ca. 60 mW/Knoten. Ist irgendwie immer noch viel, dafür, dass der 
Knoten eigentlich nichts tut. Dummerweise kann man den Stromsparmodus 
beim von mir eingesetzten MCP2515 nicht nutzen, weil man dann laut 
Datenblatt das Frame verliert, das ankommt während der MCP2515 schläft.

Daher ist eine Idee, eventuell "dumme" Knoten einzuführen, die kein CAN 
benutzen und schon daher weniger Strom brauchen.

Autor: Horst Hahn (horha)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

im Forum gab es mal eine  Liste oder einen Hinweis darauf, wieviele und 
dann wie lang, die Ableger/Stichleitungen beim CAN.-Bus sein durften.
http://www.opendcc.de/info/can/can_info.html dort Netztopologie, Längen, 
Reflexionen steht ja eine Datei 
http://focus.ti.com/lit/an/slla270/slla270.pdf von TI mit 5 m ist dort 
eine Stichleitung angegeben.Wenn aber eine Buchsen/Stecker Kombination 
it 3m gerechnet wird, kommat man nicht wirklich weit.


@NochAmBasteln:
wenn der schlafende Empfänger nicht quittiert, wird doch nochmal 
gesendet oder nicht, oder wohl, oder doch?

Autor: NochAmBasteln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Horst Hahn schrieb:
> @NochAmBasteln:
> wenn der schlafende Empfänger nicht quittiert, wird doch nochmal
> gesendet oder nicht, oder wohl, oder doch?

Eine zuverlässige Nachrichtenverteilung mit Rückmeldung hatte ich zwar 
zuerst vor, allerdings ist CAN zum einen sehr zuverlässig,
und zum anderen kann man davon ausgehen, dass jeder Knoten, den man 
ansprechen möchte, schläft. Dadurch würden die Nachrichten in jedem Fall 
doppelt versendet werden, was auch unelegant ist.
Implementiert sind beide Protokolle, aktuell wird aber das nicht 
zuverlässige genutzt.
Denn das zuverlässige erlaubt nur Punkt-zu-Punkt-Verbindungen, und das 
ist nicht genug, weil oftmals mehr als ein Knoten angesteuert werden 
muss.
Sowas wird aktuell als Broadcast auf Linienebene oder global gemacht, 
einfach und schmerzlos, aber ohne Möglichkeit, dass jeder Empfänger 
quittiert.
Das ganze sequentiell anstatt per Broadcast zu machen, wäre zwar 
möglich, aber doch sehr mühsam.

Und es wäre wohl viel eleganter, wenn der MCP2515 einen Schlafmodus 
hätte, wo der Quarz läuft und nur Teile des Chips schlafen, bis 
Aktivität auf dem Bus erkannt wird. Und dann sollte man doch wohl 
schnell genug aufwachen können. Kennt jemand zufällig einen 
Mikrocontroller oder CAN-Controller, der sowas beherrscht?
Also außer AT90CAN*, der braucht schon im IDLE-Modus mehr Strom als mein 
ATmeta644 (IDLE) + MCP2515 (aktiv) zusammen.

Autor: Markus Müller (mmvisual)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schaue mal in das Datenblatt vom STM32F103. Lasse den gemütlich mit 8MHz 
ohne PLL laufen. Alle Pheriperieeinheiten kann der Clock einzeln 
zugeschaltet werden.
Schaue mal hier, Artikel: STM32

Ich habe mir eine Heizungssteuerung gebaut, mit CAN-Displays in der 
Wohnung:
Beitrag "Re: Heizungssteurung im Eigenbau"
(Und der STM32 ist drin verbaut)

Autor: NochAmBasteln (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Markus Müller schrieb:
> Schaue mal in das Datenblatt vom STM32F103. Lasse den gemütlich mit 8MHz
> ohne PLL laufen. Alle Pheriperieeinheiten kann der Clock einzeln
> zugeschaltet werden.
> Schaue mal hier, Artikel: STM32

Das gucke ich mir mal an, sieht wirklich vielversprechend aus. Danke.
Wird wohl langsam Zeit, auch für die Hobby-Projekte auf ARM-Kerne 
umzusteigen. Nur schade, dass man dann seinen Code schwer mitnehmen kann 
auf die neue Plattform. :-(

Autor: dridders (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche Bitrate faehrst du denn mit dem MCP? Ich hab meinen Bus auf 
20kBit am Laufen, zuerst alle Pakete einfach 3fach nacheinander gesendet 
um mit den ersten beiden die Knoten aufzuwecken (Alternativ nutzloses 
Wakeup-Paket vorwegschicken wenn die Events nicht mehrfach auftreten 
duerfen), inzwischen ist das rausgeflogen und ich sende nur einfach... 
weder die MCPs im Sleep-Mode noch der 90CAN128 im PowerDown-Mode haben 
ein Problem damit bereits das erste Paket zu empfangen, da die 
Arbitrierungsphase bei 20kBit fuer den Chip wohl gefuehlt 1 Jahr lang 
ist ;-)
Der Bus selbst ist einfach als Pseudo-Stern aufgebaut, also zu jedem 
Knoten CAN-L/H-hin und CAN-L/H-rueck, also halt 6 statt 4 Leitungen 
(incl. Versorgung).

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dridders schrieb:

> 90CAN128 im PowerDown-Mode

Also mit abgeschaltetem Oszillator? Mir schiene da eher der StandBy 
Modus mit laufendem Oszillator angebracht, vorausgesetzt der hat den.

Autor: A. K. (prx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
NochAmBasteln schrieb:

> Nur schade, dass man dann seinen Code schwer mitnehmen kann
> auf die neue Plattform. :-(

Wenn man den richtig schreibt, dann kann man bei bei nicht zu kleinen 
Projekten durchaus einiges mitnehmen.

Ich habe beispielsweise einen eigenen CAN Layer, der nach oben hin auf 
AVR+MCP2515, PIC16F258, LPC2119, STM32 und Windows (via 
FTDI/AVR/MCP2515) ziemlich gleich aussieht. Eine darauf laufende 
Anwendung ist dann nicht mehr von den Fisematentchen dieses Teils der 
Hardware abhängig.

Autor: Tino Frank (pepito)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen, ich will Timer lernen, aber weiße noch nicht wie man das 
programmieren kann, also ich habe ein Programme geschrieben und weiße 
nicht ob es gut laufen kann.

Also was sollt das Programm Machen
Der Timer arbeitet in Up-Modus
Der Timer wird beim Systemstart mit einer Zeit von 1,0 Sekunden
initialisiert werden.
P1.0  Startet den Timer
P1.1  Erhöht den Takt um 1s
P1.2  Verringert den Takt um 1s,

ich habe versucht so zu programmieren, kann mir jemand sagen ob es gut 
programmiert ist??

TIMER_A_Init
             MOV #TACLR,&TACTL   ; S e t z t Timer A B i t s z u r ü c k
             MOV #TASSEL_1+ID_4+MC_1+TAIE ,&TACTL ; T a k t q u ell 
ACLK

Start Timer  MOV #0x2000 ,R5  ; Entspricht 1s
                      MOV #R5 ,&TACCR0  ; Entspricht 1s
ENDE TIMER_A_Init


P1_ISR
       BIT.B #BIT0 ,& P1IFG       ;  I n t e r r u p t von P1.0 
ausgelöst?
       JNZ  ja weiter bei Start Timer
LOOP2  BIT.B #BIT1 ,& P1IFG;I n t e r r u p t von  P1.1 a u s g e l ö s 
t ?
       JZ LOOP1, Nein Weiter bei LOOP1
       ADD R5, R5
       MOV #R5 ,&TACCR0
       BIC.B #BIT1 ,& P1IFG       ; L ö s c h e P1.1 im F l a g −
       RETI


LOOP1  BIT.B #BIT2 ,& P1IFG; I n t e r r u p t von P1.2 a u s g e l ö s 
t ?
       JZ LOOP2
       SUB R5, R5
       MOV #R5 ,&TACCR0
       BIC.B #BIT2 ,& P1IFG       ; L ö s c h e P1.2 im F l a g −
       RETI

ENDE P1_ISR

Autor: dat dridders (dridders)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
A.K.
ja, mit abgeschaltetem Oszillator, denn die anderen Modi kann man sich 
bei dem Chip auch schenken, solange der Oszi noch laeuft braucht der 
Unmengen. RX vom CAN-Transceiver hab ich auf einen der INT-Eingaenge 
gelegt, durch die erste Flanke wird der Chip dann aufgeweckt und im 
wachen Zustand gehalten bis das Paket da ist.
Wichtig ist natuerlich auch direkt den Transceiver aus dem Sleep-Mode zu 
holen, sonst kann der Controller kein ACK senden und der Bus zaehlt 
froehlich seine Fehler hoch.

Autor: Markus Müller (mmvisual)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mein Bus geht mit 20 KBit durchs Haus.

4 Drähte, CAN und Versorgungsspannung 24V. Es bis jetzt nur die 
Heizungssteuerung mit zwei Display-Einheiten und einer 
Analog-Messwertplatine dran. Alle Einheiten beziehen den Strom aus der 
24V Versorgung, Batteriegepuffert. Denn da wo ich wohne ist Stromausfall 
jederzeit möglich.

Anbei ein paar Bilder der Display-Einheit (mit STM32F103).
Eingebaut habe ich die Teil-Bestückte Variante.
Vollbestückt hat noch einige Extras wie Echtzeituhr, COM-Port, Relais, 
Stiftleisten mit Signalen und Analogeingänge, Feuchte/Temperatur Sensor, 
EEPROM.

Autor: tacke (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn's nicht auf die Geschwindigkeit ankommt wäre LIN velleicht noch 
eine alternative. Da es als Eindrahtbus konzipiert ist reicht 
(theoretisch) eine Leitung und Masse, wobei es sicher nicht schadet 
alles auf eine gemeinsame Masse zu ziehen.
Weiß jemand welche Kabellängen bei den typischen LIN Geschwindigkeiten 
19.2kbaud bis 2.4k möglich sind?
Kenne es nur aus dem Fahrzeug und da sind es eben nur ein paar meter bei 
19.2kbaud.

Autor: Ein (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

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.