Thông báo

Collapse
No announcement yet.

PWM với ATtiny13

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

  • PWM với ATtiny13

    Chào các bạn, mình đang loay hoay với cái PWM (phase corect PWM mode).
    Mình sử dụng ATtiny13 và đã làm theo các hướng dẫn trong datasheet nhưng ko hiểu tại sao vẫn ko ra. Chân 5 (OC0A) nhất định chỉ chịu ra giá trị 1. Mình đã thử các trường hợp khác, vd Clear Timer on Compare Match với toggle rất ổn.
    Đây là code:

    #include <ioavr.h>
    #include <inavr.h>

    int main(void)
    {
    DDRB = (1<<DDB0); (chân 5 là đầu ra, tương ứng PB0)
    TCCR0A = (1<<COM0A1)|(1<<WGM00);
    TCCR0B = (1<<WGM02)|(1<<CS00);
    OCR0A = 0x3B;
    while(1){}
    }
    // clk_ io/1 (From prescaler) and WM Phase correct; Compare Output Mode, Phase Correct PWM Mode WGM02=1;WGM00=1->Mode 5. COM0A1: đầu PWM ra tại OC0A.

    Cảm ơn các bạn đã chỉ giúp.
    Thân,
    AT

  • #2
    Bạn cấu hình đúng rồi, không chạy được có thể do bạn chưa đặt xung nhịp cho chíp.
    Bạn thêm 2 lệnh này nhé.
    CLKPR=(1<<CLKCPE);//đặt bít CLKCPE trong thanh ghi CLKPR để thay đổi các bít khác.
    CLKPR=0; //Clock Division Factor=1;

    Comment


    • #3
      Mình sử dụng xung nhịp trong nên theo mình nghĩ không cần phải kích hoạt xung nhịp hoạt động nữa. Như mình đã nói ở trên, khi mình dùng Mode khác thì nó vẫn chạy tít, mỗi PWM là không chịu ra

      Comment


      • #4
        Nguyên văn bởi anhtuanvu Xem bài viết
        Mình sử dụng xung nhịp trong nên theo mình nghĩ không cần phải kích hoạt xung nhịp hoạt động nữa. Như mình đã nói ở trên, khi mình dùng Mode khác thì nó vẫn chạy tít, mỗi PWM là không chịu ra
        Bạn thử với đoạn code này xem sao (mình viết bằng GCC), mình có kèm cho bạn file hex và proteus để mô phỏng:
        //XXXXXXXXXXXX-ATTINY 13-XXXXXXXXXXXXXXX
        //xxxx-Project:PWM Testing
        //xxxx-Author: Apple-dientuvietnam.net
        //xxxx-Testing's mode: Fast PWM, set on compare match
        //xxxxxxxxxxxxxxxxx---------------xxxxxx
        #include "avr/io.h"
        #include "avr/delay.h"

        void main(void)
        {
        DDRB|=(1<<DDB0);
        OCR0A=0x58;
        TCCR0A|=(3<<COM0A0)|(3<<WGM00);
        TCCR0B=(0<<WGM02)|(1<<CS00);
        while(1){}
        }
        Chúc bạn sớm khắc phục được lỗi.
        Attached Files
        Mấy ai định nghĩa được tình yêu.
        Có gì đâu một buổi chiều.
        Kề dao lên cổ yêu hay chết .
        Gật đầu cái rụp thế là yêu.

        --------
        Apple

        Comment


        • #5
          Cảm ơn bạn quả táo nhé . Mình đã xem lại và có tham khảo một người bạn đã từng gặp vấn đề này và phát hiện là mình đặt config chưa hoàn toàn chính xác.
          Mình muốn có PWM với tần số tự chọn (phase correct pwm) thì sử dụng Mode 5, OCROA = 0x58 (xác định tần số của PWM), OCROB = 0x66 (xác định duty cycle của PWM) và cuối cung là xung sẽ ra ở cổng B .
          Cảm ơn các bạn đã theo dõi và trả lời.
          Thân,
          AT
          ps: bạn táo chắc viết vội cho mình nên đã gán 3 vào COM0A0

          Comment


          • #6
            Nguyên văn bởi anhtuanvu Xem bài viết
            ps: bạn táo chắc viết vội cho mình nên đã gán 3 vào COM0A0
            Ko sai đâu bạn,mình thích xài WinAVR GCC ở chỗ đó đó
            Mấy ai định nghĩa được tình yêu.
            Có gì đâu một buổi chiều.
            Kề dao lên cổ yêu hay chết .
            Gật đầu cái rụp thế là yêu.

            --------
            Apple

            Comment

            Về tác giả

            Collapse

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

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

            Collapse

            Đang tải...
            X