Frage zum CAN-Bus ...

N

Nicolas Nickisch

Guest
Hi NG,
nachdem ich nun schon einiges zum Thema gelesen habe bleiben trotzdem einige
Fragen offen....

1. lt. Literatur sind die Identifier als Sender-Identifikation vorgesehen.
Wie aber ADRESSIERE ich dann ein Paket an einen bestimmten Node ?

2.In der Literatur ist immer wieder die Rede von den Remoteframes mit denen
eine Antwort angefordert werden kann. Wie funktioniert dann die Adressierung
? Sendet der angesprochene Node automatisch nur eine Bestätigung oder muß
der übergeordnete ľC ein Antwortpaket individuell generieren `?

Nicolas Nickisch
 
"Nicolas Nickisch" <n.nickisch@gmx.de> wrote:

1. lt. Literatur sind die Identifier als Sender-Identifikation vorgesehen.
Wie aber ADRESSIERE ich dann ein Paket an einen bestimmten Node ?
Gar nicht. Wer's hört (und dass muss jeder sein) und sich dafür
interessiert, wertet das Paket aus. Sieh es eher als
Inhalts-Identifikation, so nach dem Motto "und nun die Lottozahlen von
heute" (gestern/morgen), oder "Hier die Temperatur von Sensor 7", oder
noch CAN-näher, "Hier die Nachricht, für die der Programmierer
Priorität xyz vorgesehen hat". Alles weitere ist eine Frage höherer
Protokollschichten, die vorschreiben, wer was zu senden und wer was
wie zu verstehen hat.

Anders als bei z.B. TCP/IP ist ein nacktes Paket an keinen bestimmten
Empfänger gerichtet. Die meisten Empfängerbausteine können zwar Filter
setzen und den ľC nur mit Paketen belästigen, die er sehen will, sie
müssen aber trotzdem alle Pakete lesen und bei Übertragungsfehlern
laut (auf dem Bus) aufschreien. Auch wenn der ľC das evtl. nur über
Fehlerzähler mitkriegt.

2.In der Literatur ist immer wieder die Rede von den Remoteframes mit denen
eine Antwort angefordert werden kann. Wie funktioniert dann die Adressierung
? Sendet der angesprochene Node automatisch nur eine Bestätigung oder muß
der übergeordnete ľC ein Antwortpaket individuell generieren `?
Remoteframes sind nach meiner Erfahrung praxisfremd. Wo kommen sie in
freier Wildbahn vor?

Andreas
--
You can only fit so many mistakes into 128kB. :)
(Greg Alexander)
 
On Mon, 16 Aug 2004 22:26:47 +0200, "Nicolas Nickisch"
<n.nickisch@gmx.de> wrote:
1. lt. Literatur sind die Identifier als Sender-Identifikation vorgesehen.
Wie aber ADRESSIERE ich dann ein Paket an einen bestimmten Node ?
Im Prinzip garnicht, der Node soll einfach auf diese ID hören.

CAN ist so gedacht:
- Motorsteuergerät sendet mit ID=280 Drehzahl und Verbrauch,
- ESP Steuergerät sendet mit ID=180 Raddrehzahlen,
- Instrumententräger ("Tachobrett") hört auf 280 und 180 und zeigt
Fahrgeschwindigkeit, Drehzahl und Verbrauch an,
- Mobiltelefon hört auf 280 und überträgt bei zu großer
Verbrauchssumme elektronisch Kreditantrag zur Bank zwecks
Großeinkauf von 10 Litern 95er Wüstengold ;-/

Manche CAN Controller unterstützen Mailboxen, wo für jede Box
eine ID programmiert werden kann. Will man dann die übertragenen
Parameter erfahren, liest man einfach die entsprechende Mailbox aus,
die immer den neuesten Stand beinhaltet, teilweise auch mit
Zeitstempel.

