Thông báo

Collapse
No announcement yet.

Tính thời gian định thời

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

  • Tính thời gian định thời

    Mấy bác cho em hỏi cách tính thời gian ngắt của timer trong định thời avr theo cách này có đúng ko nhé( Mình thiết lập trên codevision)
    -Ta chọn 125khz, như vậy tron 1s thì timer đếm đc 125000 giá trị, như vậy trong 1ms thì timer đếm đc 125 giá trị, vậy thì cần nạp số (255-125)=130=0x82 vào TCNT0=0x82 đúng ko nhỉ????Bác nào có cách tính khác và chính xác thì cứ chỉ bảo nhé


    Add: 97 Quán Nam - Lê Chân - Hải Phòng.
    Tel: 031 518648 Phone: 0904 283 505

  • #2
    Bạn hỏi ngắn gọn wa, tơ chưa hiểu?
    Xung nhịp cho timer có tần số bao nhiêu(125Khz hả)?
    bạn muốn thời gian định thời là bao nhiêu(phải la 1 ms ko)?
    Tớ tính theo cách này:
    Xung nhịp là 125Khz-->thời gian timer đếm lên 1: là 1/125=8us
    Ta cần định thời 1ms=1000us-->timer0 cần đếm 1000/8=125 lần
    Vậy giá trị nạp vàoTCNT0 là: 256-125=131(0x83)
    Timer đếm từ 0-->255 là 256 giá trị, ko phải 255.

    Comment


    • #3
      ok.Ý mình là lấy tần số xung nhịp cho nó là 125khz từ thạc anh 8Mhz.Mình ko có đọc nhiều về phần cứng nên cái nà cũng ko rõ lắm.Bạn có cách tính giống mình như vậy là ổn rồi.


      Add: 97 Quán Nam - Lê Chân - Hải Phòng.
      Tel: 031 518648 Phone: 0904 283 505

      Comment


      • #4
        bạn ơi cho mình hỏi, cơ chế định thời của TIMER0 của AVR như thế nào.
        mình lập trình để timer đếm 200 nhịp rùi vào ngắt.
        Nhưng TCNT0 đêm vượt giá trị 0, cụ thể là 04h rồi mới vào ngắt, và ở trong ngắt thì TCNT0 vẵn tiếp tục đếm.
        Mong các pro chỉ giá giúp.

        bạn nào có chương trình nào viết bằng CodevisionAVR cho mình xin tham khảo với
        nick yahoo cua mình : boyhaychat
        thanks mọi người

        Comment


        • #5
          nên tính toán thời gian để nạp trước giá trị vào cho TCNT0 cho chuẩn.
          nên nhớ là timer sẽ đếm từ giá trị được nạp trước trong TCNT0 và cờ ngắt đựoc coi như là bít thứ 9 của thanh ghi TCNT0.
          hãy quý những j hiện tại mình đang có

          Comment


          • #6
            em đang viết cho pic 16f877a sao e thiết lập cách tính nhu vay lại k đc nhỉ,
            thiết lập 10ms voi thanh ghi 16bit
            65536-(10ms/(4/20000000))
            đây là công thức e kiếm trong help cua ccs ,va cho e hỏi số 4 lấy từ đâu ạ

            Comment


            • #7
              Nguyên văn bởi thecongbn92 Xem bài viết
              em đang viết cho pic 16f877a sao e thiết lập cách tính nhu vay lại k đc nhỉ,
              thiết lập 10ms voi thanh ghi 16bit
              65536-(10ms/(4/20000000))
              đây là công thức e kiếm trong help cua ccs ,va cho e hỏi số 4 lấy từ đâu ạ
              Thực ra với số 2 byte (16 bit) thì 65536 = 0 vì vậy có thể viết con số trên là -10ms/(4/20 000 000) = -50 000. Load/Reload -50000 cho Timer là được Intervar=10ms.
              Số 4 là do PIC được thiết kế có bộ chia 4 sau thạch anh ngoài.... Còn tại sao chia 4... thì đợi nghĩ tí đã... nhớ là đã biết lý do mà giờ quên mất... hic tại hôm nay là thứ 5 hay sao ý!!!!!!!!!!
              Hôm nay trời nắng chang chang.
              Mèo con đi học chẳng mang thứ gì.
              Chỉ mang một cái bút chì.
              Và mang một mẩu bánh mì con con.

              Comment


              • #8
                Chương trình mình viết trên avrstudio định thời 1s.
                /*chuong trinh dung timer0 lam bo dinh thoi timer*/
                #include<avr/io.h>
                #include<avr/interrupt.h>
                unsigned int a;
                int main (void)
                {
                DDRB=0xff;
                PORTB=0x00;

                TCCR0|=(0<<CS02|1<<CS01|1<<CS00); //CS02=0;CS01=1;CS00=1__pescaler=64
                TIMSK|=(1<<TOIE0); //TOIE0=1__cho phep ngat khi tran
                TCNT0=131;
                sei();
                a=0;
                while(1){}

                }

                ISR(TIMER0_OVF_vect)
                {
                TCNT0=131;//-----------1ms 256-(1000/(1/8)/64)=131
                a++;
                if(a==1000)//----------1s
                {
                PORTB^=(1<<0);
                a=0;
                }
                }

                Comment

                Về tác giả

                Collapse

                hoangdai Hoàng Đình Đại-Điện tự động công nghiệp Tìm hiểu thêm về hoangdai

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

                Collapse

                Đang tải...
                X