Forum: Compiler & IDEs ATMega64M1 CAN receive


von Manfred S. (mandinice)


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

von Helfer (Gast)


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.

von Manfred S. (mandinice)


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

von me (Gast)


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).

von Manfred S. (mandinice)


Lesenswert?

Hallöchen


>> Muss beim Empfangen nicht eine MASK gesetzt werden ?
>Du wirst wohl eine Filterfunktion einbauen müssen.

In die Software ?

Ich dachte der integrierte CAN-Receiver kann das ?
Ich dachte der hat einen ACCEPTANCE FILTER ?

hmg
 Mandi

von Manfred S. (mandinice)


Lesenswert?

Hallöchen

Muss es erst testen aber "Can_set_mask_mob ();" sollte mein Problem 
lösen.

hmg
Mandi

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.