Forum: Mikrocontroller und Digitale Elektronik Verständnisfrage CAN-Bus


von Ithamar G. (antimon)


Lesenswert?

Hallo,

kann mir jemand kurz den Unterschied zwischen den Bauteilen PCA 82C250
und MCP 2515-I/P erklären?

Das eine ist ein Bustreiber/Empfänger und das andere ein CAN-Bus
Controller - so stehts im Wiki.

Nur was macht ein Bustreiber und was ein Controller? Ist der Controller
für die Spannungsversorgung und den "Master" zuständig und der
Bustreiber für die Sensoren/Aktoren? Oder wie habe ich das zu
verstehen?

Wenn ich einen AVR habe, der CAN nicht von Haus aus unterstützt -
welchen der oben genannten Chips brauche ich? Oder brauche ich beide?

Und mit welcher Busspannung arbeitet CAN? Habe ich richtig verstanden,
dass ich diese selbst festlegen kann? Also z.B. 0V=Low, 12V=High?

Bin ein wenig verwirrt, und bitte um Aufklärung ;)

von Rahul D. (rahul)


Lesenswert?

der Bustreiber macht nichts anderes als die Physikalische Ebene. Du
könntest stattdessen auch einen LWL-Treiber (sprich Lichttransceiver)
nehmen. Der 82C250 macht aus dem TTL-kompatiblen Pegel einen
symmetrisches Signal. Man könnte ihn mit dem MAX232 vergleichen vom
Prinzip her; von den elektrischen Eigenschaften natürlich nicht.
Der MCP2515 organisiert die Kommunikation auf dem Bus. im Prinzip
müsste es möglich sein, MCPs untereinander ohne 82C250 zu verbinden
(hab ich nicht ausprobiert, weiß auch nicht ob das wirklich gehen
kann...).
Der MCP kümmert sich um Fehler auf dem Bus und was da noch so alles
passieren kann (natürlich auch Sachen die passieren sollen, wie
Datenübermittlung).
Um zwei CAN-Knoten aufzubauen brauchst du 2 MCP2515 und 2 PCA82C250.
Und natürlich jeweils noch einen µC, der die MCPs ansteuert.

von Ithamar G. (antimon)


Lesenswert?

Ah verstehe - ich brauche beide ICs und wer Master spielt, wird per
Software ausgewählt, da ja auch mehrere Master möglich sind...!?

An den Mikrocontroller werden ja normalerweise keine größeren Ansprüche
gestellt oder? Die CAN-Bausteine verbinde ich mit einem normalen
digitalen Aus-/Eingang des µCs, richtig? Oder müssen das spezielle Pins
sein?

Ich dachte an den Attiny 2313, der ist relativ günstig und sollte
vollkommen langen, wenn ein Node nur ein paar Schalter / Ausgänge
schalten können soll - ansonsten kann ich ja noch per Schieberegister
erweitern... oder spricht was gegen den IC?

von Peter Mahler (Gast)


Lesenswert?

Hallo,

der MCP2515 ist ein SPI-CAN-Controller, daher sollte dein µC einen
SPI-Mastern-Interface haben. Theor. kannst du dass auch in Software
konventionell abbilden, mach aber meiner ansicht nach nicht viel
Freude. Die Alternative dazu ist zum Beispiel ein  SJA1000 (derzeit der
am meisten verwendete CAN-Controller). Der braucht zwar ein paar
Leitungen mehr, dafür bereitet er weniger Probleme im Betrieb und du
findest ein Vielfaches an Doku und Beispielen im Netz.

Die CAN-Transceiver können auch diskret aufgebaut werden. Dies wurde in
der Anfangszeit des CAN-Busses für den sogenannten Low-Speed-CAN auch
recht häufig getan.
Eine andere Variante ist es einen RS485 Transceiver wie den 75176 für
den CAN-Bus zu 'missbrauchen'. Inzwíschen gibt es von Philips auch
sogenannte Singe-Wire-Transceiver mit denen der CAN als Single-Wire-Bus
betrieben werden kann, interessant z.B. für einen Hausbus

