Forum: Mikrocontroller und Digitale Elektronik Can bus ohne Can-fähige Controller


von Heizer (Gast)


Lesenswert?

Hallo Leute,

ich habe da ein Verständnisproblem.

Ganz vereinfacht gesagt besteht ein Can-Protokoll ja aus High- bzw. Low 
Pegeln. (Signale).
Mit einem stinknormalen uC mit DIO kann man doch auch High- und Low 
Signale senden (zumindest an die Leitung an legen)
Warum braucht man dann ein CAN-Transceiver oder Can-Controller oder 
sonst wie die heissen. (Sorry ich kann die zwischenbausteine nicht 
richtig zuordnen)??

danke im Voraus

von Erich (Gast)


Lesenswert?


von Peter D. (peda)


Lesenswert?

Vermutlich soll ein MC ja noch andere Sachen machen und nicht nur zu 99% 
im CAN-Protokoll rödeln.

von Max H. (hartl192)


Lesenswert?

Heizer schrieb:
> Warum braucht man dann ein CAN-Transceiver
Um die Signale physikalisch dem CAN Bus anzupassen. Pegel, 
differentielle Signale
> oder Can-Controller
Der nimmt dem µC einen Großteil der Arbeit ab. Wenn der µC schnell genug 
ist und du genug Ahnung hast kannst du es auch in Software 
implementieren.

von Christopher (Gast)


Lesenswert?

Weil die High- und Low-Pegel beim CAN eben überhaupts mit den High- und 
Low-Pegeln am Mikrocontroller-Ein-Ausgang gemeinsam haben.

Diese Anpassung ist die Aufgabe des CAN-Transceivers (Spannungen des 
Mikrocontrollers an die Spannung des gewählten CAN-Busses anpassen).

Der CAN-Controller ist der Teil der die Logik macht. Also 
Bitreihenfolge, Arbitrierung, Stuff-Bits einfügen und wegnehmen, CRC, 
Timing, Synchronisation ...

von Le X. (lex_91)


Lesenswert?

Denke schon dass auch ein MegaAVR das CAN Protokoll in Software 
nachbilden kann. Bei UART klappts ja auch. Highspeed-CAN liegt mit 
500kBit ca. um Faktor 4 höher. Bei 20MHz hast du also 40 Takte pro Bit. 
In Assembler auf jeden Fall machbar, in C evtl auch.

Allerdings gibt es auch Mittelwege: CAN-Transceiver, die per SPI 
angebunden werden. Auch wenn ich da grade keinen CAN.
Und SPI kann der Atmel ja in Hardware, also praktisch "nebenbei".

von Heizer (Gast)


Lesenswert?

Max H. schrieb:
> Heizer schrieb:
>> Warum braucht man dann ein CAN-Transceiver
> Um die Signale physikalisch dem CAN Bus anzupassen. Pegel,
> differentielle Signale
>> oder Can-Controller
> Der nimmt dem µC einen Großteil der Arbeit ab. Wenn der µC schnell genug
> ist und du genug Ahnung hast kannst du es auch in Software
> implementieren.

Christopher schrieb:
> Weil die High- und Low-Pegel beim CAN eben überhaupts mit den High- und
> Low-Pegeln am Mikrocontroller-Ein-Ausgang gemeinsam haben.
>
> Diese Anpassung ist die Aufgabe des CAN-Transceivers (Spannungen des
> Mikrocontrollers an die Spannung des gewählten CAN-Busses anpassen).
>
> Der CAN-Controller ist der Teil der die Logik macht. Also
> Bitreihenfolge, Arbitrierung, Stuff-Bits einfügen und wegnehmen, CRC,
> Timing, Synchronisation ...

danke schön. das nenne ich Hilfe. Statt einfach einen WIki Artikel zu 
posten.

von Peter II (Gast)


Lesenswert?

le x. schrieb:
> In Assembler auf jeden Fall machbar, in C evtl auch.

UART ist aber wesentlich einfacher.

