IDMaske CAN Programmierung ATmega 32M1

Gast #3713518
Lesenswert?

Hallo liebe User,

ich sitzte momentan an einem schönen Softwareprojekt zur Vernetzung von 
mehreren Baugruppen über CAN-Bus. Soweit funktioniert auch alles 
einwandfrei! Damit ich sicher gehen konnte, dass die Übertragung stimmt, 
habe ich erstmal ohne Identifier Maske gearbeitet. Nun geht es ins 
Detail...dazu habe ich den ID-Filter gesetzt. Allerdings kommen nun 
keine Daten mehr an. Ich kann sicherstellen, dass die eingestellte ID 
für das Empfangsprotokoll RPDO1 von Baugruppe 1 mit der des 
Sendeprotokolls TPDO1 von Baugruppe 2 übereinstimmt. Warum funktioniert 
das nicht?

Einstellungen Baugruppe 1:
ID: 0x002
COB_ID RPDO1: 0x183
ID_MASK: 0xFFF

Einstellungen Baugruppe 2:
ID: 0x003
COB_ID TPDO1: 0x183
ID_MASK: -

folgender Init-Code:


/*--------------------------------------------------------------
FUNCTION    :can_rmob_init
INPUT       :CAN_ID, CAN page, ,ID_MASK, data length
OUTPUT      :-
DESCRIPTION :initialize RPDOs
--------------------------------------------------------------*/
void can_rmob_init(unsigned int cob_id, int mob, unsigned int id_mask, 
int length)
{
    CANPAGE=(mob<<4);                                        //MOb
    CANSTMOB=0;                                         //reset MOb 
state
    CANCDMOB=0;                                //reset MOb Control- & 
DLC register
    CANIDT4=0;                                          //no RTR
    CANIDT2=(cob_id<<5);                          //last 3Bits
    CANIDT1=(cob_id>>3);                          //first 5Bits

    CANIDM2=(id_mask<<5);                               //last 3Bits
    CANIDM1=(id_mask>>3);                               //first 5Bits
    CANCDMOB=(length | 0x80);          //enable reception, data length
}

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