2.In der Literatur ist immer wieder die Rede von den Remoteframes mit denen
eine Antwort angefordert werden kann. Wie funktioniert dann die Adressierung
? Sendet der angesprochene Node automatisch nur eine Bestätigung oder muß
der übergeordnete ľC ein Antwortpaket individuell generieren `?
Es wird ein Paket mit RTR rezessiv und Datenlänge 0 unter einer
ID auf den Bus gelegt, und die Device, die sich für diese ID als
Datenquelle zuständig fühlt, sendet dann eine vollständige Message
(wie üblich RTR dominant) unter dieser ID auf den Bus.
Auch das geht teilweise automatisch über eine sendende Mailbox,
wenn der Controller die Anforderung sieht, kippt er einfach den
Mailboxinhalt unter der gleichen ID auf den Bus. Lesen darf die Daten
dann jeder, den es interessiert.

Deshalb wird üblicherweise auch dringend empfohlen, wirklich
jedem Parameter eine feste Position in einer Nachricht zuzuordnen
(z.B. Tankstand = Byte 3 Bit 0 bis 5 von ID 380). Natürlich kann man
auch mit Sequenznummern arbeiten, aber das widerspricht IMHO
dem CAN-Konzept.

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
 
On Tue, 17 Aug 2004 01:40:59 +0200, Oliver Bartels
<spamtrap@bartels.de> wrote:

On Mon, 16 Aug 2004 22:26:47 +0200, "Nicolas Nickisch"
n.nickisch@gmx.de> wrote:
1. lt. Literatur sind die Identifier als Sender-Identifikation vorgesehen.
Wie aber ADRESSIERE ich dann ein Paket an einen bestimmten Node ?
Im Prinzip garnicht, der Node soll einfach auf diese ID hören.

CAN ist so gedacht:
- Motorsteuergerät sendet mit ID=280 Drehzahl und Verbrauch,
Ist es Zufall, dass VAG wirklich auf 0x280 die Drehzahl schickt? ;-)

Gruss,
Florian
 
Vielen Dank erstmal.

Also angenommen, ich stelle dem Bus unter einer ID xyz Daten zur Verfügung
(so interpretiere ich Deine Ausführungen zum Thema Identifier), dann
interessiert sich eben nur ein knoten für IDs xyz.
O.k. ?
Nun angenommen, ich möchte von genau diesem Knoten die Software-Version
zurücklesen, dann würde ich jetzt die ID xyz als Remote-Frame senden, oder ?
Wie aber antwortet dieser Node dann ? Mit xyz wäre doch eigentlich verkehrt,
oder ? Es soll ja etwas anderes zurückgesendet werden.

Nicolas Nickisch

"Oliver Bartels" <spamtrap@bartels.de> schrieb im Newsbeitrag
news:4dg2i0tfp0lehbbjf7bduo7i90id3ldd2l@4ax.com...
On Mon, 16 Aug 2004 22:26:47 +0200, "Nicolas Nickisch"
n.nickisch@gmx.de> wrote:
1. lt. Literatur sind die Identifier als Sender-Identifikation
vorgesehen.
Wie aber ADRESSIERE ich dann ein Paket an einen bestimmten Node ?
Im Prinzip garnicht, der Node soll einfach auf diese ID hören.

CAN ist so gedacht:
- Motorsteuergerät sendet mit ID=280 Drehzahl und Verbrauch,
- ESP Steuergerät sendet mit ID=180 Raddrehzahlen,
- Instrumententräger ("Tachobrett") hört auf 280 und 180 und zeigt
Fahrgeschwindigkeit, Drehzahl und Verbrauch an,
- Mobiltelefon hört auf 280 und überträgt bei zu großer
Verbrauchssumme elektronisch Kreditantrag zur Bank zwecks
Großeinkauf von 10 Litern 95er Wüstengold ;-/

Manche CAN Controller unterstützen Mailboxen, wo für jede Box
eine ID programmiert werden kann. Will man dann die übertragenen
Parameter erfahren, liest man einfach die entsprechende Mailbox aus,
die immer den neuesten Stand beinhaltet, teilweise auch mit
Zeitstempel.

2.In der Literatur ist immer wieder die Rede von den Remoteframes mit
denen
eine Antwort angefordert werden kann. Wie funktioniert dann die
Adressierung
? Sendet der angesprochene Node automatisch nur eine Bestätigung oder muß
der übergeordnete ľC ein Antwortpaket individuell generieren `?
Es wird ein Paket mit RTR rezessiv und Datenlänge 0 unter einer
ID auf den Bus gelegt, und die Device, die sich für diese ID als
Datenquelle zuständig fühlt, sendet dann eine vollständige Message
(wie üblich RTR dominant) unter dieser ID auf den Bus.
Auch das geht teilweise automatisch über eine sendende Mailbox,
wenn der Controller die Anforderung sieht, kippt er einfach den
Mailboxinhalt unter der gleichen ID auf den Bus. Lesen darf die Daten
dann jeder, den es interessiert.