Bit Stuffing und CRC gibt es dort nicht. Klar könnte man das Paket 
vorher komplett berechnen und dann "nur" senden, was aber dann nicht 
mehr sehr schnell sein wird.

von Heizer (Gast)


Lesenswert?

le x. schrieb:
> Denke schon dass auch ein MegaAVR das CAN Protokoll in Software
> nachbilden kann. Bei UART klappts ja auch. Highspeed-CAN liegt mit
> 500kBit ca. um Faktor 4 höher. Bei 20MHz hast du also 40 Takte pro Bit.
> In Assembler auf jeden Fall machbar, in C evtl auch.
>
> Allerdings gibt es auch Mittelwege: CAN-Transceiver, die per SPI
> angebunden werden. Auch wenn ich da grade keinen CAN.
> Und SPI kann der Atmel ja in Hardware, also praktisch "nebenbei".

moment. vestehe ich das jetzt richtig?
Can Controller kann man in Software realisieren. Can Transciever auch?

von Max H. (hartl192)


Lesenswert?

Heizer schrieb:
> Can Transciever auch?
Nimm das Datenblatt deines µC und studiere ob die IOs den physikalischen 
Anforderungen das CAN Buses genügen.

von (prx) A. K. (prx)


Lesenswert?

Heizer schrieb:
> Can Controller kann man in Software realisieren. Can Transciever auch?

Dank der elektrischen Definition vom Interface gehts bei CAN schlecht 
ohne Transceiver. RS232 geht ja auch nicht ohne RS232-Bausteine wie 
MAX232.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Heizer schrieb:
> Can Controller kann man in Software realisieren. Can Transciever auch?

 Und warum sollte man so etwas machen ?
 Was ist mit Pegel, Kurzschluss ?
 CAN-Controller ist machbar, wenn auch wenig sinnvoll, aber uC ohne
 Transceiver an CAN Bus dranzuhängen ist Blödsinn.

von c-hater (Gast)


Lesenswert?

Peter II schrieb:

> UART ist aber wesentlich einfacher.

Das ist unbestreitbar.

> Bit Stuffing und CRC gibt es dort nicht.

Stimmt. Aber z.B. bei USB (LowSpeed=1,5MBit/s), also dem Dreifachen von 
CAN. Und selbst da schafft es ein AVR, Bitstuffing und CRC in Echtzeit 
zu behandeln, nix mit vorberechneten Paketen. Jedenfalls ab ca. 18MHz 
Takt.

Bei einem Drittel der Bitrate rutscht die Sache in Bereiche, die sogar 
in (fast) purem C machbar wären.

von Heizer (Gast)


Lesenswert?

Ok jetzt ist mir die sache klar geworden(vermute ich)

also so ist die Kommuniklation aufgebaut:



uC[Master]--Can-Contr.--Can-Trans.--
---Can-Leitung---Can-Trans.--Can.Contr.--uC [Master/Slave]

von Ulrich P. (uprinz)


Lesenswert?

Korrekt.

Wobei es uC und CAN-Controller schon in einem Chip gibt, etwa die 
AT90CAN oder STM32F1xx Chips und viele andere auch.

Gruß
Ulrich

von Peter D. (peda)


Lesenswert?

le x. schrieb:
> Bei 20MHz hast du also 40 Takte pro Bit.

Das reicht bei CAN nicht, die Teilnehmer müssen sich auf den Bitanfang 
synchronisieren können. Dazu unterteilen sie ein Bit in mindestens 8, 
besser 16 Slots. Quasi wie eine UART auf das Startbit synchronisiert.

Ein CAN-Controller braucht für 1MBit mindestens einen 8MHz Quarz.
Eine SW-Lösung wird deshalb kaum unter 80MHz gehen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

