RP Store Tìm linh kiện theo mã, gửi BOM nhận báo giá Gửi BOM

Khởi tao 2 PWM trong PIC 16F877A với CCS

Collapse
X
 
  • Giờ
  • Show
Clear All
new posts
  • luongthitu
    Thành viên tích cực
    • Oct 2012
    • 306

    #1

    Khởi tao 2 PWM trong PIC 16F877A với CCS

    Chào cả nhà...

    Em khởi tạo PWM của PIC trong CCS khi cho chạy 1 cái thì oki nhưng chạy cả 2 thì tịt ( ko chạy )

    Khai báo:
    #include <16F877a.h>
    #device 16F877*16ADC=8
    #include <def_877a.h>
    #FUSES NOWDT, HS, NOPUT, NOPROTECT, NODEBUG, NOBROWNOUT, NOLVP, NOCPD, NOWRT
    #use delay(clock=20000000)
    Khởi tạo PWM:
    setup_ccp1(CCP_PWM); // Bat che do PWM cho RC1
    setup_ccp2(CCP_PWM);// Bat che do PWM cho RC2
    setup_timer_2(T2_DIV_BY_16,255,1);
    Công thức tính f: ( tần số băm xung PWM )

    f = fosc / [ 4*mode*(period+postscale) ] ( = 1.22kHz với period = 255 )

    Trong đó:

    -fosc=thach anh = 20.000.000
    -mode : T2_DIV_BY_1= 1, T2_DIV_BY_4= 4 , T2_DIV_BY_16 = 16
    -period : 0-255
    -postscale : 1

    Kích hoạt chương trình:
    setup_ccp1(ccp_PWM);
    set_pwm1_duty(128); //50%
    setup_timer_2(T2_DIV_BY_16,255,1);
    Công thức tính %duty:
    Với value la kiểu 8bit:

    %duty = (value/(PR2 +1))*100%

    ==> value =(duty%*(PR2+1))/100% (value = 128 = 50% duty )

    Với value kiểu 16bit:

    %duty = (value & 1023)/(4*(PR2 +1))*100%

    nhưng khi cho chạy cả 2 pwm thì lại ko thấy chạy:
    setup_ccp1(ccp_PWM);
    setup_ccp2(CCP_PWM);
    set_pwm1_duty(128);
    set_pwm2_duty(128);
    setup_timer_2(T2_DIV_BY_16,255,1);
    Cớ là làm sao lại ko chạy?

    Last edited by luongthitu; 06-11-2012, 10:37.
  • chau_2007
    Thành viên mới
    • Feb 2008
    • 23

    #2
    chương trình bình thường! bạn xem lại tín hiệu, kênh hiển thị trên oscilocope!
    |

    Comment

    • luongthitu
      Thành viên tích cực
      • Oct 2012
      • 306

      #3
      Nguyên văn bởi chau_2007 Xem bài viết
      chương trình bình thường! bạn xem lại tín hiệu, kênh hiển thị trên oscilocope!
      Cám ơn bác..để em xem lại.

      Comment

      • huy quang
        Thành viên mới
        • Nov 2012
        • 1

        #4
        cho mình hỏi cái nha!! cái chường trình này sử dụng PWM có sẵn trong PIC hả bạn. chỉ việc khai báo hàm là nó chạy thui hả?? mong trả lời sớm. thank

        Comment

        • kevo1tinh
          Thành viên chính thức
          • Jun 2009
          • 44

          #5
          Xem lại đoạn này nhé bạn:
          //
          setup_ccp1(ccp_PWM);
          set_pwm1_duty(128); //50%
          setup_timer_2(T2_DIV_BY_16,255,1);
          ??
          Duty 50% phải là 512 nhé, độ phân giải phải nhân 4 nha bạn. Xem lại "MUC 8.3.2" nhé.
          Ngoài ra:
          //
          setup_ccp1(ccp_PWM);
          setup_ccp2(CCP_PWM);
          set_pwm1_duty(128);
          set_pwm2_duty(128);
          setup_timer_2(T2_DIV_BY_16,255,1);
          //
          Để cho PWM chạy làm trình tự theo mục 8.3.3 trong data sheet nhé.
          //
          set_pwm1_duty(128);
          set_pwm2_duty(128);
          setup_timer_2(T2_DIV_BY_16,255,1);
          setup_ccp1(ccp_PWM);
          setup_ccp2(CCP_PWM);
          //
          Thử lại nhé.
          Last edited by kevo1tinh; 27-12-2012, 11:46.

          Comment

          Về tác giả

          Collapse

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

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

          Collapse

          Đang tải...