Go Down

Topic: PROBLEME DE LECTURE DU BUS CAN (Read 1 time) previous topic - next topic

alou1984

Apr 26, 2013, 06:33 pm Last Edit: Apr 27, 2013, 12:55 pm by alou1984 Reason: 1
Bonjour Cher collègue du forum
Je viens de démarre sur arduino. j'ai la MEGA ADK + CAN BUS SHEILD de spakfun.
Je souhaite lire sans filtrage le bus can d une voiture
J'ai utilisé la bibliothèque can et l exemble nommer le listener (listener.ino) trouvant dans  http://modelrail.otenko.com/arduino/arduino-controller-area-network-can
Pour visualiser les trames can (tous trames sans filtrage),j ulise le moniteur serie.
Les tests donnent les resultats cette ligne de maniere infini
  • [rx] Status: 7F  len:F  frame: FFFFFFF   EXT?:1  FILTER:3  BUFFER :0 data: [ FF FF FF FF FF FF FF FF ]

    Si j interprète les résultats, Peux être que ce n est pa ça!  
    Status -> donne l etat du buffer de reception  7F
    EXT?:1 --> mode etendu de la trame  alors que je veux etre en mode standard
    FILTER:3 --> filtre 3 est actif alors que je veux pas filtre
    Code: [Select]

    void setup() {                
     Serial.begin(9600);
     // initialize CAN bus class
     // this class initializes SPI communications with MCP2515
     CAN.begin();
     CAN.baudConfig(BUS_SPEED);
     Serial.println("hello");  
     //Wait 10 seconds so that I can still upload even
     //if the previous iteration spams the serial port
     delay(1000);
    /*CAN.setMaskOrFilter(MASK_0,   0b00000000, 0b00001000, 0b00011100, 0b00000000);
    CAN.setMaskOrFilter(FILTER_0, 0b00000000, 0b00000000, 0b00000000, 0b00000000);
    CAN.setMaskOrFilter(FILTER_1, 0b00000000, 0b00000000, 0b00000000, 0b00000000);*/
     CAN.toggleRxBuffer0Acceptance(false, true);
    }
    byte inc = 0;
    void printBuf(byte rx_status, byte length, uint32_t frame_id, byte filter, byte buffer, byte *frame_data, byte ext) {    
         Serial.print("[Rx] Status:");
         Serial.print(rx_status,HEX);
         
         Serial.print(" Len:");
         Serial.print(length,HEX);

         Serial.print(" Frame:");
         Serial.print(frame_id,HEX);

         Serial.print(" EXT?:");
         Serial.print(ext==1,HEX);
         
         Serial.print(" Filter:");
         Serial.print(filter,HEX);

         Serial.print(" Buffer:");
         Serial.print(buffer,HEX);
         
         Serial.print(" Data:[");
         for (int i=0;i<8;i++) {
           if (i>0) Serial.print(" ");
           Serial.print(frame_data[i],HEX);
         }
         Serial.println("]");
    }
    void loop() {
     byte length,rx_status,filter,ext;
     uint32_t frame_id;
     byte frame_data[8];
         //clear receive buffers, just in case.
         frame_data[0] = 0x00;
         frame_data[1] = 0x00;
         frame_data[2] = 0x00;
         frame_data[3] = 0x00;
         frame_data[4] = 0x00;
         frame_data[5] = 0x00;
         frame_data[6] = 0x00;
         frame_data[7] = 0x00;
     
         frame_id = 0x0000;
         length = 0;
         
         rx_status = CAN.readStatus();

         if (CAN.buffer0DataWaiting()) {
          CAN.readDATA_ff_0(&length,frame_data,&frame_id, &ext, &filter);
          Serial.print("[0] ");
          printBuf(rx_status, length, frame_id, filter, 0, frame_data, ext);
         }  
         if (CAN.buffer1DataWaiting()) {
          CAN.readDATA_ff_1(&length,frame_data,&frame_id, &ext, &filter);
          Serial.print("[1] ");
          printBuf(rx_status, length, frame_id, filter, 1, frame_data, ext);      
         }
    }


    je veux faire un scan sans filtrer ?
    Merci pour votre aide  

Go Up