18f448 can bus library hatası

Başlatan ismailhtc, 10 Ekim 2014, 17:42:19

ismailhtc

     Microc de can library hazır kodu deneme amaçlı uğraşıyordum, start debuggere basıp kodları incelemeye çalıştığımda kırmızı renkli satırda takılı kalıyor ileri gitmiyor. nedenini çözemedim. Eğer yardımcı olabilirseniz sevinirim arkadaşlar.


kendi yapdığım hiç bir kod yok. sadece canbus ı microc hazır kodu ile anlamaya çalışıyordum ama microc hata veriyor. sorunun ne olduğunu öğrenmek istiyorum. sorunu aradım ama bulamadım.

dnacikaya

Library menüsünden can bus library seçtinmi. Proje ayarlarından da doğru işlemciyi seçmelisin.

ismailhtc

kontrol ettim seçiliymiş zaten. ama şöyle bi hata olabilir diyorum. o kırmızı satırda can bus hattı ile haberleşme onayı bekliyor olabilir. o yüzden de haberleşme gerçekleşene kadar diğer komutlara geçmiyor.  isiste mcp2551 olmadığı için devreyi kurmuştum. şimdi bir tane daha kurup ikisi üzerinden tekrar deneyeceğim.

ismailhtc

İki devre yaptım ikisine microc'nin hazır kodlarını attım fakat çalıştıramadım. CANInitialize(1,3,3,3,1,Can_Init_Flags);   satırında takılı kalıyor. yapılması gereken başka ne olabilir ki

dnacikaya

Yüklediğiniz görselde derleyici de not registered uyarısı var. Kullanım kısıtlamalı olabilirmi derleyiciniz. Ayrıca kullandığınız kodu ekleyin ya da linkini bildirin öyle bakalım.

ismailhtc

şuan ilerlemiyor dediğim satır kısmını hallettim. mcp2551 den kaynaklanıyormış. 8. bacağını 10 ohm ile şaseye vermiştim. direk şaseye verince çalıştı. ama şimdiki sorun data gönderemiyorum.
devrem resimdekine benzer şekilde. pic18f4580 ve mcp2551 kullandım.


osilatör olarak hs 8.Mhz seçili

1. picin programı
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned char Rx_Data_Len;                                   // received data length in bytes
char RxTx_Data[8];                                           // can rx/tx data buffer
char Msg_Rcvd;                                               // reception flag
const long ID_1st = 12111, ID_2nd = 3;                       // node IDs
long Rx_ID;

void main() {

  PORTC = 0;                                                // clear PORTC
  TRISC = 0;                                                // set PORTC as output

  Can_Init_Flags = 0;                                       //
  Can_Send_Flags = 0;                                       // clear flags
  Can_Rcv_Flags  = 0;                                       //

  Can_Send_Flags = _CAN_TX_PRIORITY_0 &                     // form value to be used
                   _CAN_TX_XTD_FRAME &                      //     with CANWrite
                   _CAN_TX_NO_RTR_FRAME;

  Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE &              // form value to be used
                   _CAN_CONFIG_PHSEG2_PRG_ON &              // with CANInit
                   _CAN_CONFIG_XTD_MSG &
                   _CAN_CONFIG_DBL_BUFFER_ON &
                   _CAN_CONFIG_VALID_XTD_MSG;
  
  CANInitialize(1,3,3,3,1,Can_Init_Flags);                  // Initialize CAN module
  CANSetOperationMode(_CAN_MODE_CONFIG,0xFF);               // set CONFIGURATION mode
  CANSetMask(_CAN_MASK_B1,-1,_CAN_CONFIG_XTD_MSG);          // set all mask1 bits to ones
  CANSetMask(_CAN_MASK_B2,-1,_CAN_CONFIG_XTD_MSG);          // set all mask2 bits to ones
  CANSetFilter(_CAN_FILTER_B2_F4,ID_2nd,_CAN_CONFIG_XTD_MSG);// set id of filter B2_F4 to 2nd node ID

  CANSetOperationMode(_CAN_MODE_NORMAL,0xFF);               // set NORMAL mode

  RxTx_Data[0] = 9;                                         // set initial data to be sent

  CANWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags);           // send initial message

  while(1) {                                                               // endless loop
    Msg_Rcvd = CANRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags); // receive message
    if ((Rx_ID == ID_2nd) && Msg_Rcvd) {                                   // if message received check id
      PORTC = RxTx_Data[0];                                                // id correct, output data at PORTC
      RxTx_Data[0]++ ;                                                     // increment received data
      Delay_ms(10);
      CANWrite(ID_1st, RxTx_Data, 1, Can_Send_Flags);                      // send incremented data back
    }
  }
}


2.picin programı
unsigned char Can_Init_Flags, Can_Send_Flags, Can_Rcv_Flags; // can flags
unsigned char Rx_Data_Len;                                   // received data length in bytes
char RxTx_Data[8];                                           // can rx/tx data buffer
char Msg_Rcvd;                                               // reception flag
const long ID_1st = 12111, ID_2nd = 3;                       // node IDs
long Rx_ID;

void main() {

  PORTC = 0;                                                // clear PORTC
  TRISC = 0;                                                // set PORTC as output

  Can_Init_Flags = 0;                                       //
  Can_Send_Flags = 0;                                       // clear flags
  Can_Rcv_Flags  = 0;                                       //

  Can_Send_Flags = _CAN_TX_PRIORITY_0 &                     // form value to be used
                   _CAN_TX_XTD_FRAME &                      //     with CANWrite
                   _CAN_TX_NO_RTR_FRAME;

  Can_Init_Flags = _CAN_CONFIG_SAMPLE_THRICE &              // form value to be used
                   _CAN_CONFIG_PHSEG2_PRG_ON &              // with CANInit
                   _CAN_CONFIG_XTD_MSG &
                   _CAN_CONFIG_DBL_BUFFER_ON &
                   _CAN_CONFIG_VALID_XTD_MSG &
                   _CAN_CONFIG_LINE_FILTER_OFF;

  CANInitialize(1,3,3,3,1,Can_Init_Flags);                  // initialize external CAN module
  CANSetOperationMode(_CAN_MODE_CONFIG,0xFF);               // set CONFIGURATION mode
  CANSetMask(_CAN_MASK_B1,-1,_CAN_CONFIG_XTD_MSG);          // set all mask1 bits to ones
  CANSetMask(_CAN_MASK_B2,-1,_CAN_CONFIG_XTD_MSG);          // set all mask2 bits to ones
  CANSetFilter(_CAN_FILTER_B2_F3,ID_1st,_CAN_CONFIG_XTD_MSG);// set id of filter B2_F3 to 1st node ID

  CANSetOperationMode(_CAN_MODE_NORMAL,0xFF);               // set NORMAL mode

  while (1) {                                                              // endless loop
    Msg_Rcvd = CANRead(&Rx_ID , RxTx_Data , &Rx_Data_Len, &Can_Rcv_Flags); // receive message
    if ((Rx_ID == ID_1st) && Msg_Rcvd) {                                   // if message received check id
      PORTC = RxTx_Data[0];                                                // id correct, output data at PORTC
      RxTx_Data[0]++ ;                                                     // increment received data
      CANWrite(ID_2nd, RxTx_Data, 1, Can_Send_Flags);                      // send incremented data back
    }
  }
}

ismailhtc

Data gönderme olayı kartım ile alakalıymış şuan düzgün çalışıyor sorun kalmadı gibi. Çalışmamasının sebebi 5.8 voltluk bir besleme vermişim. mcp2551 ler zarar görmüş. mcp leri değiştirince sorun halloldu.