ورود به حساب ثبت نام جدید فراموشی کلمه عبور
برای ورود به حساب کاربری خود، نام کاربری و کلمه عبورتان را در زیر وارد کرده و روی «ورود به سایت» کلیک کنید.





اگر فرم ورود برای شما نمایش داده نمیشود، اینجا را کلیک کنید.









اگر فرم ثبت نام برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.









اگر فرم بازیابی کلمه عبور برای شما نمایش داده نمی‌شود، اینجا را کلیک کنید.





کاربران برچسب زده شده

نمایش نتایج: از 1 به 4 از 4
  1. #1
    2016/10/15
    3
    0

    مشکل ارسال و دریافت داده از شبکه CAN-

    سلام من از برد آموزشی lpc1768 استفاده می کنم و متاسفانه مثالی که برای CAN نوشته شده مشکل داره و جواب نمیده یه سری کار روش انجام دادم
    1- تنظیمات پین ها درست نبود مطابق با سخت افزار اصلاح کردم ( رو برد فقط به CAN2 وصل هست)
    2- با jlink روند برنامه رو تست کردم اصلا اینتراپت مربوط به CAN فعال نمیشه (نه برای send نه برای receive)
    من برای تست از دو تا برد LPC1768 استفاده کردم. در ضمن CAN ECU رو هم متصل کردم ولی بازم جوابی نگرفتم. (و تنظیمات ID رو هم مطابق با یکی از پیام های ECU تنظیم کردم)
    میشه راهنمایی بفرمایین.
  2. #2
    2012/07/09
    مشهد
    109
    4

    پاسخ : مشکل ارسال و دریافت داده از شبکه CAN-

    نقل قول نوشته اصلی توسط parisa.masnadi

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

    سلام من از برد آموزشی lpc1768 استفاده می کنم و متاسفانه مثالی که برای CAN نوشته شده مشکل داره و جواب نمیده یه سری کار روش انجام دادم
    1- تنظیمات پین ها درست نبود مطابق با سخت افزار اصلاح کردم ( رو برد فقط به CAN2 وصل هست)
    2- با jlink روند برنامه رو تست کردم اصلا اینتراپت مربوط به CAN فعال نمیشه (نه برای send نه برای receive)
    من برای تست از دو تا برد LPC1768 استفاده کردم. در ضمن CAN ECU رو هم متصل کردم ولی بازم جوابی نگرفتم. (و تنظیمات ID رو هم مطابق با یکی از پیام های ECU تنظیم کردم)
    میشه راهنمایی بفرمایین.
    مشکل میتونه از چیزای زیادی باشه
    برنامتون رو بذارین تا بررسی بشه قسمت initial و ...
    از سخت افزار هم مطمعن بشین که سیگنال از پایه میکرو خارج میشه تا ورودش به پایه میکروی دریافت کننده...
    مقاومت بار خط رو هم چک کنید...
  3. #3
    2016/10/15
    3
    0

    پاسخ : مشکل ارسال و دریافت داده از شبکه CAN-

    سلام
    من مسئله رو دوباره بررسی کردم. زمانی که فیلتر رو bypass می کنم جواب می گیرم ولی اگه accpetance filter رو فعال کنم به مشکل می خورم.
    قسمت initialize رو اینطوری تغییر دادم.

    void can_init()
    {
    LPC_CANAF->AFMR = 0x00000001; /*Acceptance Filter Mode Register = Off */
    LPC_PINCON->PINSEL0 |= (1 << 9); /* Pin P0.4 used as RD2 (CAN2) */
    LPC_PINCON->PINSEL0 |= (1 << 11); /* Pin P0.5 used as TD2 (CAN2) */
    LPC_CAN2->MOD = 1; /* Enter reset mode */
    LPC_CAN2->IER = 0; /* Disable all interrupts */
    LPC_CAN2->GSR = 0; /* Clear status register */
    LPC_CAN2->CMR = CAN_CMR_RRB | CAN_CMR_AT | CAN_CMR_CDO; /* Request command to release Rx, Tx buffer and clear data overrun */
    i = LPC_CAN2->ICR; /* Read to clear interrupt pending in interrupt capture register */

    /* Clear AF Ram region */
    for (i = 0; i < CANAF_RAM_ENTRY_NUM; i++) {
    LPC_CANAF_RAM->mask[i] = 0;
    }

    /* Reset address registers */
    LPC_CANAF->SFF_sa = 0;
    LPC_CANAF->SFF_GRP_sa = 0;
    LPC_CANAF->EFF_sa = 0;
    LPC_CANAF->EFF_GRP_sa = 0;
    LPC_CANAF->ENDofTable = 0;

    CAN_cfgBaudrate(2, 500000); /* Set bit timing CAN2 */

    LPC_CAN2->IER = 0x00000001; /* Enable Rx interrupt */

    CAN_wrFilter (2, 418, STANDARD_FORMAT); /* set ACF -ID = 418 */
    LPC_CANAF->AFMR = 0x00000004; /* Use acceptance filter */


    NVIC_EnableIRQ(CAN_IRQn); /* Enable CAN interrupt */

    LPC_CAN2->MOD = 0; /* Enter normal mode */
    }

    و acceptance filter :

    void CAN_wrFilter (uint32_t ctrl, uint32_t id, uint8_t format) {
    static int CAN_std_cnt = 0;
    static int CAN_ext_cnt = 0;
    uint32_t buf0, buf1;
    int cnt1, cnt2, bound1;

    /* Acceptance Filter Memory full */
    if ((((CAN_std_cnt + 1) >> 1) + CAN_ext_cnt) >= 512)
    return; /* error: objects full */

    /* Setup Acceptance Filter Configuration
    Acceptance Filter Mode Register = Off */
    LPC_CANAF->AFMR = 0x00000001;

    if (format == STANDARD_FORMAT) { /* Add mask for standard identifiers */
    id |= (ctrl-1) << 13; /* Add controller number */
    id |= 1 << 11; /* interrupt enable bit */
    id &= 0x0000FFFF; /* Mask out 16-bits of ID */

    /* Move all remaining extended mask entries one place up
    if new entry will increase standard ID filters list */
    if ((CAN_std_cnt & 0x0001) == 0 && CAN_ext_cnt != 0) {
    cnt1 = (CAN_std_cnt >> 1);
    bound1 = CAN_ext_cnt;
    buf0 = LPC_CANAF_RAM->mask[cnt1];
    while (bound1--) {
    cnt1++;
    buf1 = LPC_CANAF_RAM->mask[cnt1];
    LPC_CANAF_RAM->mask[cnt1] = buf0;
    buf0 = buf1;
    }
    }

    if (CAN_std_cnt == 0) { /* For entering first ID */
    LPC_CANAF_RAM->mask[0] = 0x0000FFFF | (id << 16);
    } else if (CAN_std_cnt == 1) { /* For entering second ID */
    if ((LPC_CANAF_RAM->mask[0] >> 16) > id)
    LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] >> 16) | (id << 16);
    else
    LPC_CANAF_RAM->mask[0] = (LPC_CANAF_RAM->mask[0] & 0xFFFF0000) | id;
    } else {
    /* Find where to insert new ID */
    cnt1 = 0;
    cnt2 = CAN_std_cnt;
    bound1 = (CAN_std_cnt - 1) >> 1;
    while (cnt1 <= bound1) { /* Loop through standard existing IDs */
    if ((LPC_CANAF_RAM->mask[cnt1] >> 16) > id) {
    cnt2 = cnt1 * 2;
    break;
    }
    if ((LPC_CANAF_RAM->mask[cnt1] & 0x0000FFFF) > id) {
    cnt2 = cnt1 * 2 + 1;
    break;
    }
    cnt1++; /* cnt1 = U32 where to insert new ID */
    } /* cnt2 = U16 where to insert new ID */

    if (cnt1 > bound1) { /* Adding ID as last entry */
    if ((CAN_std_cnt & 0x0001) == 0) /* Even number of IDs exists */
    LPC_CANAF_RAM->mask[cnt1] = 0x0000FFFF | (id << 16);
    else /* Odd number of IDs exists */
    LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | id;
    } else {
    buf0 = LPC_CANAF_RAM->mask[cnt1]; /* Remember current entry */
    if ((cnt2 & 0x0001) == 0) /* Insert new mask to even address */
    buf1 = (id << 16) | (buf0 >> 16);
    else /* Insert new mask to odd address */
    buf1 = (buf0 & 0xFFFF0000) | id;

    LPC_CANAF_RAM->mask[cnt1] = buf1; /* Insert mask */

    bound1 = CAN_std_cnt >> 1;
    /* Move all remaining standard mask entries one place up */
    while (cnt1 < bound1) {
    cnt1++;
    buf1 = LPC_CANAF_RAM->mask[cnt1];
    LPC_CANAF_RAM->mask[cnt1] = (buf1 >> 16) | (buf0 << 16);
    buf0 = buf1;
    }

    if ((CAN_std_cnt & 0x0001) == 0) /* Even number of IDs exists */
    LPC_CANAF_RAM->mask[cnt1] = (LPC_CANAF_RAM->mask[cnt1] & 0xFFFF0000) | (0x0000FFFF);
    }
    }
    CAN_std_cnt++;
    } else { /* Add mask for extended identifiers */
    id |= (ctrl-1) << 29; /* Add controller number */

    cnt1 = ((CAN_std_cnt + 1) >> 1);
    cnt2 = 0;
    while (cnt2 < CAN_ext_cnt) { /* Loop through extended existing masks */
    if (LPC_CANAF_RAM->mask[cnt1] > id)
    break;
    cnt1++; /* cnt1 = U32 where to insert new mask */
    cnt2++;
    }

    buf0 = LPC_CANAF_RAM->mask[cnt1]; /* Remember current entry */
    LPC_CANAF_RAM->mask[cnt1] = id; /* Insert mask */

    CAN_ext_cnt++;

    bound1 = CAN_ext_cnt - 1;
    /* Move all remaining extended mask entries one place up */
    while (cnt2 < bound1) {
    cnt1++;
    cnt2++;
    buf1 = LPC_CANAF_RAM->mask[cnt1];
    LPC_CANAF_RAM->mask[cnt1] = buf0;
    buf0 = buf1;
    }
    }

    /* Calculate std ID start address (buf0) and ext ID start address (buf1) */
    buf0 = ((CAN_std_cnt + 1) >> 1) << 2;
    buf1 = buf0 + (CAN_ext_cnt << 2);

    /* Setup acceptance filter pointers */
    LPC_CANAF->SFF_sa = 0x08;
    LPC_CANAF->SFF_GRP_sa = 0x08;
    LPC_CANAF->EFF_sa = 0x08;
    LPC_CANAF->EFF_GRP_sa = 0x08;
    LPC_CANAF->ENDofTable = 0x7D0;

    LPC_CANAF->FCANIE |= 1;
    }

    هر زمان که داده رو باس CAN میاد اینتراپت فعال میشه ولی FCANIC1 مقدارش صفره برای همین داده ای نمی خونه

    void CAN_IRQHandler (void) {
    volatile uint32_t icr;
    uint16_t i = 0;


    /* check CAN controller 2 */
    icr = LPC_CAN2->ICR; /* clear interrupts */

    if (icr & (1 << 0)) { /* CAN Controller #2 meassage is received */
    CAN_rdMsg (2, &CAN_RxMsg[1]); /* read the message and Release receive buffer */
    CAN_RxRdy[1] = 1; /* set receive flag */
    }

    for (i = 0; i < Full_CAN_Entry_Num; i++)
    {
    if (Chip_CAN_GetFullCANIntStatus(i)) {
    uint8_t SCC;
    Chip_CAN_FullCANReceive(i, &CAN_RxMsg[1], &SCC);
    }

    }
    }

    و

    uint32_t Chip_CAN_GetFullCANIntStatus(uint8_t ObjID)
    {
    if (ObjID < 64) {
    return (LPC_CANAF->FCANIC1 & (1 << (ObjID % 32))) ? SET : RESET;
    }
    return RESET;
    }


    /* Read FullCAN message received */
    Status Chip_CAN_FullCANReceive(uint8_t ObjID, CAN_msg *pMsg, uint8_t *pSCC) {
    uint32_t *pSrc;
    pSrc = (uint32_t *) LPC_CANAF_RAM;

    pSrc += Full_CAN_Entry_Num + ObjID * 3;
    /* If the AF hasn't finished updating msg info */
    if (((pSrc[0] >> CANAF_FULLCAN_MSG_SEM_POS) & CANAF_FULLCAN_MSG_SEM_BITMASK) !=
    CANAF_FULCAN_MSG_AF_FINISHED) {
    return ERROR;
    }

    /* Mark that CPU is handling message */
    pSrc[0] = CANAF_FULCAN_MSG_CPU_READING << CANAF_FULLCAN_MSG_SEM_POS;
    /* Read Message */
    *pSCC = (pSrc[0] >> CANAF_FULLCAN_MSG_SCC_POS) & CANAF_FULLCAN_MSG_SCC_BITMASK;
    pMsg->id = (pSrc[0] >> CANAF_FULLCAN_MSG_ID11_POS) & CANAF_FULLCAN_MSG_ID11_BITMASK;
    pMsg->type = 0;
    if (pSrc[0] & (1 << CANAF_FULLCAN_MSG_RTR_POS)) {
    pMsg->type = 1; //remote data
    }
    pMsg->len = (pSrc[0] >> CANAF_FULLCAN_MSG_DLC_POS) & CANAF_FULLCAN_MSG_DLC_BITMASK;
    ((uint32_t *) pMsg->data)[0] = pSrc[1];
    ((uint32_t *) pMsg->data)[1] = pSrc[2];

    /* Recheck message status to make sure data is not be updated while CPU is reading */
    if (((pSrc[0] >> CANAF_FULLCAN_MSG_SEM_POS) & CANAF_FULLCAN_MSG_SEM_BITMASK) !=
    CANAF_FULCAN_MSG_CPU_READING) {
    return ERROR;
    }

    return SUCCESS;
    }

    میشه لطفا راهنماییم کنین؟
  4. #4
    2012/03/17
    یوردوم تبریز
    71
    18

    پاسخ : مشکل ارسال و دریافت داده از شبکه CAN-

    اینم جواب سوالتون:

    مهمان عزیز شما حق دیدن لینک ها را ندارید

    عضویت

