CAN Grundlagenfrage

Gast #280395
Lesenswert?

Hallo,

ich habe eine grundlegende Frage zu Thema CAN.

Wollte ich jetzt mehrere CAN Teilnehmer miteinander verbinden, ähnlich
einem CAN@Home Projet, wie muss ich sie dann verbinden.

Bei CAN gibts doch eine Tx und eine RX Leitung... bei zweien scheint es
leicht, aber wie ist es mit drei Teilnehmern..

ist eine übertragung in beide richtungen gleichzeitig möglich??

Danke!

Martin
Gast #280400
Lesenswert?

Hallo Bone.

ahhh, klar, den habe ich auch schon bei reichelt entdeckt! setzt der
das dann passend um???

könnte ich 2 can devs direkt gekrosst verbinden

kennst du eine gute can grundlagensite, also

ü raten
ü rahmenlänge
ü standarts
usw...

weißt du zufällig wo ich einen für LIN her bekomme, habe da auch schon
exemplare raus gesucht...

MCP201
TJA1020

leider nicht bei reichelt..

danke

martin
Gast #280402
Lesenswert?

Hallo Paul,

vielen Dank, werde mich da mal umsehen.

jetzt bereiten mir die LIN Transceiver noch sorgen, weis nicht wo ich
die mal am besten her bekommen kann.

als standart gibt hier wohl der
mcp201 oder
tja1020, aber die gibts nirgendwo...

martin
Gast #280405
Lesenswert?

Hallo Bone,

das ist ein schwieriges versprechen! ich kann dir nur versprechen das
ich sie weder öffentlich, noch auf einer i site, noch in sonst
irgendeiner form geschäftlich - oder kommerziell einsetzten werde, mein
interesse ist rein privat, und das wird auch bleiben....

wenn das reicht... brauch ja nur was zum einlesen...

damit ist aber immer noch meine LIn Transceiver frage offen, mensch die
muss es doch irgentwo geben....

martin
Gast #280406
Lesenswert?

Hallo Martin,

CAN ist ein Bussystem deswegen werden alle Teilnehmer, wie schon
besrieben, an eine Leitung gelegt. Beim CAN-Bus werden die Teilnehmer
mit Hilfe von Adressen angesprochen.
Eine Übertragung in beide richtungen gleichzeitig ist meines Wissens
nach nicht möglich, da die beiden Datenleitungen CAN_H und CAN_L ein
zueinander invertiertes Signal führen. Das dient der
Übertragungssicherheit.
Am besten du siehst dir diese Seite mal an
http://www.elektrocrew.de/modules.php?name=News&file=article&sid=3
das ist die beste die ich auf die schnelle finden konnte.

Ich hoffe das hilft dir weiter.
Gast #280407
Lesenswert?

mit lin hab ich mich noch nicht befasst,

nur ethernet/lan
can
spi
i2c
rs232
rs485
pci
(usb)grad am erlernen

ich werde dir heute abend (wenn endlich zu hause) den
CAN-grundlagenteil mal schicken... (halte dein obiges wort ;-) !!)
Gast #280408
Lesenswert?

Hallo Viktor,

so langsam wird mir die sache mit dem Bussystem klarer...

Also ein differenzielles Übertragungsverfahren auf dem Medium, ähnlich
Ethernet... gut zu wissen...

dann ist auf jeden fall klar das man nur in eine richtung auf mal
senden kann, und es eines zugriffsverfahrens bedarf wenn man mehrere
bussteilnehmer hat....

ich versuche zwei fujitsu mb90385 miteinander zu verknüpfen und einfach
daten zu übertragen,

die site schaut interessant aus, dank dir, sehe mich mal um,

martin
Gast #280409
Lesenswert?

Hallo bone,

da hast du ja schon eine menge bussysteme durch...vor allem pci sticht
dort etwas raus, hut ab, pci kann ich mir garnicht vorstellen, also das
man da als normal sterblicher nocht mit um kann... :-)

ich halte mein wort.

binn gespannt was kommt..

größer als 4 mb kann probleme geben...

jetzt bleiben noch die lin sorgen, bezüglich des beschaffens...

ich versuche zwei fujitsu 90385 zum kommunizieren zu bringen, es gibt
auch einige app notes dazu, aber meine herren, einen can uart
anzusprechen ist im gegensatz zu einen rs232 uart eja eine  tortur kann
das sein!?