Deshalb wird üblicherweise auch dringend empfohlen, wirklich
jedem Parameter eine feste Position in einer Nachricht zuzuordnen
(z.B. Tankstand = Byte 3 Bit 0 bis 5 von ID 380). Natürlich kann man
auch mit Sequenznummern arbeiten, aber das widerspricht IMHO
dem CAN-Konzept.

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
 
Gleich noch eine Frage:
Momentan verwende ich den MCP2510 als CAN-Controller zusammen mit Atmel
AVRs.
Gibt es noch andere CAN-Controller, die leichter zu kriegen, rsp. billiger
sind ?

Nicolas Nickisch

"Oliver Bartels" <spamtrap@bartels.de> schrieb im Newsbeitrag
news:4dg2i0tfp0lehbbjf7bduo7i90id3ldd2l@4ax.com...
On Mon, 16 Aug 2004 22:26:47 +0200, "Nicolas Nickisch"
n.nickisch@gmx.de> wrote:
1. lt. Literatur sind die Identifier als Sender-Identifikation
vorgesehen.
Wie aber ADRESSIERE ich dann ein Paket an einen bestimmten Node ?
Im Prinzip garnicht, der Node soll einfach auf diese ID hören.

CAN ist so gedacht:
- Motorsteuergerät sendet mit ID=280 Drehzahl und Verbrauch,
- ESP Steuergerät sendet mit ID=180 Raddrehzahlen,
- Instrumententräger ("Tachobrett") hört auf 280 und 180 und zeigt
Fahrgeschwindigkeit, Drehzahl und Verbrauch an,
- Mobiltelefon hört auf 280 und überträgt bei zu großer
Verbrauchssumme elektronisch Kreditantrag zur Bank zwecks
Großeinkauf von 10 Litern 95er Wüstengold ;-/

Manche CAN Controller unterstützen Mailboxen, wo für jede Box
eine ID programmiert werden kann. Will man dann die übertragenen
Parameter erfahren, liest man einfach die entsprechende Mailbox aus,
die immer den neuesten Stand beinhaltet, teilweise auch mit
Zeitstempel.

2.In der Literatur ist immer wieder die Rede von den Remoteframes mit
denen
eine Antwort angefordert werden kann. Wie funktioniert dann die
Adressierung
? Sendet der angesprochene Node automatisch nur eine Bestätigung oder muß
der übergeordnete ľC ein Antwortpaket individuell generieren `?
Es wird ein Paket mit RTR rezessiv und Datenlänge 0 unter einer
ID auf den Bus gelegt, und die Device, die sich für diese ID als
Datenquelle zuständig fühlt, sendet dann eine vollständige Message
(wie üblich RTR dominant) unter dieser ID auf den Bus.
Auch das geht teilweise automatisch über eine sendende Mailbox,
wenn der Controller die Anforderung sieht, kippt er einfach den
Mailboxinhalt unter der gleichen ID auf den Bus. Lesen darf die Daten
dann jeder, den es interessiert.

Deshalb wird üblicherweise auch dringend empfohlen, wirklich
jedem Parameter eine feste Position in einer Nachricht zuzuordnen
(z.B. Tankstand = Byte 3 Bit 0 bis 5 von ID 380). Natürlich kann man
auch mit Sequenznummern arbeiten, aber das widerspricht IMHO
dem CAN-Konzept.

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
 
Nicolas Nickisch wrote:

Hi Nicolas,

Also angenommen, ich stelle dem Bus unter einer ID xyz Daten zur Verfügung
(so interpretiere ich Deine Ausführungen zum Thema Identifier), dann
interessiert sich eben nur ein knoten für IDs xyz.
O.k. ?
Nein, bei CAN (nicht CAN-Open) haben nicht die Teilnehmer IDs, wie bei den
meisten anderen Netzwerken, sondern die Nachrichten.
Es horen alle Teilnehmer auf Ereignisse (IDs), die sie interessieren.
Im Auto könnte eine ID Unfall z.B. gleichzeitig Airbag und Gurtstraffer
ausloesen, ohne das das Ereignis an beide Ziele gesendet werden muss.

Nun angenommen, ich möchte von genau diesem Knoten die Software-Version
zurücklesen, dann würde ich jetzt die ID xyz als Remote-Frame senden, oder
? Wie aber antwortet dieser Node dann ? Mit xyz wäre doch eigentlich
verkehrt, oder ? Es soll ja etwas anderes zurückgesendet werden.
Dazu könnte der gefragte knoten zusaetzlich auf eine nur einmal vergebene ID
hören.
Man muss sich bei CAN erstmal von dem Gedanken trennen, dass jeder
Teilnehmer nur auf eine ID hoert, dann wird das Konzept verstaendlich.

In diesem Dokument sind die Grundlagen recht anschaulich:
http://www.energietechnik.fh-dortmund.de/personen/walter/walter
mikrocontroller_infos/Busse/can.pdf

Viel Erfolg

Daniel

--
.~. Daniel Schramm Phone: +49 231 6108112 Mail:daniel.schramm@gmx.de
/V\ Bruehlweg 36 Mobile:+49 178 8839848 ICQ: 35816985
// \\ 44379 Dortmund Fax: +49 231 96989961 WWW: pinguin.sauerland.de
/( )\ Germany
^`~'^
 
On Tue, 17 Aug 2004 11:24:39 +0200, Florian Schenk
<schenk@schema2000.de> wrote:
Ist es Zufall, dass VAG wirklich auf 0x280 die Drehzahl schickt? ;-)
;-)

Gruß OLiver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
 
On Wed, 18 Aug 2004 07:19:15 +0200, "Nicolas Nickisch"
<n.nickisch@gmx.de> wrote:
Gibt es noch andere CAN-Controller, die leichter zu kriegen, rsp. billiger
sind ?
Ohne Wertung gibt es von Philips (SJA1000), Intel (82527),
Infineon (SAE81C90) Standalone-Controller, neben den unzähligen
auf Microcontrollern und DSP's integrierten solchen.

Gruß Oliver

--
Oliver Bartels + Erding, Germany + obartels@bartels.de
http://www.bartels.de + Phone: +49-8122-9729-0 Fax: -10
 
Oliver Bartels schrieb:

Ohne Wertung gibt es von Philips (SJA1000), Intel (82527),
Infineon (SAE81C90) Standalone-Controller, neben den unzähligen
auf Microcontrollern und DSP's integrierten solchen.
SJA1000 und 82527 gibts sogar beim Bastlerbedarf;-) Reichelt, nebst den
Leitungstreibern 82C250/251.


Gruß Dieter
 
Das schöne am MCP2510 ist das SPI-Interface (spart Leitungen am ľC)

Nicolas Nickisch

"Dieter Wiedmann" <Dieter.Wiedmann@t-online.de> schrieb im Newsbeitrag
news:41233AB3.D9259C33@t-online.de...
Oliver Bartels schrieb:

Ohne Wertung gibt es von Philips (SJA1000), Intel (82527),
Infineon (SAE81C90) Standalone-Controller, neben den unzähligen
auf Microcontrollern und DSP's integrierten solchen.

SJA1000 und 82527 gibts sogar beim Bastlerbedarf;-) Reichelt, nebst den
Leitungstreibern 82C250/251.


Gruß Dieter
 
On Wed, 18 Aug 2004 07:19:15 +0200, "Nicolas Nickisch" <n.nickisch@gmx.de>
wrote:

Gleich noch eine Frage:
Momentan verwende ich den MCP2510 als CAN-Controller zusammen mit Atmel
AVRs.
Gibt es noch andere CAN-Controller, die leichter zu kriegen, rsp. billiger
sind ?
Kannst Du noch etwas warten?

Wenn ja: AT90CAN128: quasi Atmega128 minus Mega103 Kompatibilitätsmodus plus
CAN auf PD4/PD5

Ansonsten PIC 18F458. Ich finde die PIC-Architektur aber persönlich etwas
unbequem. Oder AT89C51CC03 (8051 Core)


Mit freundlichen Grüßen

Dipl.-Ing. Frank-Christian Krügel
 

Welcome to EDABoard.com

Sponsor

Back
Top