Forum: Mikrocontroller und Digitale Elektronik Atmega mit oder ohne integriertem CAN?


von Olli Z. (z80freak)


Lesenswert?

Für einfache Schalt- und Steueraufgaben am Multimedia CAN im Auto möchte 
ich gern Atmega uC einsetzen, da ich eine Arduino Entwicklunggsumgebung 
habe.
Ich finde hierzu entweder die Kombi ATmega328 mit per SPI 
angeschlossenem MCP2515 und MCP2551, oder abef AT90CAN mit MCP oder TJA 
Transceiver.
Wo genau liegen denn hier die Unterschiede, Vor-/Nachteile?

von Rene K. (xdraconix)


Lesenswert?

Der Unterschied: der per SPI Angeschlossene MCP muss dann händisch per 
SPI abgefragt werden und der AT90CAN hat einen 2.0A/B Receiver direkt an 
Board, da brauchst du keinen MCP / TJA Transceiver.

von Thomas F. (igel)


Lesenswert?

Rene K. schrieb:
> da brauchst du keinen MCP / TJA Transceiver.

Selbstverständlich braucht auch der AT90CAN und ein 16M1 einen 
Transceiver.
Und zwar einen passenden für den Multimedia-CAN, welcher auch ein 
Low-Speed-CAN sein kann.

Die Atmels mit CAN brauchen keinen zusätzlichen CAN-Controller wie 
MCP2515 oder SJA1000. Aber die empfangenen Botschaften müssen ebenfalls 
"händisch" aus den MOBs ausgelesen werden. Man braucht nur keine 
SPI-Schnittstelle dafür.

von Soul E. (Gast)


Lesenswert?

Olli Z. schrieb:

> Wo genau liegen denn hier die Unterschiede, Vor-/Nachteile?

Ein 16bit-Controller mit integriertem CAN kostet in Serienstückzahlen 
unter 70 cent. Ohne CAN 10 cent weniger. Da fängt keiner mehr an, 
irgendwelche externen Bausteine dranzufrickelt.

Im privaten Bereich würde ich es von der Verfügbarkeit abhängig machen. 
Was hast Du da, was kannst Du günstig kriegen? Für den AT90CAN128 gibt 
es tolle Bibliotheken auf kreatives-chaos.com.

von Frank K. (fchk)


Lesenswert?

Außerdem ist SPI ein Flaschenhals, besonders bei hoher Buslast und hoher 
Busgeschwindigkeit (=>viele Pakete). Deswegen und aus Kosten- und 
Platzgründen will man einfach keine externen CAN-Controller haben. Bevor 
jemand im echten Leben einen MCP2515 verbaut, nimmt er für wenig Geld 
mehr einen PIC18, der eine deutlich verbesserte Version des MCP2515 
gleich eingebaut hat, und das ohne SPI-Flaschenhals und ohne zweiten 
Quarz. Deswegen gibts vom MCP2515 auch kein Update und kein Bugfix - es 
lohnt sich einfach nicht. Und der NXP SJA1000 ist jetzt auch fast 20 
Jahre alt.

Wenn Du bei der Arduino-Umgebung bleiben willst: Es gibt zB den Arduino 
Due, Teensy 3.1 (beide ARM) oder Chipkit Max32 (PIC32), die beide 
integrierte CAN-MACs haben. Einen passenden PHY kannst Du einfach selber 
anschließen.

fchk

PS: Falls Du mir immer noch nicht glaubst: Such mal nach CAN FD 
(Flexible Datarate) Controllern. Du wirst keine finden. Wer einen 
braucht, nimmt einen IP-Core und packt das in ein FPGA seiner Wahl. So 
läuft das heute.

von H.Joachim S. (crazyhorse)


Lesenswert?

Naja, habe die SPI in Verbindung mit nem MCP2515 nicht als Flaschenhals 
gespürt. CAN läuft mit max. 1MBit, die SPI kann mit 8MBit betrieben 
werden. Und es werden ja auch nicht alle CAN-Bits auch über die SPI 
übertragen. Dazu einen Int, wenn was empfangen wurde und alles ist gut, 
geht schon.
Besser ist es natürlich einen MC mit internem CAN zu verwenden. Aber 
wenn man schon eine Zielhardware hat, ist der MCP2515 durchaus eine 
Alternative. Und über die Preise der AT90CANxxx sage ich mal lieber gar 
nichts.
Einen zweiten Quarz braucht man auch nicht, kann alles am selben Takt 
hängen.

von Steffen R. (steffen_rose)


Lesenswert?

