Thông báo

Collapse
No announcement yet.

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

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

  • 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, 11:37.

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


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


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


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