martin
Gast #280410
Lesenswert?

@viktor:
>Beim CAN-Bus werden die Teilnehmer
mit Hilfe von Adressen angesprochen.

-ausgerechnet beim CAN ist das nicht so...
beim can wird die information des telegramms adressiert...
-jedes telegramm ist (topolodiebedingt) ein broadcastobjekt...
die Teilnehmer(Knoten bzw. Nodes) entscheiden dann anhand dieser
adresse ((informations-)IDENTIFIER) ob die information für sie selbst
interessant ist...

>Das dient der
Übertragungssicherheit.

-schonwieder nicht... :-)
stichwort MAC (medium access controll) ...
...der buszugriff zu deutsch...
es kann immer nur ein packet über den CAN-Bus laufen!
keine zwei oder mehr gleichzeitig!! (topologie mal wieder)
beim CAN eng verknüpft mit der Kabellänge!
weil hier durch die sogenannte arbitrierung die telegrampriorisierung
stattfindet. LAUFZEITEN etc. müssen berücksichtigt werden!!!
Gast #280411
Lesenswert?

Hallo Bone,

in einer app ist mir noch ein zusätliches bauteil aufgefallen, es ist
eine art übertrager, aber länks geschaltet, drosselspule!? also in
reihe zu canh und canL, vorab noch 2 folien c's zu masse.

ähnlich wie bei ethernet, wo auch eine art übertrager vor der rj buchse
sitzt.

bei den apps auf can at home, ist diese nicht vorhanden. das ganze
dient ja nun der störunterdrückung ähnlich EIB,Ethernet,S0(ISDN)
usw...

ich habe ein problem mit der beschaffung und der beschaffenheit dieser
spulen/drosseln/übertrager...

eine idee, oder infos??
Gast #280412
Lesenswert?

Überigens einen CAN Abschlusswiderstand von ca. 120 Ohm wird nur in der
Highspeed- CAN Technologie verwendet.

Beim Lowspeed CAN nicht zwingend erforderlich.


Der Transceiver von Philips TJA 1054 empfehlenswert, da das Bauteil
sehr hohe ESD Schutz besitz.

Gruß
Eddy
#524019
Lesenswert?

Nabend zusammen,

ich habe mal ein kleines Bild angehängt, was mein MCP2515 nach dem init 
und der 1. gesendeten Nachricht macht. Ich sende nur ein Telegramm, aber 
wenn ich das richtig deute, hört der gar nicht mehr auf, oder muss das 
so sein? Hat da jemand Erfahrungswerte? Wenn ich von der Zeit her runter 
gehen, kann ich verschieden lange HIGH Impulse erkennen. Die langen 
Impulse sind ca. 4,4µs, die kurzen etwa 3µs. Einen ganz Kurzen mit 1,3 
µs habe ich außerdem noch finden können.

Gemessen habe ich zwischen CAN_H und CAN_L vom Treiber IC.

Ronald
Angehängte Dateien:
Gast #524031
Lesenswert?

...ich vermute mal, das dein CAN-kumpl "alleine ist"

wenn er nimanden hat, der ihm das CAN-packet abnimmt(indem er im 
ACK-slot des packets einen dominanten pegel sendet) dann denkt DEIN 
CANchip IHM sei ein fehler unterlaufen, und wiederholt das versenden.... 
dabei incrementiert er seinen fehlerzähler...

....wenn sein fehlerzähler einen gewissen stand erreichte(siehe 
datenblatt) wird er sich ausschalten....

dh.
wenn dein chip "allein" am bus ist, dann gratulation zum test, du hast 
ein CAN-packet verschickt...

wenn noch ein (bereits auf die gleiche(!) baudrate konfigurierter) chip 
am bus hängt, solltest du nochmals prüfen, ob beide WIRKLICH die GLEICHE 
baudrate benutzen...
Gast #524044
Lesenswert?

@obelix:

nicht ganz richtig...
der ACK wird gesetzt, wenn das CAN-Packet von seiner struktur her 
korrekt auf dem Bus abgebildet wurde( anzahl bits, stuffregln 
eingehalten, ifs nicht unterschritten). dies wird von jedem 
Busteilnehmer mit einem ACK belohnt...

