ATMega64M1 CAN receive

OP #2164786
Lesenswert?

Hallöchen

Ich verwenden die LIB die man von Atmel runterladen kann.

Das Senden von Daten funktionert einwandfrei.

Aber mit dem Empfangen von Daten komme ich nicht zu 100% klar.

Ich möchte Daten mit nur einer CAN-ID empfangen.
Ich empfange aber immer auch andere CAN-Messages ?
Die CAN-ID der empfangenen Message kann ich dann auslesen.

Kennt sich jemand damit aus und kann mir helfen ?

Hier mein Code :
............................
st_cmd_t message2;


// INIT
     message2.pt_data = &CanRecBuffer[0];           message2.cmd = 
CMD_RX;
     message2.id.ext = 0x02;       message2.dlc = 8;
     message2.ctrl.ide = 0;        message2.ctrl.rtr = 0;
     can_cmd(&message2);


// empfangen
     if (can_get_status(&message2) == CAN_STATUS_COMPLETED)
             {
             EmpfangenAuswerten ();
             can_cmd(&message2);
             }

Danke für Eure Hilfe.
mfg
Mandi
Gast #2167366
Lesenswert?

> Beitrag "AT90CAN128 Bit und Form Errors"

Der Codeschnippsel ist arg knapp. Bist du sicher, dass du

1) nicht auf den Status CAN_CMD_ACCEPTED warten musst, der anzeigt, dass 
dein can_cmd() akzeptiert wurde?

2) eine Schleife um das einzelne if nicht brauchst? ich würde in einer 
Schleife pollen, ob der Status CAN_STATUS_COMPLETED (oder eine 
Fehlermeldung bzw. Timeout) erreicht wird.
OP #2167484
Lesenswert?

Hallöchen

>>Der Codeschnippsel ist arg knapp. Bist du sicher, dass du

OK  es steht aber alles nötige drinnen


>>1) nicht auf den Status CAN_CMD_ACCEPTED warten musst, der anzeigt, dass
>>dein can_cmd() akzeptiert wurde?

Stimmt. Aber ich sehe keinen Grund warum das Command nicht akzeptiert 
werden sollten. Haber daher drauf verzichtet.
Es sind 6 MOB's vorhanden und ich brauche nur 2 davon.

Was kann passieren , dass das COommand nicht akzeptiert wird ?


>>2) eine Schleife um das einzelne if nicht brauchst? ich würde in einer
>>Schleife pollen, ob der Status CAN_STATUS_COMPLETED (oder eine
>>Fehlermeldung bzw. Timeout) erreicht wird.


Es handelt sich um eine Schleife. Mache aber andere Dinge dazwischen.
( z.B.: die MosFet für einen BLCD in Abhängigkeit der Hallsensoren 
ansteuern, SPI zur Slave uC usw ... )


Muss beim Empfangen nicht eine MASK gesetzt werden ? Erfolgt dies 
Automatisch mit der ID ?

Danke Euch.

hmg
Mandi
Gast #2167510
Lesenswert?

> Muss beim Empfangen nicht eine MASK gesetzt werden ?
Du wirst wohl eine Filterfunktion einbauen müssen. Das habe ich 
seinerzeit auch gemacht, um Messages selektiv empfangen zu können. Der 
SJA1000 von Philips hat dafür extra ein Register -> ACCEPTANCE FILTER 
(ACF).

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