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.
(http://s28.postimg.cc/arrm3mg4p/Ekran_Al_nt_s.jpg) (http://postimg.cc/image/arrm3mg4p/)
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.
Library menüsünden can bus library seçtinmi. Proje ayarlarından da doğru işlemciyi seçmelisin.
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.
İ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
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.
ş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.
(http://s13.postimg.cc/f5c5rz4v7/canbus.jpg) (http://postimg.cc/image/f5c5rz4v7/)
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
}
}
}
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.