نمایش نتایج: از 1 به 4 از 4

موضوعات مشابه

  1. پاسخ: 12
    آخرين نوشته: 2016/04/14, 12:50
  2. مشکل ارسال و دریافت داده از ماژول RFID-RC522
    توسط milad1393 در انجمن میکروکنترلرهای AVR
    پاسخ: 0
    آخرين نوشته: 2016/01/17, 20:48
  3. پاسخ: 2
    آخرين نوشته: 2014/08/07, 19:05
  4. ارسال و دریافت داده از طریق پورت usb بین اندروید و pc
    توسط turner در انجمن برنامه نویسی و اینترفیس
    پاسخ: 0
    آخرين نوشته: 2014/01/05, 09:00
  5. دریافت 16 بیت و ارسال 32 بیت داده به کامپیوتر از طریق پورت سریال
    توسط ashaebani2002 در انجمن میکروکنترلرهای AVR
    پاسخ: 4
    آخرين نوشته: 2012/05/18, 19:51

کلمات کلیدی این موضوع

علاقه مندي ها (Bookmarks)

علاقه مندي ها (Bookmarks)

مجوز های ارسال و ویرایش

  • شما نمیتوانید موضوع جدیدی ارسال کنید
  • شما امکان ارسال پاسخ را ندارید
  • شما نمیتوانید فایل پیوست کنید.
  • شما نمیتوانید پست های خود را ویرایش کنید
  •