Từng bước tiếp cận và chinh phục giao thức CAN của dsPIC (30F4012)

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • minhtr123
    Nhập môn đệ tử
    • Nov 2008
    • 9

    #16
    Nguyên văn bởi hopeman View Post
    Thời gian vừa qua tôi tìm cách làm giao thức CAN nhưng tìm trên PICVN thấy cũng không nhiều lắm và có vẻ như cũng chưa có tiền bối nào dạy cụ thể việc này, sau một thời gian mò mẫm tôi đã làm được cho 2 em dsPIC30f4012 nói chuyện được với nhau (tất nhiên là có sự trợ giúp của 2 em MCP2551) nên tôi mở ra mục này để nếu ai quan tâm có thể cùng tham gia và tiếp cận nhanh hơn với CAN trên dsPIC mà ở đây tôi chọn ví dụ là con 30F4012
    Đầu tiên nếu bạn quan tâm, xin hãy đọc bài cơ bản về CAN tại đây :

    và hãy đọc về họ dsPIC30F đặc biệt là phần về CAN
    http://ww1.microchip.com/downloads/e...Doc/70046E.pdf
    đừng quên đọc về em dsPIC30f0412 Và em MCP2551 nữa nhé
    sau đó chúng ta sẽ tiếp tục làm việc....
    (tôi mặc định là các bạn đã biết dùng MPLab C30)
    Nếu bạn còn vào Topic này thì có thê post Mạch nguyên lý Ko?
    Mình dốt nặc Kĩ thuật nên ... mong bạn đừng cười. Mình đang lam CAN nhưng gặp khó khăn.

    Comment

    • tahi
      Đệ tử 4 túi
      • Mar 2009
      • 64

      #17
      Em có thể tổng kết lại 1 cách cơ bản mối liên hệ giữa identifier, mask, và filter nhé. Các bác xem có gì sai xót thì sửa cho em. Em tham khảo tài liệu của dsPIC33F

      identifier: có 2 loại là standard và extend (ở trong message của CAN bus)
      mask : có 3 thằng mask được cấu hình bởi C1RXMiSID với standard và C1RXMiEID với extend (i =0,1,2)

      filter: Có 16 thằng filter .Mỗi thằng filter gồm 2 thanh ghi cho standard id và extend id
      C1RXFiSID,C1RXFiSED với i từ 0 đến 15,

      Ví dụ:
      - Về cơ bản truyển nhận CAN:
      Node truyền gửi bản tin với 11 bít standard id (29 với extend). Các node nhận bóc lấy 11 bít này, so sánh từng bít với filter...Tại vị trí bít đó mà mask bằng 1, nếu bít của filter bằng bít của gói tin đuợc gửi đến...accepts, còn ko thì reject. Nếu mask = 0, thì accept tất mà không phụ thuộc vào filter của node nhận hay id của message tới. Phần này em đọc ở chỗ Mask truth table

      - Cấu hình thằng nhận:
      + b1: Chọn mask (3 thằng) nào cho thằng filter nào (15 thằng). Gồm 2 thanh C1FMSKSEL1,C1FMSKSEL2
      Code:
      C1FMSKSEL1bits.F0MSK=0x0; //mask 0 cho filter 0
      // =0x1 thì là mask 1, 0x2 thì là mask2,0x3 là mask3
      // FiMSK gồm 2 bít, F1MSK là cấu hình mask cho thằng filter1
      + b2: thiết lập giá trị cho mask
      Code:
      C1RXM0SIDbits.SID = 0x7FF;//cấu hình mask0 cho standard id
      + B3: thiết lập giá trị cho filter
      Code:
      C1RXF0SIDbits.SID = 0x01D0; //cấu hình filter0 cho standard id
      Còn lại những thứ khác như: chỉ nhận standard id hay chỉ nhận extend id, nguồn dao động ở đâu Fcy hay Fosc, các mode hoạt động ...

      Khi truyền ECAN: Làm thế nào để biết đường truyền rỗi?
      Nếu em muốn test ECAN của dsPIC33, em nối như sau : dspic33 ->mcp2551, đấu đường CAN_L và CAN_H với nhau, rồi xét ở mode normal hoặc loopback, thì có được không?
      Last edited by tahi; 07-12-2009, 04:08 PM.

      Comment

      • tranthudo
        Nhập môn đệ tử
        • Mar 2008
        • 6

        #18
        Em copy nguyên code của bác mà không thấy nó truyền được. Em đã test thử nếu đổi về chế độ loopback thì nó truyền ngon, nhưng mà đổi sang chế độ normal nó không thấy truyền được.
        Sau khi bit TXREQ được set lên thì cứ = 1 mãi. chắc là không truyền được. không hiểu có lỗi gì nữa nhỉ hic.

        Comment

        • quocviet233
          Nhập môn đệ tử
          • Sep 2008
          • 7

          #19
          anh hopeman à, em copy code cua anh vào dich bằng C30 (hình như anh ko cùng các init_ADC10 phải không ạ?) thì nó hiện ra các cái lỗi như sau, em thấy nhiều quá nên ko biết mình còn sót cái j nữa ko? Anh xem giùm em nhé!
          Debug build of project `C:\Documents and Settings\PHAMQUOCVIET\Desktop\CAN_C30\CAN_4012_tes t.mcp' started.
          Language tool versions: pic30-as.exe v3.11, pic30-gcc.exe v3.11, pic30-ld.exe v3.11, pic30-ar.exe v3.11
          Preprocessor symbol `__DEBUG' is defined.
          Thu May 06 14:49:41 2010
          ----------------------------------------------------------------------
          Make: The target "C:\Documents and Settings\PHAMQUOCVIET\Desktop\CAN_C30\Code_CAN_C30 _interrupt.o" is out of date.
          Executing: "C:\Program Files\Microchip\MPLAB C30\bin\pic30-gcc.exe" -mcpu=30F4012 -x c -c "Code_CAN_C30_interrupt.c" -o"Code_CAN_C30_interrupt.o" -D__DEBUG -g -Wall
          Code_CAN_C30_interrupt.c:25: error: syntax error before '{' token
          Code_CAN_C30_interrupt.c:39: warning: type defaults to 'int' in declaration of 'C1CFG2'
          Code_CAN_C30_interrupt.c:39: error: conflicting type qualifiers for 'C1CFG2'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1849: error: previous declaration of 'C1CFG2' was here
          Code_CAN_C30_interrupt.c:39: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:45: warning: type defaults to 'int' in declaration of 'C1INTF'
          Code_CAN_C30_interrupt.c:45: error: conflicting type qualifiers for 'C1INTF'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1863: error: previous declaration of 'C1INTF' was here
          Code_CAN_C30_interrupt.c:45: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:46: error: syntax error before '.' token
          Code_CAN_C30_interrupt.c:47: warning: type defaults to 'int' in declaration of 'C1INTE'
          Code_CAN_C30_interrupt.c:47: error: conflicting type qualifiers for 'C1INTE'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1885: error: previous declaration of 'C1INTE' was here
          Code_CAN_C30_interrupt.c:47: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:48: error: syntax error before '.' token
          Code_CAN_C30_interrupt.c:56: warning: type defaults to 'int' in declaration of 'C1RX0CON'
          Code_CAN_C30_interrupt.c:56: error: conflicting type qualifiers for 'C1RX0CON'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1820: error: previous declaration of 'C1RX0CON' was here
          Code_CAN_C30_interrupt.c:56: error: initializer element is not constant
          Code_CAN_C30_interrupt.c:56: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:62: warning: type defaults to 'int' in declaration of 'C1RXM0SID'
          Code_CAN_C30_interrupt.c:62: error: conflicting type qualifiers for 'C1RXM0SID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1591: error: previous declaration of 'C1RXM0SID' was here
          Code_CAN_C30_interrupt.c:62: error: initializer element is not constant
          Code_CAN_C30_interrupt.c:62: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:66: warning: type defaults to 'int' in declaration of 'C1RXM0EIDH'
          Code_CAN_C30_interrupt.c:66: error: conflicting type qualifiers for 'C1RXM0EIDH'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1595: error: previous declaration of 'C1RXM0EIDH' was here
          Code_CAN_C30_interrupt.c:66: error: initializer element is not constant
          Code_CAN_C30_interrupt.c:66: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:70: warning: type defaults to 'int' in declaration of 'C1RXM0EIDL'
          Code_CAN_C30_interrupt.c:70: error: conflicting type qualifiers for 'C1RXM0EIDL'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1598: error: previous declaration of 'C1RXM0EIDL' was here
          Code_CAN_C30_interrupt.c:70: error: initializer element is not constant
          Code_CAN_C30_interrupt.c:70: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:75: warning: type defaults to 'int' in declaration of 'C1RXF0SID'
          Code_CAN_C30_interrupt.c:75: error: conflicting type qualifiers for 'C1RXF0SID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1523: error: previous declaration of 'C1RXF0SID' was here
          Code_CAN_C30_interrupt.c:75: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:76: warning: type defaults to 'int' in declaration of 'C1RXF2SID'
          Code_CAN_C30_interrupt.c:76: error: conflicting type qualifiers for 'C1RXF2SID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1543: error: previous declaration of 'C1RXF2SID' was here
          Code_CAN_C30_interrupt.c:76: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:77: warning: type defaults to 'int' in declaration of 'C1RXF2EIDH'
          Code_CAN_C30_interrupt.c:77: error: conflicting type qualifiers for 'C1RXF2EIDH'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1547: error: previous declaration of 'C1RXF2EIDH' was here
          Code_CAN_C30_interrupt.c:77: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:78: warning: type defaults to 'int' in declaration of 'C1RXF2EIDL'
          Code_CAN_C30_interrupt.c:78: error: conflicting type qualifiers for 'C1RXF2EIDL'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1550: error: previous declaration of 'C1RXF2EIDL' was here
          Code_CAN_C30_interrupt.c:78: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:84: warning: type defaults to 'int' in declaration of 'C1TX0CON'
          Code_CAN_C30_interrupt.c:84: error: conflicting type qualifiers for 'C1TX0CON'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1728: error: previous declaration of 'C1TX0CON' was here
          Code_CAN_C30_interrupt.c:84: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:85: warning: type defaults to 'int' in declaration of 'C1TX0SID'
          Code_CAN_C30_interrupt.c:85: error: conflicting type qualifiers for 'C1TX0SID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1704: error: previous declaration of 'C1TX0SID' was here
          Code_CAN_C30_interrupt.c:85: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:86: warning: type defaults to 'int' in declaration of 'C1TX0EID'
          Code_CAN_C30_interrupt.c:86: error: conflicting type qualifiers for 'C1TX0EID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1708: error: previous declaration of 'C1TX0EID' was here
          Code_CAN_C30_interrupt.c:86: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:87: warning: type defaults to 'int' in declaration of 'C1TX0DLC'
          Code_CAN_C30_interrupt.c:87: error: conflicting type qualifiers for 'C1TX0DLC'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1712: error: previous declaration of 'C1TX0DLC' was here
          Code_CAN_C30_interrupt.c:87: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:91: warning: type defaults to 'int' in declaration of 'C1TX1CON'
          Code_CAN_C30_interrupt.c:91: error: conflicting type qualifiers for 'C1TX1CON'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1700: error: previous declaration of 'C1TX1CON' was here
          Code_CAN_C30_interrupt.c:91: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:92: warning: type defaults to 'int' in declaration of 'C1TX1SID'
          Code_CAN_C30_interrupt.c:92: error: conflicting type qualifiers for 'C1TX1SID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1676: error: previous declaration of 'C1TX1SID' was here
          Code_CAN_C30_interrupt.c:92: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:93: warning: type defaults to 'int' in declaration of 'C1TX1EID'
          Code_CAN_C30_interrupt.c:93: error: conflicting type qualifiers for 'C1TX1EID'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1680: error: previous declaration of 'C1TX1EID' was here
          Code_CAN_C30_interrupt.c:93: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:94: warning: type defaults to 'int' in declaration of 'C1TX1DLC'
          Code_CAN_C30_interrupt.c:94: error: conflicting type qualifiers for 'C1TX1DLC'
          c:/program files/microchip/mplab c30/bin/bin/../../support/dsPIC30F/h/p30F4012.h:1684: error: previous declaration of 'C1TX1DLC' was here
          Code_CAN_C30_interrupt.c:94: warning: data definition has no type or storage class
          Code_CAN_C30_interrupt.c:97: error: syntax error before '.' token
          Code_CAN_C30_interrupt.c:222:2: warning: no newline at end of file
          Halting build on first failure as requested.
          ----------------------------------------------------------------------
          Debug build of project `C:\Documents and Settings\PHAMQUOCVIET\Desktop\CAN_C30\CAN_4012_tes t.mcp' failed.
          Language tool versions: pic30-as.exe v3.11, pic30-gcc.exe v3.11, pic30-ld.exe v3.11, pic30-ar.exe v3.11
          Preprocessor symbol `__DEBUG' is defined.
          Thu May 06 14:49:44 2010
          ----------------------------------------------------------------------
          BUILD FAILED

          Comment

          • phuongvpmt
            Nhập môn đệ tử
            • Oct 2011
            • 2

            #20
            nhờ giúp về giao thức CAN

            chào các anh
            kỳ nạỳ e làm đồ án: truyền và nhận dữ liệu trong mang can sữ dụng vi xử lý của microchip, dùng protect để mô phỏng hiển thị nhiệt độ cảm biến được.
            e không biết cách đấu mắc các chân của pic tới mcp 2551 và hiên thị ra màn hình lcd như thế nào
            các anh có thể làm ơn hướng dẫn giúp em vẽ 1 mạch nguyên lý với
            cảm ơn anh nhiều

            Comment

            • phuongvpmt
              Nhập môn đệ tử
              • Oct 2011
              • 2

              #21
              nhờ giúp về giao thức CAN

              cảm ơn anh
              thật sự đây là lần tiên e tìm hiểu về can, mà tài liệu tiếng việt thì hiếm quá. ở trường thì em chỉ quen dùng ngôn ngữ assembly, trong chương trình anh viết em không hiểu được, mong anh thông cảm nha
              e đang học tại đà nẵng, kỳ này em đang làm đồ án về: truyền và nhận dữ liệu trong mạng can sử dụng vi xử lý của microchip
              em hơi kẹt không biết làm thế nào để viết chương trình cho giao thức CAN này anh có thể làm ơn chỉ cho em ít đường cơ bản được không a
              mong sớm được hồi âm của anh
              thân chào

              Comment

              • tap_tanh
                Nhập môn đệ tử
                • Dec 2011
                • 2

                #22
                các bác cho em hỏi:
                - khi truyền message thì chỉ có ID là dùng để nhận dạng message đó từ đâu tới thôi phải không? hay còn có phần nào khác nữa?
                - một con trong mạng CAN có thể nhận message từ bao nhiêu con trong mạng vậy? bởi em định làm mạng CAN gồm 10-16 con giao tiếp với nhau.

                Mong các bác giúp em. Cảm ơn nhiều!!

                Comment

                • kikyou
                  Nhập môn đệ tử
                  • Jul 2017
                  • 1

                  #23
                  hú hú có ai ko? :'(

                  Comment

                  Working...