Thông báo

Collapse
No announcement yet.

Pwm pic16f877a

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

  • 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!

  • #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


    • #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


      • #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


        • #5
          cảm ơn bác!

          Comment


          • #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


            • #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


              • #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


                • #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


                  • #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


                    • #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


                      • #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


                        • #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, 20:09.

                          Comment


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

                            Comment


                            • #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...
                              X