CAN- als Haus-Bus

Gast #1922699
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
Gast #1922736
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.
Gast #1923084
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.
Gast #1923302
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...
(Firma: EleLa - www.elela.de) #1923384
Lesenswert?

Gibts hier:
http://search.digikey.com/scripts/DkSearch/dksus.dll?vendor=0&keywords=AMIS42770

Und hier:
http://de.farnell.com/on-semiconductor/amis42770icaw1rg/ic-can-txrx-1mbps-1-1-5-25v-soic/dp/1641442?Ntt=AMIS42770

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.
Gast #1934142
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.
#1934186
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?
Gast #1934416
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.
(Firma: EleLa - www.elela.de) #1936853
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)
Gast #1937946
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. :-(
Gast #1943305
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).
#1943316
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.
#1943321
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
#1943350
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.
(Firma: EleLa - www.elela.de) #1943730
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.
Angehängte Dateien:
Gast #1965764
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren