www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XC888 - REMOTE FRAME


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen,

eine Nachricht mit gesetztem RTR darf keine Daten besitzten. Vielmehr 
ist doch diese Nachricht eine Aufforderung zu antworten. Die Antwort ist 
eine normale CAN Nachricht mit gleicher ID und nicht gesetztem RTR.
Damit kann man z.B. einen Sensor pollen, falls man keine regelmäßigen 
Updates der Meßwerte braucht. Das RTR Bit gilt als gesetzt, wenn es den 
Wert 1 hat.
Also das verstehe ich unter REMOTE FRAME.

Jetzt möchte ich aber mit dem XC888 Starter Kid Board eine definierte 
Nachricht senden, sobald eine Aufforderung (RTR Bit gesetzt) vom CAN 
Dongle (MASTER) empfangen wird. Wie ist da das Handling auf der 
Mikrocontroller seite?

CAN Dongle sendet Aufforderung: CAN-ID=0x002, DLC=1, RTR-Bit=1

XC888 Board: wartet auf Aufforderung (CAN-ID=0x002, RTR-Bit=1)
             Wenn Aufforderung empfangen wurde, sende eine NAchricht mit 
der
             CAN-ID=0x005, DLC=1, DatenByte=0x55

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann dies mit dem XC888 Mikrocontroller realisieren?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann ich die Aufforderung vom CAN Dongle zyklisch im XC888 
überprüfen?
Muss ich den Status abfragen?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie kann in DAVE ein Message Objekt für dem Empfang angelegt werden, so 
dass das REMOTE Bit aktiv ist?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vieln Dank für die Hilfe!

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo.....

