CAN Beispiele

 

In diesem Kapitel werden einige Initialisierungsbeispiele gegeben, um die Funktionsweise der CAN Bibliothek zu verdeutlichen.

 

Initialisierung

 

In jedem Fall muss die CAN Bibliothek vor dem Betrieb initialisiert werden. Dieses Beispiel stellt für den CAN Bus eine Geschwindigkeit von 1 Mega bps ein, und stellt RAM für 10 FIFO Einträge zur Verfügung.

 

byte fifo_buf[CAN_BUF(10)];

 

CAN_Init(CAN_1MBPS, 10, fifo_buf);

 

 

Empfang

 

1. Auf MOb Nummer 2 werden CAN 2.0A Nachrichten empfangen, die exakt einen Identifier von 0x123 haben.

 

CAN_SetMOb(2, 0x123, 0x7ff, CAN_RECV);

 

 

2. Auf MOb Nummer 3 werden CAN 2.0B Nachrichten empfangen, die exakt einen Identifier von 0x12345 haben.

 

CAN_SetMOb(3, 0x12345, 0x1fffffff, CAN_RECV|CAN_EXTID);

 

 

3. Auf MOb Nummer 3 werden CAN2.0A und CAN 2.0B Nachrichten empfangen, da das CAN_IGN_EXTID flag gesetzt ist. Durch die maskID von null, werden Nachrichten mit allen Identifiern empfangen. Wegen CAN_IGN_RTR werden normale und Trigger Pakete empfangen.

 

CAN_SetMOb(3, 0x12345, 0, CAN_RECV|CAN_IGN_EXTID|CAN_IGN_RTR);

 

 

4. Auf MOb Nummer 2 werden CAN 2.0A Nachrichten empfangen, die einen Identifier von 0x120, 0x121, 0x122 oder 0x123 haben.

 

CAN_SetMOb(2, 0x120, 0x7fc, CAN_RECV);

 

 

Senden

 

1. Auf MOb Nummer 0 wird eine CAN 2.0A Nachricht mit ID 0x432 und 6 Datenbyte gesendet.

 

byte data[8], i;

 

for(i=0;i<8;i++) data[i]=i;

CAN_SetMOb(0, 0x432, 0, CAN_SEND);

CAN_MObSend(0, 6, data);

 

 

2. Auf MOb Nummer 1 wird eine CAN 2.0B Nachricht mit ID 0x12345678 und 8 Datenbyte gesendet.

 

byte data[8], i;

 

for(i=0;i<8;i++) data[i]=i;

CAN_SetMOb(1, 0x12345678, 0, CAN_SEND|CAN_EXTID);

CAN_MObSend(1, 8, data);

 

 

Automatic Reply

 

MOb Nummer 4 wird auf automatic reply eingestellt. Die mit CAN_MObSend() übergebenen Datenbytes werden gesendet, wenn eine CAN 2.0B Trigger Nachricht mit ID von 0x999 empfangen wird. Die Anzahl der gesendeten Datenbytes hängt vom DLC der eingehenden Trigger Nachricht ab.

 

byte data[5], i;

 

for(i=0;i<5;i++) data[i]=i;

CAN_SetMOb(4, 0x999, 0x1fffffff, CAN_REPL|CAN_EXTID);

CAN_MObSend(4, 5, data);