Peter Dannegger schrieb:
> Ein CAN-Controller braucht für 1MBit mindestens einen 8MHz Quarz.
> Eine SW-Lösung wird deshalb kaum unter 80MHz gehen.

 Üblich sind aber 250Kb und 500Kb. Also hat man schon bei 20MHz etwa
 40Cy/bit und das bei der schnelleren Variante.
 Da kann höchstens die Adressdekodierung einen TINY4313 z.B. zum
 Schwitzen bringen, aber Bit-stuffing und anderes mit Sicherheit nicht.
 Ob der AVR dann auch noch was anderes und sinnvolles machen kann,
 ist eine andere Frage.

: Bearbeitet durch User
von Die Welt geht vor die Hunde (Gast)


Lesenswert?

Marc Vesely schrieb:
> Peter Dannegger schrieb:
>> Ein CAN-Controller braucht für 1MBit mindestens einen 8MHz Quarz.
>> Eine SW-Lösung wird deshalb kaum unter 80MHz gehen.
>
>  Üblich sind aber 250Kb und 500Kb. Also hat man schon bei 20MHz etwa
>  40Cy/bit und das bei der schnelleren Variante.
>  Da kann höchstens die Adressdekodierung einen TINY4313 z.B. zum
>  Schwitzen bringen, aber Bit-stuffing und anderes mit Sicherheit nicht.
>  Ob der AVR dann auch noch was anderes und sinnvolles machen kann,
>  ist eine andere Frage.

wäre ja im Falle nicht wichtig, wenn z.B. ein 328p als vorgelagerter 
CAN-Baustein funktioniert und sonst nicht viel zutun hätte. Ob das dann 
preislich viel Sinn macht steht auf einem anderen Blatt.

von (prx) A. K. (prx)


Lesenswert?

Für CAN in Software benötigt man letztlich einen recht schnellen Core, 
der nur für den CAN Bus arbeitet, ohne störende Interrupts. Damit der 
nicht durch Kommunikation mit dem Rest des Systems gestört wird muss das 
also eine Art I/O-Prozessor sein, der ins Gesamtsystem eingebettet ist.

Damit kommt als ein vorgelagerter AVR kaum in Frage. Denn wenngleich 
sich der vielleicht mit einem langsamen CAN Bus abmühen kann, würde er 
mit dem Hauptsystem nicht kommunizieren können ohne CAN zu 
vernachlässigen.

In Frage kommt das in Multiprozessorumgebungen, deren einzelne 
Prozessoren für I/O-Aufgaben optimiert sind. Die deshalb keine 
spezialisierten Hardwaremodule für allerlei I/O enthalten, wie CAN 
Controller, sondern genug I/O-Prozessoren, um solche Hardwaremodule 
durch Software zu ersetzen.

Eine solche Konstellation findet man beispielsweise im Parallax 
Propeller und bei XMOS. Auf diese Weise kann ein nicht zu kleiner XMOS 
Controller auch Ethernet in Software anbinden.

Aber natürlich stellt sich die Frage, ob sich das wirklich lohnt. Es 
gibt genug billige Mikrocontroller mit integriertem CAN, deren CAN schon 
fix und fertig funktioniert. Nicht erst nach langer Programmierarbeit.

: Bearbeitet durch User
von chris_ (Gast)


Lesenswert?

A.K., Du hast es wie immer gut und präzisse auf den Punkt gebracht.

Wenn man sich sehr anstrengt, wären vielleicht dennoch etwas 
grenzwertige Sachen ähnlich diese Implementierung hier möglich:
http://www.youtube.com/watch?v=m4f4OzEyueg

von Fabian F. (fabian_f55)


Lesenswert?

CAN in Software zu Realisieren ist Mühselig und fehleranfällig. Steht 
auch in keinen Verhältnis zu dem Mehrpreis eines  µC der das von haus 
aus kann.

Die CAN Pegel sind bei einem 5V system 5V und 0V für Daten und 2,5V für 
Idle-mode. Wenn du das also ohne weitere Komponenten wie Tranciver 
machen willst brauchst du auch noch DACs und ADCs.

Außerdem schützt der Transciever den µC vor unschönen Sachen die auf der 
Busleitung kommen können. Die meisten Tranciever können Spannungsstöße 
in kV-Bereich ab. Da macht dein µC schon lange die Grätsche.