Der einfachste und günsigste Weg wird trotzdem ein
Standard-CAN-Transceiver wie der 82C251 bzw. MCP2551 sein.

Gruss,
Peter

von Rahul D. (rahul)


Lesenswert?

Wie Peter schon schrieb: SPI ist von Vorteil.
Guck mal bei microchip.com. Da gibt es eine Application Note mit dem
MCP2515 und einem Achtbein-PIC. Mit dem ASM-Listing lässt sich die
Initialisierung ziemlich gut nachvollziehen.
Wenn du noch weniger Chips pro Platine haben willst, kommst du um einen
µC mit CAN-Kern nicht herum (ist aber wohl auch nicht angedacht...)

Ich hatte mir mal einen CAN-RS232-Umsetzer gebaut. Er bestand aus einem
PCA82C250, einem MCP2515, einem MAX232 und einem ATMega32, der viel zu
groß war. Das lag aber daran, dass der Umsetzer nur eine Teilfunktion
einer grösseren Platine war. Die gröösere Platine hatte neben den
beiden Schnittstellen noch ne Menge Ein- und Ausgänge.
Leider kam es nie über das Entwicklungsstadium hinaus, weil der Aufbau
überdimensioniert war. Inzwischen steuern 2 ATMega32 die Anlage (und
nicht mehr 5 CAN-Knoten...)

von Ithamar G. (antimon)


Lesenswert?

Also eins vorweg - die Anzahl der ICs ist eher nebensächlich, Platz
sollte nicht das Problem sein, und falls es doch mal soweit kommt, kann
man immer noch eine andere Lösung suchen.

Ich möchte die Funktionsweise von CAN erlernen und diesen dann auch bei
mir einsetzen - Hauptsache ist erst mal dass es geht... die Feinheiten
kann man später noch bearbeiten.

Möglichst günstig sollte es obendrein sein - ich würde gerne mehrere
Knoten in den Bus einbauen, wenn die CAN-Bauteile für jeden schon 20
EUR kosten, verdrahte ich das lieber herkömmlich...
Den einzigen CAN-fähigen Controller den ich bei Reichelt finde ist ein
AT90CAN128 für 16,10 EUR - eindeutig zu viel.

Mein Ziel ist es, kleinere Baugruppen an den Bus anzubinden,
beispielsweise 4 Lüfter, die ich getrennt voneinander einschalten
möchte. Oder 3 Temperatursensoren abfragen, oder ein paar Schalter.
Normalerweise nichts allzu aufwändiges, deswegen sollten es möglichst
günstige Komponenten sein - wenn es komplexer wird, darf es auch gern
mal ein besserer IC sein, aber ich brauche keinen ATmega 128 für 4
Schalter ;)

Deswegen dachte ich mir, einen Attiny2313 zu nehmen, den kann ich mit
meinem ISP-Adapter programmieren und der kostet nicht die Welt. Ist der
aber nicht so geeignet, wegen SPI? Ich dachte eigentlich das hat er
(heisst USI - Universal Serial Interface), oder ist das nicht das was
ich suche?

Was gäbe es denn alternativ für Empfehlungen? Einfach zu beschaffen
sollten die Bauteile schon sein (möglichst Reichelt) und am liebsten
AVR oder MSP430 - dafür hab ich die ISP Programmer daheim... und
natürlich günstig.
Später soll es vielleicht mal wachsen und dann ist beispielsweise nur
ein Taster an den Bus zu bringen, das sollte dann von den Kosten her
aber trotzdem bezahlbar bleiben...

von AndreasH (Gast)


Lesenswert?

Der Attiny2313 kann SPI. Laut Datenblatt. Ausprobiert habe ich es noch
nicht.
Habe allerdings genau das gleiche vor. ATtiny2313 mit MCP2515. Weiss
aber noch nicht wann ich dazu komme.
Wenn Du möchtest kannst Du ja mal berichten wie es bei Dir läuft.