erst jetzt prüft der chip, ob er das packet in einen buffer schiebt oder 
verwirft (anhand filterverwendung und -wert)...

 ( ISO 11898 )
Gast #524064
Lesenswert?

sehr sicher, hab (fast) täglich mim CAN zu tun ;)


noch ein buchtip, für alle dies interessiert:

Wolfhard Lawrenz
"CAN Controller Area Network
Grundlagen und Praxis"

Hüthig Verlag

ISBN 3-7785-2780-0


....lässt keine fragen offen :)
#524087
Lesenswert?

Obelix wrote:
> Bist du dir da sicher? Teste ich bei Gelegenheit mal aus.

Ja, es reicht, wenn ein Teilnehmer das Paket für gut befindet.
Ob auch der gewünschte Empfänger das Paket erhalten hat, weißt Du nicht.


Beim CAN wird auch nur der Identifier arbitriert, nicht das Datenpaket.
Wenn also zufällig 2 Teilnehmer den gleichen Identifier aber 
unterschiedliche Daten senden, ist der Bus erstmal ne Weile tot, bis 
dann beide das Senden aufgeben, weil ihr Errorcounter übergelaufen ist.

Ein Kollege hatte sich mal gewundert, weil der CAN-Bus nur ganz langsam 
vor sich hin tröpfelte. Er hatte versehentlich 2 gleiche Geräte 
angeschlossen.


Peter
Gast #524250
Lesenswert?

@Peter Dannegger

es reicht keineswegs dass nur ein Teilnehmer das Paket für gut befindet.
Es ist zusätzlich auch noch zwingend notwendig dass kein anderer 
Busteilnehmer das Paket ablehnt (durch senden eines Errorframes). Die 
Empfänger dürfen das Paket erst zur Applikation durchreichen wenn diese 
Bedingung erfüllt ist. Wenn der Sender ein Errorframe erkennt versucht 
er das Paket erneut zu senden.

Dirk
#526309
Lesenswert?

Mahzeit,

also ich habe nun 2xMCP2515 mit µC an meinem BUS. Ich kann auch von 
einem µC LEDs am 2. ein bzw. ausschalten. Nur sendet mein 2. µC ein ACK 
zurück und somit muss ich nach dem 1. senden den "Sender" reseten und 
dann kann ich weiter machen. Also wird das ACK nicht von selbst 
gesendet, wenn es einen 2. Teilnehmner auf dem BUS gibt.
Nur wir komme ich jetzt mein ACK?

Ronald
Gast #526419
Lesenswert?

kannst du dein letztes Post noch mal etwas genauer beschreiben?

Also wenn du über den CAN ein/ausschalten kannst, dann funktioniert der 
CAN doch? Das ACK wird automatisch von MCP übernommen.

Warum musst du den Sender anschließend resetten? Das habe ich jetzt 
nicht ganz verstanden. Ich würde sagen, dass da in der Programmierung 
des Programmes was nicht stimmt...
#526506
Lesenswert?

Hi

ich habe 4 Taster an meinem 1. µC angeschlossen. Bei Tastendruck soll er 
ein Telegramm senden. Dieses wird vom 2. µC auch empfangen und 
ausgewertet. Sprich meine LED am 2. µC geht entweder an oder eben aus. 
Das funktioniert auch alles wunderbar. Das Problem leigt nun am ACK, 
welches der 2. µC an den 1. als Bestätigung senden soll. Dieses 
passiert, aus welchen Günden auch immer, nicht. Der 1. sendet also 
munter weiter, da er ja denkt das Telegramm sei ncht angekommen. Wer 
erzeugt mein ACK? Ist es der CAN Controller (MCP2515) oder, wie ich es 
auch schon gelesen habe der BUS Treiber? Oder muss ich meinen µC dazu 
bringen es zu senden?
Da der 1. ja nun mal nicht mehr aufhört mit dem Senden muss ich ihn erst 
einen drüber geben um dann wieder ein neues Telegramm senden zu können. 
Beide µC habe ich im Normal Mode laufen, also kann es auch nicht an der 
fehlenden berechtigung zum senden (Listen only) liegen.
PS: Habe mich, was die Grundstruktur an geht an die Anleitung von 
http://www.kreatives-chaos.com/artikel/ansteuerung-eines-mcp2515 
gehalten.

Ronald
#526510
Lesenswert?