von H.Joachim S. (crazyhorse)


Lesenswert?

Es geht mehr um den Controller als um den Transceiver.
Ich persönlich würde da keine 5min dran verschwenden, dass irgendwie in 
Software zu realisieren - nicht alles was geht, ist auch sinnvoll. 
Dinge, die man für kleines Geld jederzeit kaufen kann und darf, macht 
man nicht selbst, nichtmal beim Hobby (wenn es um echtes Geld geht 
sowieso nicht). Ich habe bei mir zu Hause ein inzwischen gut gewachsenes 
CAN-Netz, das macht auch Spass, aber auf die Idee das auch mit 
Controllern ohne CAN zu machen wäre ich niemals gekommen. Ich finde es 
auch wenig spannend, zu versuchen das in Software nachzuklimpern. 
Vielleicht schafft man es, wahrscheinlich eher nicht, weil man 
irgendwann einsieht, das selbst der Erfolgsfall zu wenig Nutze ist 
(ausser fürs Ego vielleicht). Wir leben so schön und so komfortabel, 
weil wir die Sachen nutzen, die andere vor uns schon gemacht haben und 
netterweise zur Verfügung stellen. Also nehmen.

von Marc V. (Firma: Vescomp) (logarithmus)


Lesenswert?

H.Joachim Seifert schrieb:
> Ich persönlich würde da keine 5min dran verschwenden, dass irgendwie in
> Software zu realisieren - nicht alles was geht, ist auch sinnvoll.

 Versteht sich von selbst, stimme ich dir zu.

A. K. schrieb:
> Aber natürlich stellt sich die Frage, ob sich das wirklich lohnt. Es
> gibt genug billige Mikrocontroller mit integriertem CAN, deren CAN schon
> fix und fertig funktioniert. Nicht erst nach langer Programmierarbeit.

 Versteht sich von selbst, stimme ich dir zu.

Fabian F. schrieb:
> Außerdem schützt der Transciever den µC vor unschönen Sachen die auf der
> Busleitung kommen können. Die meisten Tranciever können Spannungsstöße
> in kV-Bereich ab. Da macht dein µC schon lange die Grätsche.

 Versteht sich von selbst, stimme ich dir zu.

von Harry (Gast)


Lesenswert?

Und natürlich ist jegliches weiteres Nachdenken über eine 
Software-CAN-Controlelr ab hier verboten. Wo kämen wir denn da hin, wenn 
jetzt jemand hier noch kreativ wird.

von H.Joachim S. (crazyhorse)


Lesenswert?

Wieso das denn? Ich kann mir gut vorstellen, dass das einige schon 
versucht haben und auch weiterhin versuchen werden.  Ne tatsächlich 
funktionsfähige Lösung habe ich noch nicht gesehen.
Wenn überhaupt, wäre es ja nur für die kleinen Controller nützlich. Bei 
den grösseren Teilen kann man eigentlich immer einen mit CAN on chip 
auswählen, kostet deswegen auch nicht mehr.
Und gerade bei den kleinen hat man dann wieder das Problem, dass das 
Kerlchen alleine damit ziemlich ausgereizt ist was die Rechenzeit 
betrifft. Kostet auch einiges an Programmspeicher, auch nicht gerade in 
Hülle und Fülle vorhanden.
Vielleicht macht es Sinn, nur Teillösungen zu programmieren (den listen 
only mode z.B.), das kann man sicher gut machen. Man braucht sich nicht 
um Arbitrierung, active/passiv-error frame, overload frame oder remote 
request zu kümmern. Man bekommt alle Daten und kann damit Aktoren 
steuern.

von (prx) A. K. (prx)


Lesenswert?

Und irgendwo ins CAN stopfst du ein einzelnes echtes Dummy-CAN, damit 
sich wenigstens einer die Mühe macht, die Frames des Masters zu 
acknowledgen.

Bloss: Wieso dann CAN? Das geht mit unidirektionalem RS422/485 leichter.