H.Joachim S. schrieb:
> CAN läuft mit max. 1MBit, die SPI kann mit 8MBit betrieben
> werden. Und es werden ja auch nicht alle CAN-Bits auch über die SPI
> übertragen. Dazu einen Int, wenn was empfangen wurde und alles ist gut,
> geht schon.

Welche Bits des CAN Telegramms willst Du nicht per SPI übertragen? Die 
Stuffbits?
Desweiteren mußt du Registerweise lesen und kannst quasi nicht Bits, die 
dich nicht interessieren, weglassen.
Aber zumindest ist der Befehlssatz des MCP2515 ganz gut hierfür 
optimiert.

von H.Joachim S. (crazyhorse)


Lesenswert?

Start 1bit
CRC 15bit
ACK 2bit
EOF 10bit

Mindestens die erscheinen nicht auf der SPI, wahrscheinlich noch ein 
paar mehr, müsste ich nachschauen. Ist aber egal, wieviele es wirklich 
sind. Auf jeden Fall ist der traffic auf der SPI kleiner als auf 
CAN-Seite und der Bittakt kann deutlich höher sein, also kein 
Flaschenhals.
Meist wird der CAN mit weniger als 1MBit betrieben, entspannt die Sache 
weiter.

von Soul E. (Gast)


Lesenswert?

H.Joachim S. schrieb:

> Meist wird der CAN mit weniger als 1MBit betrieben, entspannt die Sache
> weiter.

Und die Akzeptanzfilter sind im Controller, d.h. man überträgt ohnehin 
nur die Botschaften, die auch ausgewertet werden sollen.

Ändert nichts dran, dass die externen Controller eher eine historische 
Erscheinung sind und heutzutage die internen dominieren.


Microcontroller mit CAN-FD gibt es mindestens von Renesas und Freescale.

von H.Joachim S. (crazyhorse)


Lesenswert?

Richtig, steht auch oben so, besser intern.
Aber wenn man nun an was bestehendes noch den CAN ranbasteln will ist es 
sicher einfacher das per SPI zu machen, als den Controller und die 
Hardware über den Haufen zu werfen.
Insofern - Jacke wie Hose, beides funktioniert, abwägen kann nur der TO.

Und mit sowas
http://www.ebay.de/itm/like/272262661926?lpid=106&chn=ps&ul_noapp=true
ist man schnell und billig dabei, wenn es um ein Einzelstück geht.

: Bearbeitet durch User
von Olli Z. (z80freak)


Lesenswert?

H.Joachim S. schrieb:
> http://www.ebay.de/itm/like/272262661926?lpid=106&chn=ps&ul_noapp=true
> ist man schnell und billig dabei, wenn es um ein Einzelstück geht.
So ein Teil hab ich in der Tat hier und nutze es. Ich denke, wenn ich 
eine eigene Platine entwickeln kann/will, dann wäre durchaus ein uC mit 
integr. CAN sinvoll. Wenn ich bloss Komponenten zusammenstelle, dann ist 
man vermutlich besser mit fertigen CAN-Bausteinen und einem Arduino Nano 
oder sowas bedient.

von Steffen R. (steffen_rose)


Lesenswert?

H.Joachim S. schrieb:
> Auf jeden Fall ist der traffic auf der SPI kleiner als auf
> CAN-Seite und der Bittakt kann deutlich höher sein, also kein
> Flaschenhals.

Genau das Gegenteil behaupte ich. Zumindest ist die Kalkulation sehr 
einseitig.

Z.B. musst Du für eine 11bit ID 16bit lesen/schreiben (+5bit).
Oder auch mal den Status lesen (+24bit)

Und Du kalkulierst, dass der Prozessor bei einem SPI Event dieses 
vorrangig und sofort bedient. Häufig ist Kommunikation aber eher der 
"unwichtige" Teil bei vielen Anwendern.

> Meist wird der CAN mit weniger als 1MBit betrieben, entspannt die Sache
> weiter.

Ja, Kenner der Materie nutzen eine niedrigere Bitrate und nur wenige 
CANIDs. Dann läßt sich schon sehr viel einsparen. Und solange man keine 
Bursts auf dem Bus hat, besteht eh kein Problem.

Meine Erfahrung lehrt aber eher, dass dies nicht gemacht wird. z.B. 
werden fertige Bilbiotheken genutzt. Diese müssen prinzipbedingt 
allgemeingültig sein und daher mehr Daten über den SPI bringen.

Häufig kann man die Leute erst bei Problemen hierauf aufmerksam machen. 
Dann ich es meist zu spät. Und solche Pauschalaussagen (10Mbit > 1Mbit) 
führen aus meiner Sicht zu diesem Irrglauben.

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.