Ronald Hensen wrote:

> munter weiter, da er ja denkt das Telegramm sei ncht angekommen. Wer
> erzeugt mein ACK? Ist es der CAN Controller (MCP2515) oder, wie ich es
> auch schon gelesen habe der BUS Treiber?

Sag bloß, Du hast keine CAN-Treiber dazwischen, dann kanns auch nicht 
gehen.

Beide müssen sich selbst und den anderen mithören.


Peter
Gast #526606
Lesenswert?

Der CAN-Treiber macht nur die Pegelanpassung sonst nichts. Alles andere
was zum Protokoll gehört macht der CAN-Controller selbstständig.

^^

AUTSCH

naja, bis auf die tatsache, das erst der treiber die "dominanten" und 
überschreibbaren "rezessiven" pegel schafft....

TREIBER == UNVERZICHTBAR!!!!
Gast #526839
Lesenswert?

@bone
Warum AUTSCH?

Ich habe es natürlich nur stark vereinfach gesagt.

> naja, bis auf die tatsache, das erst der treiber die "dominanten" und
überschreibbaren "rezessiven" pegel schafft....

Kurz gesagt Pegelanpassung.
#526873
Lesenswert?

Keine Sorge. Als Treiberbaustein habe ich den PCA82C250 eingebaut. Wie 
schon gesagt. das 1. senden von einem zum anderen Controller ist 
möglich, nur hört es mit dem Senden nicht mehr auf. Kann ich denn sehen, 
ob das ACK vom 2. µC gesendet wird (also auf dem Oszi)? Habe auch auf 
beiden Seiten einen Abschluss mit (da ich nichts anderes da hatte) 130 
Ohm gemacht. Die Entfernung sollte so etwa 1m betragen.

Ronald
#526890
Lesenswert?

Ich bins dann doch noch einmal. Inzwischen bin ich der Meinung, das das 
ACK Bit doch gesendet wird. Jedenfalls versucht wird zu senden.
Ich habe das Oszi mit dem 1. Kanal auf die TX Leitung des MCP2515 vom 
Empfänger der Nachricht gehängt und den 2. Kanal auf CAN LOW. Jedesmal 
an der gleichen Stelle vom Frame wird ein Impuls über den TX vom 
"Empfänger" gesendet.
Hab mal ein Bild gemacht.

Ronald
Angehängte Dateien:
#526896
Lesenswert?

Oh mann. Das nenne ich mal eigene Dummheit!!! Habt alle einen gut bei 
mir! Das ACK wird natürlich am MCP2515 gesendet, nur kann der BUS 
Treiber, wenn ihm die 5V Ub fehlen wenig damit anfangen! Hab auch 1000x 
die Schaltung kontrolliert, sogar mit Lupe und jetzt, nachdem ich die 
IC's aus den Sockeln genommen hatte um mal die Spauungen zu messen, 
fehlte der Pegel an Pin 3 (Vcc). Ich habe alles so oft kontrolliert und 
nichts gefunden - jetzt bei gutem Licht und einer Lupe war da eine 
kleine Unterbrechung auf der Platine.

Fazit: Ein Bustreiber ohne Spannung kann immernoch empfangen. UND! Wer 
misst misst nicht immer nur misst.

Vielen Dank für eure Unterstützung!


Ronald
Gast #526947
Lesenswert?

@obelix:
Kurz gesagt Pegelanpassung.


eben NICHT einfach nur eine Pegelanpassung...
einfach nur eine pegelanpassung wäre zB: bei rs232treibern der 
fall...(!)

rezessiv und dominant sind nicht einfach NUR pegel... das verhalten ist 
die crux!!

einfaches beispiel hierfür: I2C...


...schont bitte eure canchips :) spendiert ihnen treiber :)

ps: AUTSCH nur ugs. ;)
Gast #527321
Lesenswert?

Gast #527399
Lesenswert?

Ich habe das für Testaufbauten so realisiert. Funktioniert ganz prima, 
ist schnell aufgebaut und ist billig. Wer keine Transceiver in der 
Bastelkiste hat, sollte das ausprobieren.

Der Nachteil ist, daß man diesen "Bus" nicht mit dem normalen CAN-Bus 
koppeln kann.

mfg, Stefan.
Beitrag #6768052 wurde von einem Moderator gelöscht.

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