: Bearbeitet durch User
von Sven (Gast)


Lesenswert?

Also ich denke es gibt durchaus Anwendungen für solch einen Soft-Can:
* Bewusst Busfehler erzeugen um Stabilität zu testen
* Debugging auf Bit-Ebene
* Fehler herausfinden, was dort passiert ist.

von Dr. Sommer (Gast)


Lesenswert?

Sven schrieb:
> Also ich denke es gibt durchaus Anwendungen für solch einen Soft-Can:
> * Bewusst Busfehler erzeugen um Stabilität zu testen
> * Debugging auf Bit-Ebene
Um seine anderen Software-CAN-Implementationen zu testen? :D
> * Fehler herausfinden, was dort passiert ist.
Dafür gibts Logic-Analyzer, DSO's, und fertige CAN-Analyzer/Interfaces.

von Pit (Gast)


Lesenswert?

Das macht aus meiner Sicht auch keinen Sinn. Natürlich kann man CAN in 
Software realisieren aber warum?
Will man eine Kommunikation zwischen verschiedenen Geräten aufbauen, 
kommt man um den CAN Tranceiver nicht herum. Egal ob als einzelner Chip 
oder im µC integriert.
Zum Testen vom CAN würde ich auch auf ein fertiges Interface 
zurückgreifen. Wir haben mal einen rudimentären Klon vom CANalyzer und 
CANape gebaut. Für kleine Tests geht das mal aber für mehr auch nicht. 
Vor allem weil man dann immer mehr Features möchte und dann geht die 
Entwicklungszeit quasi ins Unendliche....
Es hat schon seine Berechtigung, dass es Firmen gibt, die sich nur mit 
Hard- und Software für CAN ( und natürlich auch andere Protokolle ) 
auseinandersetzen. Oberflächlich betrachtet ist CAN auch easy: 8 
Datenbyte, Priorisierung durch ID, Übertragungsrate auswählen, 
Leitungslänge beachten und den Bus terminieren. Geht man ins Detail wird 
das ganze dann doch Umfangreicher durch Sachen wie Arbitrierung, 
Bit-Stuffing, CRC....

von Fabian F. (fabian_f55)


Lesenswert?

H.Joachim Seifert schrieb:
> Wieso das denn? Ich kann mir gut vorstellen, dass das einige schon
> versucht haben und auch weiterhin versuchen werden.  Ne tatsächlich
> funktionsfähige Lösung habe ich noch nicht gesehen.
> Wenn überhaupt, wäre es ja nur für die kleinen Controller nützlich. Bei
> den grösseren Teilen kann man eigentlich immer einen mit CAN on chip
> auswählen, kostet deswegen auch nicht mehr.
> Und gerade bei den kleinen hat man dann wieder das Problem, dass das
> Kerlchen alleine damit ziemlich ausgereizt ist was die Rechenzeit
> betrifft. Kostet auch einiges an Programmspeicher, auch nicht gerade in
> Hülle und Fülle vorhanden.
> Vielleicht macht es Sinn, nur Teillösungen zu programmieren (den listen
> only mode z.B.), das kann man sicher gut machen. Man braucht sich nicht
> um Arbitrierung, active/passiv-error frame, overload frame oder remote
> request zu kümmern. Man bekommt alle Daten und kann damit Aktoren
> steuern.

So was habe ich mal gemacht. Wir mussten bei einem Produkt im nachhinein 
auf CAN umsteigen, weil SPI durch EM-Dreck gestört war. Ein µC konnte 
von haus aus kein CAN und war auch nicht ersetzbar. Hier haben wir per 
Software eine Art Soft-CAN geschrieben, der sich einzelne Bytes vom Bus 
geholt hat. Gesendet hat der selber nix. Und dass war schon ein riesen 
Aufwand. Insbesondere QC.

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Heizer schrieb:
> Mit einem stinknormalen uC mit DIO kann man doch auch High- und Low
> Signale senden (zumindest an die Leitung an legen)

