Pwm pic16f877a

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • tran truong
    Thành viên chính thức
    • Jun 2008
    • 46

    #1

    Pwm pic16f877a

    chào các bác!
    em mới làm về PIC16F877A. dùng CCS C!
    em muốn dùng pwm để nháy led nhưng không được!
    viết mãi nhưng không chạy!
    các bác có đoạn code CCS C về pwm cho pic 16f877A thì cho em xin!
    thanks!
  • vo_cam
    Thành viên tích cực
    • Mar 2008
    • 284

    #2
    Pic

    Nguyên văn bởi tran truong Xem bài viết
    chào các bác!
    em mới làm về PIC16F877A. dùng CCS C!
    em muốn dùng pwm để nháy led nhưng không được!
    viết mãi nhưng không chạy!
    các bác có đoạn code CCS C về pwm cho pic 16f877A thì cho em xin!
    thanks!
    bạn nháy led đơn à,led nháy theo chế độ nào: sáng dần , tắt dần ,sáng từ giữa ra, sáng dồn...... nếu như vậy thì có liên quan gì đến pwm đâu nhỉ!
    bạn nói không rõ, mọi người khó giải quyết cùng bạn được
    0945061338(vocam.h@gmail.com,lehanhdtk3@gmail.com)
    ||
    PROGRAMING(C,ASM),HARDWARE,LMD,RTC,GPRS,GPS....ALL OF VDK

    Comment

    • tran truong
      Thành viên chính thức
      • Jun 2008
      • 46

      #3
      ah!
      nghĩa là em chưa sử dụng được pwm!
      chưa cấu hình được và chưa sử dụng được!
      nên em mới hỏi các bác!
      các bác có đoạn code về pwm thì cho em xin!

      Comment

      • picpen_dtk3
        Thành viên mới
        • Aug 2008
        • 13

        #4
        mình đã trả lời bạn vấn đề này bên PICVIETNAM rồi .Bạn sang bên đó xem và load tài liệu hướng dẫn sử dụng CCS của Trần Xuân Trường(txt2203) ,rất đầy đủ và chi tiết,sẽ giúp ích cho bạn rất nhiều đó
        ** Xin hãy cho tôi là tượng đá
        ** Để muôn đời không nhớ thương ai !!

        Comment

        • tran truong
          Thành viên chính thức
          • Jun 2008
          • 46

          #5
          cảm ơn bác!

          Comment

          • huytoan1088
            Thành viên mới
            • Aug 2008
            • 1

            #6
            Minh co viet mot chuong trinh dung chuc nang PWM cua pic 16f877a


            #include <16f877a.h>
            #include <def_877a.h>
            #device *=16 ADC=8
            #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP
            #use delay(clock=20000000)
            #byte PR2=0x92 //Gia tri nap cho thanh ghi PR2 (quyet dinh chu ki xung)
            #byte CCPR1L=0x15 //Gia tri nap cho thanh ghi CCP1L (quyet dinh do rong xung)
            #byte CCPR1H=0x16
            #byte mode=0x17 //Thanh ghi chon che do cho chuc nang CCP
            #byte T2CON=0x12 //Thanh ghi dieu khien bo chia sau
            #byte TMR2=0x11 //Gia tri dem cua timer2
            #byte PIR1=0x0c
            #bit over=0x0c.1 //"over"=1 khi gia tri trong TMR2=PR2 bit nay nam trong PIR1
            #bit on=0x12.2 //Bit dieu khien Timer hoat dong trong T2CON


            int8 i;
            void setPWM()
            {
            T2CON=0x01; //Thiet lap bo chia tan 1:16 (prescaler)
            PIR1=0;
            TMR2=0; //Gia tri ban dau cho thanh ghi dem
            PR2=255; //Gia tri trong thanh ghi PR2 de timer2 so sanh
            mode=0b1100; //Thiet lap CCP1 lam viec o che do PWM************
            CCPR1L=0x00;
            CCPR1H=0x00;
            on=1;
            }
            void main(void)
            {
            i=0;
            trisc=0x00;
            setPWM();
            while(1)
            {
            CCPR1L=i;
            if(TMR2==255& over==1)
            {
            i=i+1;
            if(i==250)
            i=0;
            over=0;
            }
            }
            }

            Comment

            • anhthaohn
              Thành viên mới
              • Feb 2011
              • 17

              #7
              E cung dang tim hieu về PIC
              bác nào viết cho post cho E xin 1 ví dụ coede lập trình điều khiển LED đơn, có cả băm xung điều khiển độ sáng tối càng tốt. E muốn học để sau này làm bảng quảng cáo LED
              THANKS !
              yahoo: anhthao.love
              mobile: 0985049183

              Comment

              • duong_act
                Thành viên tích cực
                • Nov 2008
                • 4903

                #8
                void main()
                {
                set_tris_c.....// tùy CCP1 hay CCp2 hay cả 2 mà đặt giá trị phù hợp.

                setup_ccp1(ccp_pwm); // nếu dùng CCP1
                setup_ccp2(ccp_pwm); // nếu dùng CCP2
                setup_timer_2(T2_DIV_BY_1,99,2);
                while(true)
                {
                // Code here
                }
                }
                ________
                Tốt nhất là ấn F1 lên là ra hết.

                Comment

                • KVLV
                  Thành viên tích cực
                  • Aug 2010
                  • 1986

                  #9
                  Nguyên văn bởi anhthaohn Xem bài viết
                  E cung dang tim hieu về PIC
                  bác nào viết cho post cho E xin 1 ví dụ coede lập trình điều khiển LED đơn, có cả băm xung điều khiển độ sáng tối càng tốt. E muốn học để sau này làm bảng quảng cáo LED
                  THANKS !
                  yahoo: anhthao.love
                  mobile: 0985049183
                  bạn tham khảo nha http://www.dientuvietnam.net/forums/...ien-nay-57150/
                  Mãi đi tìm vàng.

                  Comment

                  • kami90
                    Thành viên tích cực
                    • Aug 2010
                    • 143

                    #10
                    Bạn sang diễn đàn picvietnam có rát nhiều tài liệu.Có các tutorial của anh Namnq viết rất dễ hiểu
                    myPage:

                    Comment

                    • ichitea606
                      Thành viên chính thức
                      • Nov 2009
                      • 35

                      #11
                      chào bạn mình có đoạn code này mình muốn sự trợ giúp của bạn:
                      ***Bình thường chưa nhấn thì PWM2 không hoạt động,khi nhấn nút nhấn PWM2 hoạt động, khi không nhấn nữa tại sao PWM vẫn hoạt động
                      mình chỉ muốn chó nó hoạt động khi được nhấn thôi.
                      #include <16F877A.h>
                      #include <def_16f877a.h>
                      #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
                      #use delay(clock=12000000)

                      #define nhan rb1
                      int16 duty1=0,i,j,m;
                      void kich (void){
                      setup_ccp2(CCP_PWM); //khoi tao bo PWM1
                      setup_timer_2(T2_div_by_16,187,1);
                      duty1=120;
                      set_pwm2_duty(duty1);
                      delay_ms(1);
                      }
                      void main()
                      {
                      set_tris_b(0xff);
                      set_tris_c(0);
                      while(true)
                      {
                      if(nhan==0){
                      kich();
                      }
                      }
                      }

                      Comment

                      • chung1608
                        Thành viên tích cực
                        • Sep 2009
                        • 4160

                        #12
                        Nguyên văn bởi ichitea606 Xem bài viết
                        chào bạn mình có đoạn code này mình muốn sự trợ giúp của bạn:
                        ***Bình thường chưa nhấn thì PWM2 không hoạt động,khi nhấn nút nhấn PWM2 hoạt động, khi không nhấn nữa tại sao PWM vẫn hoạt động
                        mình chỉ muốn chó nó hoạt động khi được nhấn thôi.
                        #include <16F877A.h>
                        #include <def_16f877a.h>
                        #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
                        #use delay(clock=12000000)

                        #define nhan rb1
                        int16 duty1=0,i,j,m;
                        void kich (void){
                        setup_ccp2(CCP_PWM); //khoi tao bo PWM1
                        setup_timer_2(T2_div_by_16,187,1);
                        duty1=120;
                        set_pwm2_duty(duty1);
                        delay_ms(1);
                        }
                        void main()
                        {
                        set_tris_b(0xff);
                        set_tris_c(0);
                        while(true)
                        {
                        if(nhan==0){
                        kich();
                        }
                        }
                        }
                        chú viet thế thì nó luôn hoạt động sau lần nhấn đầu tiên là phải rồi.
                        Vòng lập mãi mai nên viết thế này
                        Code:
                        while(true)
                        {
                        setup_timer_2(disanble_t2);
                        if(nhan==0)
                        {
                        kich();
                        while(nhan==0);
                        }
                        }
                        }

                        Comment

                        • caovanhuong
                          Thành viên tích cực
                          • Oct 2008
                          • 1800

                          #13
                          Nguyên văn bởi ichitea606 Xem bài viết
                          chào bạn mình có đoạn code này mình muốn sự trợ giúp của bạn:
                          ***Bình thường chưa nhấn thì PWM2 không hoạt động,khi nhấn nút nhấn PWM2 hoạt động, khi không nhấn nữa tại sao PWM vẫn hoạt động
                          mình chỉ muốn chó nó hoạt động khi được nhấn thôi.
                          #include <16F877A.h>
                          #include <def_16f877a.h>
                          #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
                          #use delay(clock=12000000)

                          #define nhan rb1
                          int16 duty1=0,i,j,m;
                          void kich (void){
                          setup_ccp2(CCP_PWM); //khoi tao bo PWM1
                          setup_timer_2(T2_div_by_16,187,1);
                          duty1=120;
                          set_pwm2_duty(duty1);
                          delay_ms(1);
                          }
                          void main()
                          {
                          set_tris_b(0xff);
                          set_tris_c(0);
                          while(true)
                          {
                          if(nhan==0){
                          kich();
                          }
                          }
                          }
                          chỉ cần sửa lại như thế này
                          Code:
                          #include <16F877A.h>
                          #include <def_16f877a.h>
                          #fuses     NOWDT,PUT,HS,NOPROTECT,NOLVP
                          #use  delay(clock=12000000)
                          
                          #define  nhan   rb1
                          int16 duty1=0,i,j,m;
                          void kich (void)
                          {
                           setup_ccp2(CCP_PWM); //khoi tao bo PWM1
                           setup_timer_2(T2_div_by_16,187,1); 
                           duty1=120;
                           set_pwm2_duty(duty1); 
                           delay_ms(1);
                          }
                          void main()
                          {
                          set_tris_b(0xff);
                          set_tris_c(0);
                          while(1)
                          {
                          if(nhan==0)
                          {
                          kich();
                          }
                          else
                          {
                           setup_ccp2(ccp_off);
                          }
                          }
                          }
                          Last edited by caovanhuong; 29-05-2012, 19:09.

                          Comment

                          • ichitea606
                            Thành viên chính thức
                            • Nov 2009
                            • 35

                            #14
                            E cám ơn 2 bac nha. Chúc sức khỏe

                            Comment

                            • ichitea606
                              Thành viên chính thức
                              • Nov 2009
                              • 35

                              #15
                              E đang làm mạch điều khiển độ sáng tối của bóng đèn tròn. Thay đổi góc kích của Triac. e có đoạn code thế này và e muốn hỏi:
                              1> Khi em để ngõ vào của RB0 (ngắt ngoài) là 1 xung clock thì ngõ ra của CCP2 có xung kích tại thời điểm cạch xuống. E thay xung clock bằng mạch đồng bộ thì CCP2 không có xung. trong khi đó ngõ ra của mạch đồng bộ có xung vuông nhưng biên độ khoảng 2,5V có phải vấn đề là chỗ 2,5v này nhỏ wa nên VDK cho 2,5v này ở mức 0. hay code của e có vấn đề? (chắc là thế rồi)
                              2> xung ngõ ra của CCP2 (có 2 xung liên tiếp )chạy bị đão chiểu lúc mức 1 quay lên rồi quay xuống (code sai) bác chỉ cho e với xin cám ơn

                              ************************************************** ************************************************** ************
                              #include <16F877A.h>
                              #include <def_16f877a.h>
                              #fuses NOWDT,PUT,HS,NOPROTECT,NOLVP
                              #use delay(clock=12000000)
                              int16 duty1=0,i,j,m,k;
                              void kich (void)
                              {
                              setup_ccp2(CCP_PWM); //khoi tao bo PWM1
                              setup_timer_2(T2_div_by_16,46,1); //T=(1/12M)*4*16*(46+1)=1.0073us=1ms
                              duty1=375;
                              set_pwm2_duty(duty1); // duty(8bit) muc 1=duty*(1/12M)*16=50%
                              DELAY_MS(1);
                              }
                              #int_EXT
                              void EXT_isr(void)
                              {
                              kich();
                              setup_ccp2(ccp_off);
                              }
                              void main()
                              {
                              set_tris_b(0);
                              set_tris_c(0);
                              output_float(PIN_B0);//xac lap chan RB0 la dau vao
                              enable_interrupts(GLOBAL);
                              enable_interrupts(INT_RDA);
                              enable_interrupts(INT_EXT);
                              ext_int_edge(INT_EXT,H_to_L);
                              while(1)
                              {
                              }
                              }
                              Attached Files

                              Comment

                              Về tác giả

                              Collapse

                              tran truong Tìm hiểu thêm về tran truong

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

                              Collapse

                              Đang tải...