Autor: roquema (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey, nicht jeder hier im Forum hat Ahnung vom CAN-Bus und dessen 
Programmierung. Ich leider auch nicht. Deine Fragen sind ja dahingehend 
ziemlich speziell. Also Geduld...

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ok! Werd mich gedulden.

Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir mal eine Funktion geschriben mit der ich die Daten vom 
Remote Frame erhalte.
Zuerst lade ich den ganzen Code in den XC888, anschließend starte ich 
den Dongle auf dem PC und sende von dort aus eine CAN Nachricht. Danach 
sehe ich auf dem Empfangsfenster vom Dongle ein Remote Request.
Also ich komme mit dem ganzen Remote Zeugs ´nicht so recht auf einen 
grünen Zweig. Benötige dringend hilfe!!!!!

Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hier noch der Screenshot vom Dongle.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das gibt es doch nicht. Es müsste doch jemand geben der hiermit 
Erfahrung hat.
Ich komm da nicht weiter!

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn schon niemand diesen Mikrocontroller kennt, kann mir wenigstens 
jemand
genauer erklären wie der REMOTE Betrieb unter CAN funktioniert?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte ein Master/Slave-System aufbauen.
Der PC ist der Master (CAN Dongle). Der Master liest Daten vom XC888 
Board aus und überträgt an die Slaves (weitere XC888 Boards).

Dies bedeutet doch, dass ich eine Anfrage mit CAN realisieren muss. Bin 
total planlos. Die Doku vom XC888 ist nicht gerade so toll.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich zur Zeit kein zweites Board habe, kann ich die Funktionalität des 
REMOTE Betriebes nicht ganz testen.
Mit dem CAN Dongle starte ich eine Anfrage. Der SLAVE 0 zum Beispiel 
sendet dann daraufhin eine CAN Anchricht. Diese CAN NAchricht soll dann 
zum Beispiel der SLAVE 1 empfangen und auswerten.


Hiemit sende ich eine Anfrage (CAN Dongle): Das MO3 habe ich als 
Transmit konfiguriert. Dazu habe ich noch das Remote Monitoring 
aktiviert.

CAN_vGetMsgObj(3, &canTransmitObject);
canDataObject.ubDB[3] = 0x88;
canTransmitObject.ulDATAL = canDataObject;
CAN_vConfigMsgObj( 3, &canTransmitObject );

Hat jemand damit schon Erfahrungen gemacht?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit dem REMOTE Betrieb habe ich noch so meine Schwierigkeiten.
Und zwar funktioniert das Senden von einer Anfrage und anschließend das 
Empfangen nur mit einem Message Objekt richtig.


REMOTE Anfrage starten, warten, Daten dann abholen:
char GetDatenRemoteFrame( char cMONr, char cDataByte )
{
  pdata stCAN_SWObj canTransmitObject;

  if( CAN_ubNewData(cMONr) )
  {
     CAN_vReleaseObj(cMONr);
  }

  CAN_vTransmit(cMONr);

  Warten(500);

  CAN_vGetMsgObj(cMONr, &canTransmitObject);
        CAN_vReleaseObj(cMONr);
  return canTransmitObject.ulDATAL.ubDB[cDataByte];
}

void main(void)
{
 ....
 while(1)
   {
    P3_DATA = GetDatenRemoteFrame( 2, 3 );

    P3_DATA = GetDatenRemoteFrame( 3, 3 );
   }
}

REMOTE FRAME senden:
canDataObject.ubDB[3] = 0x01;
canTransmitObject.ulDATAL = canDataObject;
CAN_vConfigMsgObj( 2, &canTransmitObject );

Sobald ich dies mit einem weiteren MO realisieren möchte, ändern sich 
auch die Nutzdaten von diesem MO, anhängig was ich bei MO2 eingestellt 
habe.

In Dave habe ich weitere Funktionen entdeckt.
CAN_ubRequestMsgObj
CAN_vLoad...

Muss ich wahrscheinlich beim senden der Nachricht statt die Funktion 
CAN_vConfig.... die Funktion CAN_vLoad... verwenden?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann überhauot mehrer Remote Frame anfordern?

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry hab mich vertippt.

Kann ich überhaupt mehrer Remote Frames anfordern?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Remoteframes haben wir noch nie benutzt.

Der eine Teilnehmer schickt ne Anfrage und der andere dann die Antwort. 
Beides sind ganz normale Daten.

Wußte bisher garnicht, daß es überhaupt Remoteframes gibt.
Wozu sollen die gut sein ?


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter, vielleicht sollte ich vorsichtig sein mit dem Begriff 
Remoteframe. Ich meine damit, dass eine Teilnehmer eine Anfrage sendet 
und der andere kann dann darauf antworten. Der Begriff Remoteframe 
sollte man streichen. Kansst du mir zu dem obigen Beitrag "10.07.2007 
08:35" helfen?

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die CAN-Bibliothek von DAVE kenne ich nicht.
Wenn Du zu der CAN-Bibliothek keine ausführliche Beschreibung hast, 
würde ich sie nicht benutzen.


Ich benutze den AT89C51CC03 und programmiere ihn direkt in C (Keil C51), 
also ohne irgendwelche fremden Bibliotheken.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Also Dave ist schon ein super Programm, das von der Firma Infineon 
entwickelt wurde. Mir geht es primär darum, wer schon mit dem XC888 den 
Remote Betrieb verwendet hat und wofür die Funktionen 
CAN_ubRequestMsgObj , CAN_vLoad... eingesetzt werden.

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vergiß die Remoteframes. Das ist eine Merkwürdigkeit des CAN-Protokolls, 
dass kaum jemand benutzt (auch dein CANOpen nicht).

Vielleicht solltest du dich auch mal von DAVE losreißen und versuchen, 
dass was du da machst, auch zu verstehen. Dazu gehört die Erkenntnis, 
dass es im CAN-Protokoll per se keine Master oder Slaves gibt. Der 
CAN-Bus arbeitet Ereignisorientiert. Natürlich kann man sich ein 
Protokoll ausdenken, das einen Master-Slave Betrieb implementiert. Macht 
aber nur in bestimmten Situationen Sinn.

Um dir mal ein Beispiel zu geben, wie ich mein Protokoll aufgebaut habe:
Die CAN Extended ID ist aufgebaut als

  Bit | Funktion
===========================
  0-4 | Nicht benutzt
 5-12 | MsgTyp (Art der Message, z.B. Action, Event, Firmwareupdate 
etc.)
13-20 | AbsenderID (jeder Teilnehmer hat eine eigene, einmalige ID)
22-29 | EmpfängerID oder 0 für Alle (bei 0 entscheidet der Empfänger, ob 
er die Message verwerten kann oder nicht).

Der MsgTyp entscheidet darüber, wie der Datenblock (8 Bytes) aufgebaut 
ist.

Ich beobachte deine Versuche schon eine Weile, und habe nicht den 
Eindruck, das du wesentlich weiterkommst. Es gab in deinen vielen 
Threads immer wieder wichtige Hinweise, die du mal etwas weiter 
verfolgen solltest. Möglicherweise solltest du auch mit etwas 
trivialerem anfangen, als dem Entwurf eines CAN-Protokolls (ein paar 
LEDs blinken lassen z.B.).

Gruß,
Matthias

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, CAN Nachrichten kann ich senden und empfangen. Das tut prima.
Deinen Aufbau der CAN-ID entspricht aber nicht dem CANOPEN Protokoll, 
oder sehe ich dies falsch. Du hast für dich eine eigenständige CAN-ID 
Zuordnung definiert. So sehe ich dies.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Achso und CANOPEN verwendet das mit dem Remote überhaupt nicht?

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meines Wissens nach rät CANOpen von der Verwendung von Remote Frames ab.

Natürlich hat mein Protokoll nichts mit CANOpen zu tun, warum auch? Für 
meine Zwecke (Homeautomation) wäre CANOpen absoluter Overkill.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja wie sieht dann bei dir der Empfangsmechanismus aus?

Tust du die ganze Zeit nach vorhandenen Nachrichten pollen?

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nein, ich benutze dafür natürlich den Empfangs-Interrupt. Was anderes 
würde auch keinen Sinn machen.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab da noch ein Verständnisproblem. Die Message Objekte werden für jeden 
Teilnehmer zuerst angelegt. Wie tust du dann in der ISR prüfen, ob die 
Nachricht, die auf dem Bus liegt, auch für diesen Teilnehmer bestimmt 
ist?

Zum Beispiel: Nachricht mit ID 0x101 liegt auf dem Bus. Der Teilnehmer 2 
soll diese Nachricht empfangen. leider hat dieser Teilnehmer kein 
Message Objekt mit der Nummer 0x101. Dies ist ja auch logisch. Muss dann 
jeder Teilnehmer ein Message Objekt besitzen, indem man alles empfangen 
kann?

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Was ist ein Message-Objekt?

Wenn eine Nachricht auf den Bus geht, empfangen alle Knoten die 
Nachricht (ich habe keine Filter aktiviert). Jeder Knoten prüft nun, ob 
die Nachricht für ihn relevant ist. Da überall die gleiche Software 
läuft, geschieht das über Konfigurationen im Knoten.

Ein Beispiel:
Ich drücke eine Taste eines Knotens. Dieser sendet eine Nachricht mit 
dem Typ "SENSOR" und seiner KnotenId im CAN Extended Id, und der ID der 
Taste im Datenbereich.
Jeder Knoten prüft nun, ob er die Kombination aus KnotenId und TastenId 
in seiner Konfiguration hat, und wenn ja, löst den zugehörigen Aktor aus 
(schaltet ein Relais oder eine LED oder einen Motor etc.).
Das ist etwas vereinfacht dargestellt, aber das Prinzip sollte klar 
werden.

Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Bei diesem Mikrocontroller XC888 ist es so, dass man mit einem Tool 
(Infineon) die Message Objekte jeweils nach Wunsch konfigurieren und 
erstellen kann.
Dort kann ich auch den Filter einstellen und auch z.B. die ID Nummer.
Ich müsste dann ein Message Objekt anlegen, das alle Nachrichten 
empfangen kann oder? Ich muss ja zuerst prüfen, ob die Nachricht auch 
für diesen Teilnehmer relevant ist. Das ist mein Problem.

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Leg dein Dave mal beiseite und programmiere das alles von Hand.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das hab ich ja auch schon zum Teil gemacht. Also so ist das nicht, dass 
ich nur das Tool Dave verwende.Ich glaub mich versteht keiner so 
richtig.

1.Muss ich bei allen Teilnehmern zuerst die Message Objekte definieren 
und erstellen?
2.Muss das Abitration Register permanent überprüfen werden, ob eine 
Nachricht anliegt oder nicht?
3.Hat die Nummer vom Message Objekt was mit der Nummer vom CAN-ID zu 
tun?
Ich meine nein.

Autor: CAN-Busfahrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Ja, mind eines. Je mehr man hat, desto mehr kann man die Nachrichten 
in Hardware "vorselektieren" -> weniger Softwareaufwand, was bei einem 
8-Bitter von Bedeutung sein kann
2. Ja, aber das macht es in Hardware
3. Nein, die Nummer deines MO hat nichts mit den zu empfangenden 
Messages (IDs) zu tun, dafür hast du ja das "Arbitration Register" + 
"Acceptance Mask"

Autor: MNR (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mit alles von Hand programmieren meinte ich, Datenblatt vom XC888 
nehmen, lesen, und das senden und empfangen von CAN Messages in C von 
Grund auf implementieren. Dabei lernst du auch, wie das alles 
funktioniert und zusammenspielt.

Alternativ kannst du auch den gesamten Quellcode deines von Dave 
erzeugten Programmes analysieren. Dieser Weg ist meistens steiniger als 
alles selber machen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Damit Du was empfangen kannst, muß mindestes ein Object auf Empfang 
konfiguriert werden.
Dazu gehört auch den ID und die ID-Maske entsprechend einzustellen, 
entweder nur auf einen ID, auf eine Gruppe oder alle.

Je nach Chip (den XC888 kenne ich nicht) kann man nun mehrere 
Nachrichten puffern lassen, dann reicht ne Abfrage im Polling, ob was 
angekommen ist.

Ohne Pufferung sollte man einen Interrupthandler mit Softwarepuffer 
(FIFO) aufsetzen.

Nach dem Auslesen eines Objectes ist es automatisch wieder 
empfangsbereit, wenn man das entsprechende Bit zurückgesetzt hat.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich werde zunächst erstmal ein Message Objekt für den Empfang anlegen.
Den Filter verwende ich nicht. In diesem Message Objekt werde ich auch 
zuerst mal keine ID zuweisen (Abitration Register 0x000).
Mit der Funktion GetMsg kann ich dann die Information während des 
Betriebes abfragen. z.B. die Daten, ID, DLC usw.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gestern bin ich noch bis in die Nacht hinein am PC gesessen.
Ich hab es nicht geschafft, welche Nachricht genau empfangen wurde.
Bei der Konfiguration des Empfangs-Message-Objektes muss ich ja zuerst 
das Arbitration Register setzen und dann das Acceptance Mask Register.
Für meine Anwendung möchte ich, dass wenn eine Nachricht auf dem BUS 
anliegt zuerst prüfen ob ich die Nachricht mit der ID empfangen möchte 
oder nicht.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Gibt es hier niemand der sich mit dem XC888 auskennt?
Ich komme da nicht weiter.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,

ich kann das Message Objekt so konfigurieren, dass ich eine ID, eine 
Gruppe oder auch alle empfangen kann.
Aber ich kann jetzt nicht explizit eine ID prüfen. Wenn ich alle ID's 
durchlasse, dann weiss ich ja nicht ob die ID z.B. 0x101 oder 0x005 ist.
Das weiss ich halt nicht , wie man dies auf dem XC888 realisieren 
könnte.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:

> Aber ich kann jetzt nicht explizit eine ID prüfen. Wenn ich alle ID's
> durchlasse, dann weiss ich ja nicht ob die ID z.B. 0x101 oder 0x005 ist.
> Das weiss ich halt nicht , wie man dies auf dem XC888 realisieren
> könnte.

Also beim AT89C51CC03 besteht ein Message Object aus mehreren Feldern, 
dem Längenbyte, dem ID und dem Datenfeld.
Würde mich wundern, wenn es beim XC888 nicht so ist.


Ich hab gerade mal bei Infineon geguckt, hätte nicht gedacht, daß die 
auch endlich mal 8051-er mit Flash bauen.
Dürfte allerdings schwer werden, sich gegen die vielen bereits 
etablierten Flash-8051-Hersteller durchzusetzen.

Das Datenblatt ist allerdings ein Witz, da sind nur 2 Seiten zum CAN 
drin, damit kann man überhaupt nichts anfangen. Beim Atmel sinds 44 
Seiten.

Ohne vernünftiges Datenblatt können se den Chip gleich wieder 
einstampfen.


Peter

Autor: CAN-Busfahrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter,
da muss ich dich leider korrigieren. Im UsersManual stehen ca. 100 
Seiten zum Thema CAN. Des weiteren  gibt es mehrer AppNotes dazu und im 
asiatischen Raum ist dieses Device der absolute Renner.
In der deutschen Automobil-Industrie wird er ebenfalls in sehr großen 
Stückzahlen eingesetzt.

@Patrick:
Wenn du alle IDs zulässt, dann steht die ID der empfangenen Nachricht in 
dem MOAR-Register

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
CAN-Busfahrer wrote:
> Hallo Peter,
> da muss ich dich leider korrigieren. Im UsersManual stehen ca. 100
> Seiten zum Thema CAN.

Dann wäre es vielleicht keine blöde Idee, dieses Manual auch auf der 
Webseite zum Download anzubieten.

Die Infineon-Webseite ist grauenvoll.
NXP ist aber auch nicht besser.
Atmel ist ganz gut, da findet man alles.


Peter

Autor: CAN-Busfahrer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab mal dieses MOAR-Register ausgelesen. Da sehe ich immer die ID 
die ich auch im MOAR-Register eingestellt habe. Das Acceptance Mask 
Register steht bei mir auf 0x000. Damit kann ich alle ID's durchlassen. 
Also das mit dem XC888 macht macht mich noch ganz wahnsinnig.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da ich die ID und die Datenlänge schon bei der Planung (z.B. mit DAVE) 
des CAN-Netzwerkes festlege, bringt das Auslesen der ID und Datenlänge 
ja gar nichts.
Die ID wird bei der Initialiserung (vom DAvE) festgelegt und danch nicht
mehr verändert.

Vorher habe ich den CAN Controller SJA1000 verwendet. Da war es wirklich 
anders. Ich konnte mit dem die CAN-ID's herausfinden die auf dem BUS 
aktuell liegen.

Autor: Patrick (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mit dieser Funktion kann ich die Daten von einem angelegten Message 
Objekt auslesen. Id kann ich zwar lesen, allerdings wurde diese ID schon 
bei der konfiguration des Message Objektes angelegt.

Bin für jede Hilfe sehr dankbar.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sehen ja ganz nett aus, die Daten des XC888 und da es ein 8051 ist, 
könnt ich ihn auch ganz easy mit dem ollen Keil C51 programmmieren.

Bloß leider kommt er viel zu spät, bei uns werkeln überall schon 
T89C51CC01 und AT89C51CC03 rum und ein funktionierendes System wechselt 
man nicht gerne.


Peter

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Mit dieser Funktion kann ich die Daten von einem angelegten Message
> Objekt auslesen. Id kann ich zwar lesen, allerdings wurde diese ID schon
> bei der konfiguration des Message Objektes angelegt.

???

Also Du setzt die Maske auf 0, dann kommt alles durch, der ID ist 
wurscht.

Dann wartest Du, bis ne Nachricht empfangen wurde, d.h. das 
entsprechende Bit im Message Objekt gesetzt wurde.
Nun kannst Du den ID und die Nachricht auslesen.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Guten Morgen Peter,

ok die Maske habe ich ja schon auf 0x00 gesetzt. Da kommen dann auch 
alle CAN ID's durch, nur kann ich nicht expliziet herausfinden welche 
Nachricht mit welche ID gerade durchkommt.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Guten Morgen Peter,
>
> ok die Maske habe ich ja schon auf 0x00 gesetzt. Da kommen dann auch
> alle CAN ID's durch, nur kann ich nicht expliziet herausfinden welche
> Nachricht mit welche ID gerade durchkommt.

Was meinst Du damit ?

Du schickst eine Nachricht hin, das Datenfeld und die Länge ist richtig, 
aber der ID ist falsch ?

Das glaub ich Dir nicht.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich muss doch unter anderem beim Konfigurieren des MO die ID ja 
festlegen, von 0x000 bis 0x7FF. Die Acceptance Maske setze ich dann 
logischerweise auf 0x000.
Damit kann ich alle Nachrichten empfangen. Nur die ID, ist die, die ich 
zuvor auch eingestellt hatte. Genau das check ich nicht ganz!

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hier müsste es doch Leute geben, die sich etwas genauer mit dem XC888 
auskennen. Wharscheinlich müsste ich es so machen, dass ich beim Start 
des XC888 die MO's mit definierten ID's anlegen muss. Danach kann ich 
dann prüfen ob eine Nachricht anliegt.
Aber ich denke auch, das es gehen müsste, das ich die ID bei einem 
Acceptance Mask von 0x000 auslesen müsste.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Von einer anderen Quelle habe ich erfahren, dass man nur die ID's 
auslesen kann, die man auch bei der Konfiguration der MO's vergeben hat.

Sobald ich das Arbitration Register auf 0x005 und das Acceptance Mask 
Register auf 0x000 einstelle, dann kann ich auch nur die ID 0x005 
auslesen.
Es wird so sein dass, die Hardware dies dann so veranlasst.
Trotzdem, finde ich das komisch.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Somit habe ich ein großes Problem. Wie kann ich dann damit ein CAN 
Protokoll (Schicht 7) aufbauen?
Es sollen insgesamt 5 Busteilnehmer an einem CANBUS angeschlossen 
angeschlossen werden. Wie könnte man da das Protokoll aufbauen?
Ich kann ja nicht explizit eine CAN ID abfragen.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Hier müsste es doch Leute geben, die sich etwas genauer mit dem XC888
> auskennen.


Wie es scheint, eben nicht.

Es ist immer ein Risiko, brandneue Chips zu nehmen. Besonders, da es 
schon jahrelang andere Flash-MCs mit CAN gibt.
Die Atmel (vormals Themic) Chips haben sich jedenfalls ziemlich gut 
etabliert, da findet man viele Informationen.


Da hilft wohl nur, Kontakt mit dem Hersteller aufzunehmen.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Endlich habe ich es herausgefunden. Das Message Objekt Nr. 0 lässt alle 
CAN-Nachrichten durch. Dies bedeutet ich kann endlich nach der 
gewünschten CAN-ID filtern.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Patrick wrote:
> Endlich habe ich es herausgefunden. Das Message Objekt Nr. 0 lässt alle
> CAN-Nachrichten durch. Dies bedeutet ich kann endlich nach der
> gewünschten CAN-ID filtern.


Na super, erst großkotzig 32 Message Objekte einrichten und dann ist nur 
eines   mit Klimmzügen nutzbar.

Beim AT89C51CC03 hab ich nur 15, aber die können verschiedene Gruppen 
filtern und ich muß nicht alles empfangen und umständlich per Software 
ausfiltern.


Erinnert mich stark an die NXP LPC2xxx, die haben auch ein CAN mit nem 
Haufen "Bells and Whistles", die total buggy sind, nur ne 
Grundfunktionalität ist nutzbar.


Peter

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe noch folgendes Problem mit dem XC888.
In einer Interruptroutone wird immer das Message Objekt 0 ausgelesen.
Wenn ich jetzt keine CAN Nachricht vom CAN Dongle auf den CANBUS
versende,
enthält das Message Objekt 0 noch die letzten Daten. Wie kann man nun
den XC888 dazu veranlassen, dass nachdem die Daten vom Message Objekt 0
abgeholt wurden, zu löschen?

Es gibt zwar noch die Funktionen:

..ReleaseMsg..
..RequestMsg..
..DelMsg..
usw.

Ich weiss nicht genau was diese Funktionen machen.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.