logo elektroda
logo elektroda
X
logo elektroda
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

can-polaczenie kabelkow do wtyczki DS-9 i prosta komunikacja

rycerz_83 26 Sty 2007 17:44 1596 2
  • #1 3490586
    rycerz_83
    Poziom 11  
    witam, mamy powazny problem z ktorym nie mozemy ruszyc(jestesmy z cana zieloni, a musimy to zrobic).

    otoz:
    mam 2 pudelka (niestety nie znam ich nazwy, prawdopodobnie skonstruowane na potrzeby uczelni), posiadają po dwa gniazda obslugujace CAN-a, i teraz musimy pokazac jakakolwiek transmisje pomiedzy pudelkami z wykorzystaniem CAN-a,

    pudelka posiadaja 2 - linijkowy wyswietlacz, oraz 8 diod wraz z przelacznikiem do kazdej z nich.

    zaczelismy od przygotowania kabelka i tu 1 problem,
    polaczylismy kabelki jak na zalaczonym obrazku,

    jak sie okazalo do 1 z pudelek nie trzeba zasilania bo widocznie poprzez zyle zasilania zasila go 2 pudelko, czy jest ok czy tej zyly lepiej nie podlaczac a uzyc zwyklego zasilania kazdego z pudelek?

    a wiec zaladowalismy przykladowy program i nic nie dzialalo,

    wiec sprobowalismy skrosowac kabelki CAN0-H i CAN0-L aby bylo cos w rodzaju skretki skrosowanej jak sie np 2 PC lacza poprzez karty sieciowe, rowniez nie dzialalo.

    a wiec odlutowalismy wszystkie kabelki poza zylami z danymi, i probowalismy je podlaczyc normalnie i w sposob skrosowany, rowniez komunikacja nie zadzialala.

    i tu wazne, ze byc moze program, ktory mial testowac komunikacje moze byc nie poprawny.

    i w zwiazku ztym duza prosba o pomoc:
    w jaki poprawny sposob nalezy podlaczyc poszczegolne zyly do DB-9 aby istniala wzajemna komunikacja pomiedzy dwoma pudelkami?
    czy moze jednak ktorys z sposobow, ktore probowalismy, byl poprawny a jest to kwestia poprawnosci pliku.

    prosilbym rowniez moze o jakies przykladowe programy pisane w C testujace komunikacje, ktorych , po rozwiazniu probelmu z kabelkiem, moglibysmy uzyc do testowania i jako podstawe do rozbudowy.


    zamieszczam rowniez tresc pliku, ktory otrzymalismy od prowadzacego(przy czym zaznaczyl, ze on sam nie wie czy to dziala):

    
    /**********************************************
    *  | Przyklad obslugi magistrali CAN
    *  | z bibloteki BG.lib
    *  |===========================================
    *  |  Firma  : (c)BigTronic
    *  |  Autor  : R.Szylinski (rszylinski@poczta.onet.pl)
    *  |  Data   : 06-03-26
    *  |  Wersja : 0.00
    *  |  Zbiór  : EX_CAN.c
    *  |  uP     : 80C390
    *  |  Model  : LARGE
    *----------------------------
    * Zalozenia :
    * - Program wysyla co jakis czas domyslne ramki
    *   na oba interfejsy
    * - odbiera ramki CAN 2.0B
    * - robi za mostek gdy obierze ramke z interfejsu 0
    *   wysyla na interfejs 1
    * - robi za mostek gdy obierze ramke z interfejsu 1
    *   wysyla na interfejs 0
    */
    
    #include "HardWare.h"
    #include "BIOSi.h"
    #include "CAN0.h"
    #include "CAN1.h"
    
    void putHex2B(char Pos, char Data ) {
      putchar( aRS ); putchar( Pos );
    }
    
    void putHexMem( char Pos, void *Buf, char Size ) {
      putchar( aRS ); putchar( Pos );
    }
    
    void DispMsg( TCANmsg xdata *Msg) {
      putHex2B( dLine1+3, Msg->ID0 );
      putHex2B( dLine1+5, Msg->ID1 );
      putHex2B( dLine1+7, Msg->ID2 );
      putHex2B( dLine1+9, Msg->ID3 );
    
      if( Msg->Size ) putHexMem( dLine2, Msg->Data, Msg->Size );
    }
    
    void XRAMclear(void) {
      byte xdata *Mem =0;
      do { *Mem =0; } while( (word)(++Mem) & 0x8000 == 0 );
    }
    
    void main(void) {
      xdata TCANmsg Msg;
      TBT BT;
      bit   bOk;
      dword Cnt =0;
    
       /* Enable access to P4CNT */
      TimedAccessProtected();
      P4CNT =0; /* P4.0-7 as IO */
      Serwis_Blik();
    
      XRAMclear();
    
      CAN0_Init();
      /* z ponizszych ustawien */
      /* przy zastosowaniu kwarcu 18,432MHz  */
      /* wychodzi predkosc na CAN Bauderate =102406bps */
      BT.SJW   =  1;
      BT.BPR   = 10;
      BT.SMP   =  1;
      BT.TSEG2 =  3;
      BT.TSEG1 =  5;
    
      CAN0_Setup( &BT, 1 );
      CAN0_Filter( 1, 0xFFFF, 0xFFFF );
    
      CAN1_Init();
    
      CAN1_Setup( &BT, 1 );
      CAN1_Filter( 1, 0xFFFF, 0xFFFF );
    
      enable();
    
      while(1) {
        if( Cnt ) Cnt--;
        else {
          Cnt =10000;
          /* wyslanie domyslnej ramki na oba interfejsy */
          /* ramka w formacie CAN2.0B                   */
          Msg.ID0 =0x12;  Msg.ID1 =0x34;  Msg.ID2 =0x56;  Msg.ID3 =0x78;
          Msg.EX_ST =1;
          Msg.Data[0] ='C';
          Msg.Data[1] ='A';
          Msg.Data[2] ='N';
          Msg.Data[3] ='0';
          Msg.Size =4;
          CAN0_MsgOut(&Msg);
          Msg.Data[3] ='1';
          CAN1_MsgOut(&Msg);
        }
    
        if( (bOk =CAN1_MsgIn(&Msg)) ) {
          CAN0_MsgOut(&Msg);
          Serwis_Blik();
          DispMsg( &Msg);
          Cnt =10000;
        }
    
        if( (bOk =CAN0_MsgIn(&Msg)) ) {
          CAN1_MsgOut(&Msg);
          DispMsg( &Msg);
          Serwis_Blik();
          Cnt =10000;
        }
      }
    }
    


    bylbym bardzo zobowiazany jesli ktos moglby pomoc oraz zamiescic lub podeslac link do przykladowych programow testujacych komunikacje,
    nie mamy do kogo zwrocic sie z tym problemem.
  • #2 3496765
    Booby
    Poziom 14  
    Jeśli chodzi o połączenie układów, to wszystkie linie należy połączyć "na wprost". Wtedy wystarczy zasilać jeden układ. Linii CAN_Lo i CAN_Hi nie należy krosować. CAN_Lo na być podłączone do CAN_Lo a CAN_Hi do CAN_Hi. Jeśli chodzi o program to nie znam biblioteki BG.lib. Poza tym oprogramowanie najniższego stopnia znacznie zależy od zastosowanego sterownika magistrali CAN, więc w sprawie programu raczej nie pomogę. Czy w ogóle są transmitowane ramki możecie sprawdzić nawet miernikiem. Na linii CAN_Lo powinno być napięcie około 2.3V a na CAN_HI około 2.7V jeśli jest transmisja ciągła (do testów możecie zmienić "cnt=10000" na mniejszą wartość ). Proponuję sprawdzić najpierw oddzielnie każdą sztukę urządzenia.
  • #3 3503673
    rycerz_83
    Poziom 11  
    dzieki za podpowiedz, ostatecznie u nas zadzialalo tak:
    rzeczywiscie linie danych na wprost, masa rowniez jest potrzebna, i jednak zasilanie kazdego z pudelek osobno, no i jakos poszlo.
REKLAMA