Jump to content
Zombie47

Работа с CAN шиной на PIC через SPI

Recommended Posts

Наверно мне бы стоило в вопросах для начинающих задать этот вопрос, но с другой стороны у меня уже это все давно работает, хоть я не знаю как)))
Среда MicroC Pro
У меня МК PIC16F1847 с кварцем 20Mhz, к нему подключен по SPI MCP2510 с кварцем 8Mhz а к нему MCP2551
Вот у меня в коде что то вроде стандартной конфигурации CAN SPI

void CANinit(void){
 Can_Init_Flags = 0;
  Can_Send_Flags = 0;                                         // clear flags
  Can_Rcv_Flags  = 0;                                         //
  Can_Send_Flags = _CANSPI_TX_PRIORITY_0 &                    // form value to be used
                   _CANSPI_TX_STD_FRAME &                     //     with CANSPIWrite
                   _CANSPI_TX_NO_RTR_FRAME;
  Can_Init_Flags = _CANSPI_CONFIG_SAMPLE_THRICE &             // Form value to be used
                   _CANSPI_CONFIG_PHSEG2_PRG_ON &             //  with CANSPIInit
                   _CANSPI_CONFIG_STD_MSG &
                   _CANSPI_CONFIG_DBL_BUFFER_ON &
                   _CANSPI_CONFIG_VALID_STD_MSG;
  //SPI1_Init();                                                     // initialize SPI1 module
  CANSPIInitialize(1,1,3,3,1,Can_Init_Flags);                      // Initialize external CANSPI module
  CANSPISetOperationMode(_CANSPI_MODE_CONFIG,0xFF);                // set CONFIGURATION mode
  CANSPISetMask(_CANSPI_MASK_B1,-1,_CANSPI_CONFIG_STD_MSG);        // set all mask1 bits to ones
  CANSPISetMask(_CANSPI_MASK_B2,-1,_CANSPI_CONFIG_STD_MSG);        // set all mask2 bits to ones
  CANSPISetFilter(_CANSPI_FILTER_B2_F3,ID_1st,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò
    CANSPISetFilter(_CANSPI_FILTER_B2_F4,ID_2nd,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò
    CANSPISetFilter(_CANSPI_FILTER_B1_F2,ID_3rd,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò
    CANSPISetFilter(_CANSPI_FILTER_B2_F1,ID_4th,_CANSPI_CONFIG_STD_MSG);        // set id of filter B2_F3 to 1st node ID    áåç ýòîé ñòðîêè íå ðàáîòàåò

  CANSPISetOperationMode(_CANSPI_MODE_NORMAL,0xFF);
}

Не очень уже помню как и где это настраивается, но скорость работы у меня 500 000 байт в секунду вроде, ну или какие там единицы.
Не хочу перегружать вопрос кучей кода поэтому буду вырезать главное чтобы было читабельно.
В основном юзаю отправку например вот:
 

  zaderzka=180; //величина задержки 9765 это 1 сек. 190 задержка это 0.019сек
  zaderzka_flag=1; 
if (i>zaderzka) {
 CANSPIWrite(ID_512, RxTx_Data512, 8, Can_Send_Flags);
 RxTx_Data512[5]++;//счетчик от 00 до FF
}

Вопросы и проблемы:
1. я формирую задержку таймером, который запускаю флагом в коде, и я эту задержку использую для отправки в SPI шину, там проходит время по посылке в SPI и тд, поэтому тайминг отправки CAN не точный и плавает. А мне надо чтобы непосредственно MCP2510 слал мой пакет в шину с определенным таймингом как это сделать?
2. в шине есть еще устройства, они тоже шлют в шину пакеты со своим таймингом. Вообщем иногда я вижу очень редко пакеты встречаются, но контроллер MCP2510 вроде как рулит чтобы не было нахлеста. По идее хорошо бы чтобы каждое устройство попадало в свой тайминг, но я не могу выдержать отправку раз в 20мсек. у меня плавает туда сюда то 25 то 22 то 26 и тд, и поэтому встречаются места там где пересекаются пакеты и как я вижу по счетчикам, один пакет у меня просто теряется, а другой пакет который я шлю почему то шлется два три раза подряд, именно MCP2510 так как счетчик без изменений то-есть программа не сделала цикла.
3. Как вообще настраивается прием сообщений? как я понял настройкой фильтров типо этого:  CANSPISetFilter(_CANSPI_FILTER_B2_F1,ID_4th,_CANSPI_CONFIG_STD_MSG);
Тоесть я правильно понимаю что всего там ограниченное количество фильтров которое я могу использовать на прием?

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...