Thông báo

Collapse
No announcement yet.

CCS vs. C18, C30

Collapse
X
 
  • Lọc
  • Giờ
  • Show
Clear All
new posts

  • #16
    Nguyên văn bởi Gallileo Xem bài viết
    Chế độ X2 là chế độ nhân đôi tần số xung nhịp. Do vậy, mặc dù mạch hiện tại mình sử dụng thạch anh ngoài 20Mhz nhưng thực tế dsPIC chạy với tốc độ 40Mhz.

    Thực ra lúc đầu mình cũng hơi bất ngờ vì dsPIC loại 20I/SP lại có thể chạy được ở tốc độ 40 MIPS. Nhưng mạch của mình hiện vẫn chạy ổn định trong một thời gian khá dài nên mình cũng không chú ý đến vấn đề này nữa.
    Bác nhầm thế nào, hiện nay chỉ có dsPIC33F chạy được ở 40MIPS còn 30F kịch kim chỉ có 30MIPS.
    Để chạy được ở 30MIPS bác cần thạch anh <10MHz, cụ thể dùng loại 7.3728Mhz rồi dùng PLLx16.
    Một số dòng như 2011/2012/3012/3013 thì có thể cắm thạch anh > 10Mhz rồi dùng chế độ chia sau đó nhân.

    Bác nên xem lại, anh namqn nói hoàn toàn chính xác. Tui đã dùng PIC chạy ở 30MIPS chỉ nó hơi ấm một chút !

    Mờ hỏi bác thêm, bác mua con thạch anh ở đâu mà đạt được 160Mhz, để em thử phát,

    Comment


    • #17
      Mờ hỏi bác thêm, bác mua con thạch anh ở đâu mà đạt được 160Mhz, để em thử phát,
      thì cậu mua thạch anh 20Mhz như Gallileo rồi dùng PLL x8 thì sẽ có Fcy là 160Mhz thôi .
      TRước giờ cũng chưa bao giờ overclock dspic , để mình cũng về thử xem có chiện gì lạ không

      Comment


      • #18
        Đúng là khi mình chuyển sang chế độ chạy 20MIPS thì dsPIC chỉ hơi ấm, sờ thoải mái. Như vậy hiện tượng nóng rõ ràng là do overclock gây ra.

        Microchip khuyến cáo người dùng sử dụng thạch anh trong dải 4MHz đến 10MHz. Còn việc nó vẫn chạy với thạch anh 20MHz theo mình nghĩ cũng giống như động cơ chạy quá tải, tất sẽ nóng. Còn sau đây là đoạn code mình dùng để config dsPIC30F4012:

        Code:
        // -------------------------------------------------------------
        // DEVICE CONFIGURATION
        // Refer to Section 24 of dsPIC30F Family Reference Manual (FRM)
        // -------------------------------------------------------------
        // Oscillator mode: XT w/ PLL 8x, clock switching is disable
        // Crystal 20MHz -> the system runs at 40MHz Fcy (see page 7-5 FRM)
        _FOSC(CSW_FSCM_OFF & XT_PLL8);
        // PWM module pins controlled by PORT register at device Reset
        // PWM module ouput pins active-high output polarity
        _FBORPOR(PBOR_ON & BORV_45 & PWRT_64 & MCLR_EN & RST_PWMPIN & PWMxH_ACT_HI & PWMxL_ACT_HI);
        // Watchdog timer disable
        _FWDT(WDT_OFF);
        // No code protection
        _FGS(CODE_PROT_OFF);
        Last edited by Gallileo; 06-10-2006, 01:03.

        Comment


        • #19
          Xin chỉ giáo: mình dùng CCS để viết cho con PIC16F88 (bác Phanbobo hảo tâm đang phát miễn phí cho đệ nhà PIC!). Mình phải dùng comparator2 nhưng mấy cái hàm build-in của nhà CCS không hỗ trợ. Mình định dùng thanh ghi trực tiếp nhưng nó cũng chẳng hướng dẫn làm thế nào để can thiệp vào thanh ghi. Xin các bác chỉ giáo cách giải quyết.
          Chế độ PLLx16 có làm tăng sai số clock lên nhiều không. Vì nhiều hàm tgian dùng clock hệ thống mà clock sai thì .... Mong chỉ giáo cách calib.
          ! ! you can win if you want ! !

          Comment


          • #20
            Nguyên văn bởi anhtuan133 Xem bài viết
            Xin chỉ giáo: mình dùng CCS để viết cho con PIC16F88 (bác Phanbobo hảo tâm đang phát miễn phí cho đệ nhà PIC!). Mình phải dùng comparator2 nhưng mấy cái hàm build-in của nhà CCS không hỗ trợ. Mình định dùng thanh ghi trực tiếp nhưng nó cũng chẳng hướng dẫn làm thế nào để can thiệp vào thanh ghi. Xin các bác chỉ giáo cách giải quyết.
            Chế độ PLLx16 có làm tăng sai số clock lên nhiều không. Vì nhiều hàm tgian dùng clock hệ thống mà clock sai thì .... Mong chỉ giáo cách calib.
            Anh có thể tương tác với thanh ghi của PIC trong CCS như sau, bằng cách định nghĩa các thanh ghi:

            struct CMCON_REG
            {
            BOOLEAN C2OUT;
            BOOLEAN C1OUT;
            BOOLEAN C2INV;
            BOOLEAN C1INV;
            BOOLEAN CIS;
            BOOLEAN CM2;
            BOOLEAN CM1;
            BOOLEAN CM0;
            };

            struct CMCON_REG ThanhghiCMCON;

            #byte ThanhghiCMCON = 0x9C; //Dia chi cua thanh ghi CMCON

            Khi dùng anh chỉ cần viết ThanhghiCMCON.CIS=1 chẳng hạn thì... chắc anh hiểu

            Comment


            • #21
              Khi dùng PLL tần số thạch anh giới hạn <10MHz sao cho khi nhân tần <120MHz, Việc dùng overclock quá tần số cho phép có thể làm hỏng IC hoặc làm việc không ổn định.Bạn Gallileo có kiểm tra tần số làm việc thực của dsPic chưa với tần số làm việc 160MHz là quá giới hạn cho phép.Mình đã dùng dsPic chạy với tần số 120MHz (PLL16) và đã khai thác được AD với tốc độ tối đa cho phép 1Msps chip vẫn bình thường không nóng gì cả.

              Comment


              • #22
                Chuyện overclock dsPIC xem chừng hơi khó, trong dsPIC30F Reference Manual có dòng:

                • PLL VCO lock indication plus ‘out of lock’ trap option
                • PLL input provided by the following sources:
                - XT or EC Primary oscillator

                Comment


                • #23
                  chuyện over clock dsPIC30F có thể được nếu không dùng PLL(đưa tần số vào trực tiếp con dsPIC). Còn nếu dùng PLL tức là dùng VCO bên trong con dsPIC thì khó mà vượt qua được tần số 135Mhz. Tức là bản chất vật lý của VCO chỉ có thể cho phép giao động ở tối đa 120Mhz. Lớn hơn tần số đó thì VCO rất khó giao động! Không hiểu bạn làm cách nào mà đạt đến 160Mhz được? Bạn có thể cho tôi kinh nghiệm được không?
                  Cũ người mới ta!

                  Comment


                  • #24
                    Thank to nữ Tiểu Long. Nhân tiện cho hỏi bản C18 lấy từ microchip bị giới hạn 60 ngày thì phải làm thế nào để tăng thời gian sử dụng lên kô vậy. thanks.
                    ! ! you can win if you want ! !

                    Comment


                    • #25
                      Xin lỗi mọi người lâu mình không vào thread này nên trả lời bài muộn.

                      @phanbobo: Code thì mình đã post trong thread này rồi còn ngoài ra mình không có kinh nghiệm gì cả, chỉ là dùng thạch anh ngoài 20Mhz sau đó sử dụng PLL 8x để đạt tần số 160Mhz thôi. Khi hoạt động ở tần số này thì chỉ có chip bị nóng còn các module vẫn hoạt động bình thường, ít ra là với CAN, PWM, Timer, UART, ADC vì mình có sử dụng trực tiếp cho project.

                      Một điểm đáng lưu ý nữa là sau khi trao đổi với các bạn ở trên diễn đàn này mình đã tìm cách giảm tần số xuống 80Mhz. Ban đầu do mình vẫn muốn tận dụng thạch anh 20Mhz nên mình chuyển PLL từ 8x xuống 4x. Nhưng sau khi kiểm tra mình thấy Timer hoạt động không đúng. Hiện nay mình đang dùng thạch anh 10Mhz với PLL 8x.
                      Last edited by Gallileo; 18-11-2006, 04:54.

                      Comment


                      • #26
                        co bac nao biet cho ban con DSPIC30F4011 khong ?
                        cac bac cho em hoi chuan nap ICSP co nap duoc cho moi ho pic dung khong (nap duoc cho dspic tu f5xxx tro di duoc khong).sao em dung 5 chan cua ICSP de nap cho con pic6f877a no lai khong nhan. co phai cap dao dong thach anh cho no kong?
                        nhan tien cac bac cho hoi tai sao em dung MPLAP C30 viet chuong trinh cho con 30f4011 khi goi cac han cua no trong thu vien lai bi bao noi . khong the build duoc?lieu khi cai no co phai ***** khong hay co phai cdkey khong?
                        cam on cac bac truoc

                        Comment


                        • #27
                          co bac nao biet cho ban con DSPIC30F4011 khong ?
                          Liên hệ thành viên batbatdieu trên diễn đàn này, đang muốn thanh lý nốt

                          cac bac cho em hoi chuan nap ICSP co nap duoc cho moi ho pic dung khong (nap duoc cho dspic tu f5xxx tro di duoc khong).
                          Tất nhiên, nạp thoải mái.

                          sao em dung 5 chan cua ICSP de nap cho con pic6f877a no lai khong nhan. co phai cap dao dong thach anh cho no kong?
                          Nó không nạp được bởi vì thứ tự chân ICSP của 877A khác với dsPIC. Bạn xem lại datasheet rồi cắm lại là OK thui, tất nhiên là không cần thạch anh.

                          nhan tien cac bac cho hoi tai sao em dung MPLAP C30 viet chuong trinh cho con 30f4011 khi goi cac han cua no trong thu vien lai bi bao noi . khong the build duoc?lieu khi cai no co phai ***** khong hay co phai cdkey khong?
                          Bạn phải đính kém chương trình theo chứ, nói thế chịu roài, C30 có bản Student Version, nó có đủ mọi tính năng như phiên bản xịn trong vòng 60 ngày, đây là lỗi của bạn thui chứ không phải lỗi phần mềm.

                          Comment


                          • #28
                            Nguyên văn bởi Tiểu long nữ Xem bài viết
                            Anh có thể tương tác với thanh ghi của PIC trong CCS như sau, bằng cách định nghĩa các thanh ghi:

                            struct CMCON_REG
                            {
                            BOOLEAN C2OUT;
                            BOOLEAN C1OUT;
                            BOOLEAN C2INV;
                            BOOLEAN C1INV;
                            BOOLEAN CIS;
                            BOOLEAN CM2;
                            BOOLEAN CM1;
                            BOOLEAN CM0;
                            };

                            struct CMCON_REG ThanhghiCMCON;

                            #byte ThanhghiCMCON = 0x9C; //Dia chi cua thanh ghi CMCON

                            Khi dùng anh chỉ cần viết ThanhghiCMCON.CIS=1 chẳng hạn thì... chắc anh hiểu
                            Thank đồng chí đã test lại thấy nếu có dấu ; sau địa chỉ thì bị báo lỗi trong help cũng không có. nên câu in đậm cần được viết lại như sau
                            #byte ThanhghiCMCON = 0x9C

                            Comment


                            • #29
                              Em bổ sung thêm phần truy cập trực tiếp thanh ghi 8bit hoặc truy cập từng bit trong thanh ghi dùng #bit và #byte
                              Đây là phần common question trong help của CCS



                              How do I directly read/write to internal registers?

                              --------------------------------------------------------------------------------



                              A hardware register may be mapped to a C variable to allow direct read and write capability to the register. The following is an example using the TIMER0 register:

                              #BYTE timer0 = 0x01

                              timer0= 128; //set timer0 to 128

                              while (timer0 ! = 200); // wait for timer0 to reach 200



                              Bits in registers may also be mapped as follows:

                              #BIT T0IF = 0x0B.2

                              .

                              .

                              .

                              while (!T0IF); //wait for timer0 interrupt



                              Registers may be indirectly addressed as shown in the following example:

                              printf ("enter address:");

                              a = gethex ();

                              printf ("\r\n value is %x\r\n", *a);



                              The compiler has a large set of built-in functions that will allow one to perform the most common tasks with C function calls. When possible, it is best to use the built-in functions rather than directly write to registers. Register locations change between chips and some register operations require a specific algorithm to be performed when a register value is changed. The compiler also takes into account known chip errata in the implementation of the built-in functions. For example, it is better to do set_tris_A(0); rather than *0x85=0;



                              Ngoài ra có thể dùng #locate để đn
                              Tương tự như thế có thể dùng union/struct với #WORD để định nghĩa cho 16 bit thanh ghi

                              #word data = 0x0800



                              struct {

                              int lowerByte : 8;

                              int upperByte : 8;

                              } control_word;

                              #word control_word = 0x85

                              ...

                              control_word.upperByte = 0x42;

                              Comment


                              • #30
                                Hi! lâu nay mình dùng CCS cho Pic . Giờ làm DSPic phải chuyển sang C30.Bác wonbinbk bảo dùng CCS vẫn được vậy bác có thể Help me với .Thank!
                                |

                                Comment

                                Về tác giả

                                Collapse

                                Gallileo Tìm hiểu thêm về Gallileo

                                Bài viết mới nhất

                                Collapse

                                Đang tải...
                                X