Zur Übersicht - INFO - Neueste 50 Beiträge - Neuer Beitrag - Suchen - FAQ - Zum CC1-Forum - Zum CC-Pro-Forum

Fragen zum CAN-Bus Kategorie: CAN-Bus (von Markus H - 16.06.2010 20:22)
Ich nutze:
CC2-StarterBoard, OSOPT V3.0
Hallo Gemeinde,

mir ist da was zur Programmierung des CAN-Busses nicht ganz klar und kanns momentan nicht
testen, da mein rechter Arm in einer Schiene liegt, nix mit schauben und Löten... :-(
Wie muss ich vorgehen wenn ich mehrere Datenframes (?) über einen Kanal senden will?

Hier mal ein kleiner Auszug:


/********************************
    can_send.c2
    Sender
    4 analoge Eingänge
********************************/


byte data_s[7];
byte data_s1[7];

//------------
  thread main
//------------
{
  can.init(can.SPEED_250,0x0000,0x0000);
  loop
  {
    sleep 1000;

    //Datenframe 1

    data_s[0] = globvar.N_Mot / 256;
    data_s[1] = globvar.N_Mot and 255;
    data_s[2] = globvar.p_Oel / 256;
    data_s[3] = globvar.p_Oel and 255;
    data_s[4] = globvar.Reskan1 / 256;
    data_s[5] = globvar.Reskan1 and 255;
    data_s[6] = globvar.Reskan2 / 256;
    data_s[7] = globvar.Reskan2 and 255;
    can.send(1,400,data_s,8);

    //Datenframe 2

    data_s1[0] = globvar.Reskan3 / 256;
    data_s1[1] = globvar.Reskan3 and 255;
    data_s1[2] = globvar.Reskan4 / 256;
    data_s1[3] = globvar.Reskan4 and 255;
    data_s1[4] = globvar.Reskan5 / 256;
    data_s1[5] = globvar.Reskan5 and 255;
    data_s1[6] = globvar.Reskan6 / 256;
    data_s1[7] = globvar.Reskan6 and 255;
    can.send(1,401,data_s1,8);
  }
}



Dann am Empfänger:


/********************************
    can_receive.c2

    Empfänger
 ********************************/


byte data_r[7];
byte data_r1[7];

//------------
  thread main
//------------
{
  can.init(can.SPEED_250,0x0000,0x0000);

  can.expect (1,400);
  {
    wait can.rxd(1);
    can.get(1,data_r);
   
    globvar.N_Mot = (data_r[0] * 256 + data_r[1]);
    globvar.p_Oel = (data_r[2] * 256 + data_r[3]);
    globvar.Reskan1 = (data_r[4] * 256 + data_r[5]);
    globvar.Reskan2 = (data_r[6] * 256 + data_r[7]);
  }

  can.expect (1,401);
  {
    wait can.rxd(1);
    can.get(1,data_r1);
   
    globvar.Reskan3 = (data_r1[0] * 256 + data_r1[1]);
    globvar.Reskan4 = (data_r1[2] * 256 + data_r1[3]);
    globvar.Reskan5 = (data_r1[4] * 256 + data_r1[5]);
    globvar.Reskan6 = (data_r1[6] * 256 + data_r1[7]);
  }
}


Kann ich einfach die CAN-ID's erhöhen (400, 401, 402, ...)?
Wieso müssen diese 3-stellig sein (nur so nebenbei)?
Muss beim Empfänger noch irgend wo eine loop hin? Laut Buch von André schon...
Oder geht das einfacher / kürzer?

Danke für Eure Hilfe,
Markus H.


    Antwort schreiben


Antworten:

Re: Fragen zum CAN-Bus (von reneforster - 17.06.2010 16:15)
    Re: Fragen zum CAN-Bus (von Markus H - 19.06.2010 15:45)
        Re: Fragen zum CAN-Bus (von reneforster - 19.06.2010 16:26)
    Re: Fragen zum CAN-Bus (von nitraM - 18.06.2010 7:42)
        Re: Fragen zum CAN-Bus (von reneforster - 18.06.2010 10:19)