Sehe ich das richtig, dass Daten nur gesendet werden sollen? Das geht 
meiner Einschätzung nach ohne größere Probleme mit einem ganz einfachen 
Mikrocontroller (z.B. tiny85) und ohne Transceiver.

Gleiches gilt, wenn Daten nur empfangen werden sollen, etwa um 
irgendein Gerät ein- oder auszuschalten.

von Erich (Gast)


Lesenswert?

@ Markus Weber
Du hast das CAN Protokoll nicht verstanden.
Gruss

von Markus W. (Firma: guloshop.de) (m-w)


Lesenswert?

Erich schrieb:
> @ Markus Weber
> Du hast das CAN Protokoll nicht verstanden.
> Gruss

Was bringt dich zu dieser Einschätzung? :-)

Beitrag #3813510 wurde von einem Moderator gelöscht.
Beitrag #3813523 wurde von einem Moderator gelöscht.
Beitrag #3813917 wurde von einem Moderator gelöscht.
von Fabian F. (fabian_f55)


Lesenswert?

c-hater schrieb im Beitrag #3813510:
> Pit schrieb:

>
> Und, last but not least, weil es immer wieder ein innerlicher
> Vorbeimarsch ist, die unfähigen C-Frickler mal wieder daran zu erinnern,
> auf wie viel Hardwareleistung sie freiwillig verzichten, nur um ihrem
> üblen Kult in möglichst reiner Form zu frönen...

Du lebst wahrscheinlich auch in einem Erdloch und benutzt zum kochen, 
zähneputzen und Wäsche waschen Steine, weil ja jede Art von 
fortgeschritten Werkzeug Blasphemie im Angesicht des Assembler-gottes 
ist.

von Harald (Gast)


Lesenswert?

Und während c-hater seinem Fetisch nachgeht bewegt sich die restliche 
Welt langsam Richtug model-based-design und darauf basierender 
automatische Code-Generierug und lässt auch die C Welt hinter sich...

Früher kontrollierte man den Output vom C-Compiler, das macht heute 
keiner mehr. Heute schaut man gelegentlich noch in den Output von 
genriertem Code, obwohl das auch schon fast vorbei ist.

von Tonx (Gast)


Lesenswert?

Guten Tag allerseits
ich habe eine kurze Frage:
ich habe einen µc mit CAN-Controller von microchip ( pic32), im moment 
läuft CAN Transceiver MPC2551 mit.
jetzt möchte ich den MPC2551  durch TJA1051 ersetzen, von pining her, 
sind gleich, also keine Layout-Änderung.
soll ich noch software Anpassung auch machen( in CAN-Controller)?

mfg
Tonx

von Harald A. (embedded)


Lesenswert?

Tonx schrieb:
> Guten Tag allerseits
> ich habe eine kurze Frage:
> ich habe einen µc mit CAN-Controller von microchip ( pic32), im moment
> läuft CAN Transceiver MPC2551 mit.
> jetzt möchte ich den MPC2551  durch TJA1051 ersetzen, von pining her,
> sind gleich, also keine Layout-Änderung.
> soll ich noch software Anpassung auch machen( in CAN-Controller)?
>
> mfg
> Tonx

Geht ohne Software-Anpassung! Habe es jetzt für diese Beiden nicht 
geprüft, aber ein paar Varianten unterscheiden sich in der Funktion 
eines Pins, bitte daher nochmal genauestens prüfen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Tonx schrieb:
> ich habe eine kurze Frage:
Du kannst für eine neue Frage, die ausser den drei Buchstaben "CAN" 
nichts mit irgendeinem Vorherigen zu tun hat, ganz problemlos einen 
neuen Thread starten.

> jetzt möchte ich den MPC2551  durch TJA1051 ersetzen, von pining her,
> sind gleich, also keine Layout-Änderung.
> soll ich noch software Anpassung auch machen( in CAN-Controller)?
Was steuert denn die Software an diesem Pegelwandler an? Hast du von 
der Software aus Zugriff auf den Pegelwandler?

: Bearbeitet durch Moderator
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.