Grüße
Andreas

von Ithamar G. (antimon)


Lesenswert?

Mach ich gern, bin schon ganz geil auf CAN ;)

Nachdem wir das bald in der Uni mit einem C164 (der hat CAN schon drin)
besprechen, hat mich das Thema interessiert und jetzt möchte ich das
hier auch nutzen, damit spare ich mir Unmengen an Kabelziehereien...

Nur das mit dem Buspegel ist mir noch nicht ganz klar...

von AndreasH (Gast)


Lesenswert?

Brauchst Du Dich nicht drum zu kümmern. Macht der: PCA82C250 hier.
Nur alle parallel dran hängen und die Abschlusswiderstände nicht
vergessen.
Habe ich gerade mit dem SJA1000 und dem PCA82C250 gemacht. Ging
einwandfrei.

Als nächstes will ich das mit dem MCP2515 machen. Habe aber im Moment
noch keine Zeit dazu.

Grüße
Andreas

von Peter Mahler (Gast)


Lesenswert?

Hallo,

eine weitere Alternative um kleine CAN-Knoten zu realiseren sind die
PIC 18F4x8. Dort ist der CAN-Controller schon auf dem CHIP realisert.
Mangels PIC18-Programmer habe ich diese jedoch noch nicht eingesetzt.

Auf meiner Wunschliste bei Atmel stehet schon lange ein kleiner ATTiny
Controller mit CAN, um einfache CAN-Knoten aufzubauen. Leider scheint
der Atmel-Weihnachtsmann den Wunschzettel nicht zu lesen.

Gruss,

Peter

von crazy horse (Gast)


Lesenswert?

mir wäre es ja schon recht, wenn mal die kleineren CAN32/CAN64 kommen
würden (so sie denn billiger sind), den 128er habe ich noch nie
nennenswert füllen können :-)

von Ithamar G. (antimon)


Lesenswert?

Ausserdem ist ja noch nicht Weihnachten ;)

Aber mit über 16 EUR ist der von Reichelt mir viel zu teuer - totaler
Overkill, den Speicher brauch ich ned...

Das SPI Interface wird aber doch auch vom ISP-Programmer verwendet
oder? Aber es geht dass ich den 2515 per Chip Select deaktiviere, dann
brauch ich die Pins nicht abkoppeln, richtig?

Und wenn ich die Reset-Leitung des Attiny dafür verwende, brauch ich im
Prinzip nicht mal eine aufwändige Beschaltung, oder?

Im Normalfall wird doch der Reset-Pin des AVR durch einen Pullup auf
High gezogen, da der Reset-Eingang invertiert ist, wird er dadurch auf
Normalbetrieb geschalten. Wenn ich den Chip Select des 2515 mit dem
Reset-Pin des AVR verbinde, sind beide im Normalbetrieb auf High,
sobald der ISP-Programmer den Reset auf Low zieht, wird der Chip Select
auch auf Low gezogen und der 2515 somit deaktiviert.

Stimmt mein Gedankenexperiment oder hab ich irgendwo einen Denkfehler
drin?

von mthomas (Gast)


Lesenswert?

Wenn recht erinnert, ist der MCP2515 ebenfalls im "Reset" wenn Pin
"high". Dann koennte man auch beide "Resets" verbinden. Atmel
empfiehlt den SPI Bus bei Verwendung der
ISP/SPI-Programmierschnittstelle ueber  Widerstaenden an die weiteren
Busteilnehmer zu binden (Hardware Design AppNote bei atmel.com).
Schaltplan meines - sicher nicht perfekten aber funktionierenden -
Aufbaus: http://www.siwawi.arubi.uni-kl.de/avr_projects/can/index.html.
Hatte damit bisher keine Probleme beim "flashen".

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.