CCS C cho PIC/dsPIC phiên bản 4.xxx

Collapse
This is a sticky topic.
X
X
 
  • Giờ
  • Show
Clear All
new posts
  • nhamdtk4
    Đệ tử 3 túi
    • Feb 2009
    • 47

    #196
    Nguyên văn bởi hangocminh1989 View Post
    em vẫn chưa khai báo được cái nút nhấn,hum ny em không mang theo code và cái sơ đồ,cả nhà có ai đã làm thành công nhiều về vấn đề này xin giúp đỡ em với,có code và sơ đồ luôn thi càng tốt,hic,mệt cái này quá,
    thanks
    It's here:
    Code:
    #include<16f877a.h>
    #fuses nowdt,hs,noprotect,nodebug
    #use delay(clock=20M)
    
    #bit button2   =0x008.2
    #bit button1   =0x008.0
    
    void main()
    {
       int a=5;
       set_tris_b(0x00);
       set_tris_d(0xff);
       output_b(0);
       while(true)
       {
          if(button1) {delay_ms(40); while(button1){}; a++;}
          if(button2) {delay_ms(40); while(button2){}; a--;}      
          output_b(a);
       }
    }
    Attached Files
    Last edited by nhamdtk4; 18-11-2009, 09:37 AM.
    tatcachilanguybien

    Comment

    • ngoyeungoc
      Nhập môn đệ tử
      • Nov 2007
      • 8

      #197
      Dùng PIC điều khiển động cơ bước

      Chào mọi người !Mình đang viết chương trình điều khiển Step Motor nhưng đang mắc kẹt lại ở chỗ này không tìm được cách giải quyết mấy ngày nay rồi.Đã cố gắng nhưng không ra nên rất mọi người giúp đỡ mình với.Đây là code của mình
      Code:
      #include <16F877A.h>
      #fuses NOWDT,PUT,XT,NOPROTECT
      #use delay(clock=4000000)
      #use fast_io(b)
      #byte portb=0x06
      #byte intcon=0x000B
      #bit RB4=portb.4
      #bit RB5=portb.5
      #bit RB6=portb.6
      #bit RB7=portb.7
      #bit RBIF=intcon.0 //dinh nghia co ngat RB
      #bit RBIE=intcon.3 //dinh nghia bit cho phep ngat RB
      int a=0x11,speed=1000;
      // Chuong trinh ngat
      #int_RB
      void ngat_RB()
      {
      if((RBIF)&&(RBIE)) 
         { 
            //Quay nguoc chieu kim dong ho
            {
            if(RB4==0)
               while (true)
                  {
                     rotate_left(&a,1);
                     portb=a;
                     delay_ms(1000);
                  }
                
            }      
            //Quay cung chieu kim dong ho
            {
            if(RB5==0)
               while (true)
                  {
                     rotate_right(&a,1);
                     portb=a;
                     delay_ms(1000);
                  } 
            }
            //Quay nguoc chieu kim dong ho nhanh dan
            {
            if(RB6==0)
               {
                  speed=-50;
                  while (true)
                     {
                        rotate_left(&a,1);
                        portb=a;
                        delay_ms(speed);
                     }
               } 
            }
            //Quay cung chieu kim dong ho nhanh dan
            {
            if(RB7==0)
               {
                  speed=-50;
                  while (true)
                     {
                        rotate_right(&a,1);
                        portb=a;
                        delay_ms(speed);
                     }
               } 
            }
         RBIF=0; //Xoa co ngat RB      
         }
      }
      // Chuong trinh chinh
      main()
      {
      set_tris_b(0xF0);
      portb=0x0F;
      enable_interrupts(global);
      enable_interrupts(int_RB);
      ext_int_edge(H_to_L);
      while(true)
         {
        
         }
      }
      Nội dung của bài mình là điều khiển chiều quay và tốc độ của động cơ(mình đã chú thích trên đoạn code).Lỗi mình gặp phải là khi mình ấn SW để động cơ quay nhanh dần thì nó quay nhanh thật nhưng nhấn nữa thì tốc độ không tăng nữa mà vẫn giữ nguyên tốc độ.Các bạn có thể giúp mình sữa lại sao cho mỗi lần mình nhấn SW để tăng tốc độ động cơ thì nó tăng dần .Và mình hỏi thêm 1 điều nữa sao mỗi lần mình cho quay cùng chiều đồng hồ thì lúc đầu nó quay ngược chiều một bước rồi mới quay cùng chiều(và ngược lại).Có cách nào khắc phục không giup mình với.
      Mình cảm ơn các bạn nhiều.
      Mình còn file mô phỏng mà không biết upload lên diễn đàn sao cả,đành up lên mediafire vậy.Mong các bạn chỉ bảo thêm.
      Link download :
      Last edited by ngoyeungoc; 25-11-2009, 10:12 AM.

      Comment

      • ngoyeungoc
        Nhập môn đệ tử
        • Nov 2007
        • 8

        #198
        Ui,các bạn đâu rồi??? Sao không thấy ai giúp đỡ mình hết dzậy! Mình đang rất cần...Help me!

        Comment

        • 0903579509
          Đệ tử 4 túi
          • Mar 2007
          • 69

          #199
          Nguyên văn bởi ngoyeungoc View Post
          Ui,các bạn đâu rồi??? Sao không thấy ai giúp đỡ mình hết dzậy! Mình đang rất cần...Help me!
          Tôi không hiểu lắm về Code của bạn, nhưng tôi thấy với đoạn code trên, vi điều khiển không bao giờ thoát khỏi chương trình ngắt khi chạy vòng lặp while(1). Thêm vào đó ngắt xãy ra rất nhanh, chỉ cần một động tác nhấn phím, ngắt đã xãy ra nhiều lần do rung phím, kết quả hàm delay_ms() trở thành giá trị tối thiểu -> chỉ nhấn 1 lần tốc độ động cơ đã lên tối đa.
          Thân!

          Comment

          • ngoyeungoc
            Nhập môn đệ tử
            • Nov 2007
            • 8

            #200
            Mình cảm ơn bạn.Các bạn có thể giải thích rõ về PWM của PIC không.Trong luồng "CCS C cho PIC16F877A" mình đọc qua nhưng không hiểu rõ lắm.Mình đang lập trình điều khiển cho động cơ bước(loai 6 dây ra). Để điều khiển tốc độ động cơ thì phải dùng PWM(đoạn code trên mình dùng delay để thay đổi tốc độ nhưng không được). PIC 16F877A chỉ có 2 ngõ ra RC1 và RC2 là dùng trong PWM,trong khi mình cần 4 ngõ vào điều khiển.Các bạn hướng dẫn cho mình cách dùng PWM để điều khiển tốc độ cho động cơ bước 4 pha với.Mình cảm ơn nhiều!

            Comment

            • vinhlec4
              Banned
              • Dec 2009
              • 65

              #201
              mình đang cân tập lệnh trong ccs để viết chương trình đây nhung không biết lam sao. ai có cho minh với?
              cho mình hoi với:#FUSES NOWDT , HS , NOPROTECT
              dòng tren co nghĩa là j? lam sao biết các chế độ đó

              Comment

              • vinhlec4
                Banned
                • Dec 2009
                • 65

                #202
                ai co đã dùng pic8f4331 roi chỉ dạy em với? làm sao để viết chuong trình pwm 4331 day?vì mình chưa biết tập lệnh mà:
                các bác dạy e với

                Comment

                • ngoyeungoc
                  Nhập môn đệ tử
                  • Nov 2007
                  • 8

                  #203
                  Không biết mình hỏi không rõ ràng hay các cao thủ ít vào luồng này nữa hay sao mà chẳng thấy ai giúp mình hết vậy?Tại mình đang làm đồ án về điều khiển động cơ bước với 5 switch:
                  SW1: stop
                  SW2: quay cùng chiều kim đồng hồ(KDH).
                  SW3: quay ngược chiều KDH.
                  SW4: quay cùng chiều KDH có tốc độ tăng dần mỗi lần ấn.
                  SW5: quay ngược chiều KHD tốc độ tăng dần sau mỗi lần ấn.
                  Mình mới tìm hiểu về PIC, mình đã tự tìm hiểu, đã cố gắng lập trình nhưng chỉ làm được 3 điều khiển đầu tiên, điều khiển tốc độ động cơ tăng dần mình chưa làm được.Vì sắp bảo vệ đồ án rồi nên mình rất mong các bạn có thể giúp mình.Mình không hi vọng các bạn sẽ làm tất cả cho mình: viết code,vẽ mạch,...(phải có cái gì đó của mình nữa chứ), mình chỉ mong các bạn có thể hướng dẫn cho mình cách dùng chức năng PWM của con PIC để điều khiển tốc độ tăng dần cho step motor.Rất mong các bạn có thể giúp mình sớm sớm.Thời gian không còn nhiều nữa.Mình thực sự bó tay rồi.Chưa có tiền mua mạch nạp nữa chứ,hỏi mượn nhưng chờ đứa bạn làm xong mới cho mình mượn.Mình cảm ơn các bạn rất nhiều.

                  Comment

                  • 8051topic
                    Đệ tử 4 túi
                    • Apr 2006
                    • 71

                    #204
                    Hic, mình cũng đang tìm hiểu về PWM (CCP), mình có đoạn code này bạn thử xem sao nha.
                    Code:
                       // Setup the CCP1 for PWM
                       setup_ccp1(CCP_PWM);
                       setup_timer_2(T2_DIV_BY_1, 255, 1);
                       set_pwm1_duty(100);    //cái này là giá trị duty, bạn thay đổi giá trị này nhé, từ 0 -> 255
                    Về mạch nạp bạn có thể làm mạch PG2C để dùng, mạch này đơn giản lại không cần chip Master chỉ có điều PC của bạn phải có cổng COM, cáp USB-COM không dùng được với mạch này nha.
                    Chúc bạn sớm hoàn thành đề tài.

                    Comment

                    • lkkt_group
                      Nhập môn đệ tử
                      • Sep 2008
                      • 3

                      #205
                      Giup xem xet loi trong code giup em voi

                      Em đang làm mạch điện điều khiển motor bằng ngắt timer.Em đang dùng Pic C 4.069Em dùn. g timer0 de ngat. Tuy nhiên không hiểu sao không thấy hiển thị ra led sau thời gian 6 giay em đã set (đã test thử các chương trình in put output mấy cổng đó thấy ok) chắc tại ngắt timer có vấn đề nhưng không tìm ra lỗi. Các sư huynh nào biết tham khảo rồi chỉ dùm với. Cảm ơn rất nhiều http://www.picvietnam.com/forum/images/icons/icon9.gif

                      Em gửi file lập trình và sơ đồ mạch cho các sư huynh tham khảo

                      Search, download and share files from 4shared: music, video, images, books, apk. Use advanced search filters to find favorite songs, video clips and mobile apps.

                      Search, download and share files from 4shared: music, video, images, books, apk. Use advanced search filters to find favorite songs, video clips and mobile apps.

                      Search, download and share files from 4shared: music, video, images, books, apk. Use advanced search filters to find favorite songs, video clips and mobile apps.


                      Các sư huynh chịu khó down về nghen

                      Comment

                      • necati
                        Nhập môn đệ tử
                        • Oct 2006
                        • 10

                        #206
                        pcwhd


                        password: charon


                        same pw unlimited



                        Last edited by necati; 04-02-2010, 04:13 AM.

                        Comment

                        • Kevin
                          Nhập môn đệ tử
                          • Jul 2007
                          • 3

                          #207
                          password la gi`?

                          Comment

                          • hangocminh1989
                            Đệ tử 6 túi
                            • Apr 2009
                            • 132

                            #208
                            Nguyên văn bởi Kevin View Post
                            password la gi`?
                            charon.....pass ngay đó mà sao ko đọc??????????

                            Comment

                            • haruoi
                              Đệ tử 2 túi
                              • Apr 2010
                              • 29

                              #209
                              Các bác hướng dẫn e cách lập trình cho dispic 30f4011 bằng CCS với. E cài CSS bản 4.023 nhưng không hỗ trợ cho dispic. Thanks nhiều!

                              Comment

                              • hoanghuy911
                                Nhập môn đệ tử
                                • Feb 2009
                                • 5

                                #210
                                ADC và PWM điều khiển độ sáng 1 led công suât.

                                Xin chào các cao thủ trên diễn đàn PIC VIỆT NAM mình là người mới tìm hiểu về PIC và đang dùng PIC16F877A mình muốn hỏi chương trình dùng tín hiệu vào ADC và dùng PWM để điều khiển độ sáng cho một con LED công suất. Bác nào có chương trình mẫu thì cho mình tham khảo với đây là chương trình của mình nhưng khi mô phỏng thấy im re biên dịch thì không có lỗi.
                                Phần cứng: Nút nhấn trên RB0 và biến trở nối với nguồn 5V và cho vào AN0.
                                Tạm thời mình chưa tìm hiểu cách post hình lên diễn đàn và đóng khung code nên mới viết như vậy mong mọi ng thông cảm. Mong hồi âm và xin chân thành cảm ơn!

                                code______________________________________________ _____________________

                                #include "C:\Documents and Settings\SMART HOME\Desktop\LAP TRINH PIC\CCS for PIC16F877A\PWM\cht\main.h"
                                // su dung adc o che do 8 bit
                                // chuong chinh doc 3 moc gia tri adc xuat ra tuong ung 3 muc sang cua den led
                                byte value;
                                void main()
                                {
                                byte value;

                                setup_adc_ports(AN0); // Thiet lap cong AN0 la cong vao ADC.
                                setup_adc(ADC_CLOCK_INTERNAL ); // Thiet lap che do xung mo rong
                                // setup_adc(ADC_OFF);
                                setup_psp(PSP_DISABLED);
                                setup_spi(SPI_SS_DISABLED);
                                setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
                                setup_timer_1(T1_INTERNAL|T1_DIV_BY_1);
                                setup_timer_2(T2_DIV_BY_16,255,1);
                                setup_ccp1(CCP_PWM);
                                set_pwm1_duty(0);
                                setup_comparator(NC_NC_NC_NC);
                                setup_vref(FALSE);

                                // TODO: USER CODE!!
                                set_tris_b(0x0f);
                                while(true)
                                {
                                if(input(PIN_B0)==1) //Tin hieu cam bien

                                {
                                set_adc_channel( 0 );
                                value = read_adc();
                                if((value>0)&&(value<100))
                                set_pwm1_duty(50);
                                else if((value>100)&&(value<200))
                                set_pwm1_duty(150);
                                else
                                set_pwm1_duty(255);
                                delay_ms(10);
                                }
                                else
                                set_pwm1_duty(0);
                                }

                                }
                                __________________________________________________ _______________________

                                Comment

                                Working...