Thông báo

Collapse
No announcement yet.

Giúp đỡ em về Timer với!

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

  • Giúp đỡ em về Timer với!

    Trước kia, khi em vẫn còn dùng Timer làm delay ( Khi dùng họ VDK 8051)
    Khi đó Timer của họ VDK AVR thực hiện gồm có cờ ngắt (TR0 với Timer0)
    và cờ tràn (TF0 với Timer0). Để cho Timer hoạt động thì ta SET TR0 và kiểm tra cờ tràn TF0. Để cho Timer ngưng hoạt động, ta chỉ cần CLR TR0. Vậy với AVR thì có như vậy không? Các bác có thể cho em ví dụ được không (CODE VESION AVR hoặc AVR STUDIO đều được).

    Em đã viết được các chương trình cho PWM, cho ngắt Timer hoạt động, nhưng không thể nào dùng Timer để thay DELAY được ( trong các chương trình cần delay), tất nhiên là không dùng ngắt Timer, chỉ dùng Timer ở chế độ bình thường
    Có thể giải thích cho em về cờ tràn (TOVx) trong thanh ghi TIFR được không?
    Lúc nào nó được set lên 1, lúc nào nó được clear về 0?

  • #2
    chào bạn, cái này trong datasheet nó nói rõ rồi,bạn chịu khó đọc heng.
    khi bạn set CS02:00 để định tần số clock thì timer sẽ hoạt động, nếu bằng 0 thì sẽ ngừng timer.còn phần cờ tràn bạn coi ở trang 86 trong datasheet nhé.(khi ctrinh tro tới trình phục vụ ngắt thì cờ tràn sẽ tự xóa về 0).

    Comment


    • #3
      Em dùng Timer ở chế độ NOLMAL: và dùng CODE Version AVR như sau:
      _Chọn TIMER0
      _Chọn xung Clock là chế độ insystem 4.000.000 Khz
      _không chọn bất kỳ ngắt nào .
      _không chọn chế độ so sánh nào .
      Khi thử nghiệm thì : Thanh ghi TCCN0 liên tục đổi giá trị (gán
      TCCN0 ra port b để xem, có nghĩa là Timer có chạy )
      Thanh ghi TIFR luôn có giá trị không đổi 0x03, mặc dù trong lập trình có gán cho nó giả trị 0 thì ra ngoài giả lập vẫn giữ nguyên giá trị 0x03, nghĩa là cờ TOV0 không bao giờ đổi giá trị cả ( dù cho TCCn0 có bằng 0 đi nữa) . Vậ là sao? Em có gửi một số hình ảnh các bước thực hiện .
      Attached Files

      Comment


      • #4
        Hu Hu..! cứu em với các đại ca ơi !!!!!!!

        Comment


        • #5
          Tại sao em không thể xóa nổi cờ OCF0 là sao nhỉ , chương trình có động gì đến nó đâu. Em đã cẩn thận xóa cả thanh ghi TIMSK=0x00 mà cái cờ khỉ gió ấy vẫn cứ bật lên.

          Comment


          • #6
            Nguyên văn bởi mrcuongcon Xem bài viết
            Em dùng Timer ở chế độ NOLMAL: và dùng CODE Version AVR như sau:
            _Chọn TIMER0
            _Chọn xung Clock là chế độ insystem 4.000.000 Khz
            _không chọn bất kỳ ngắt nào .
            _không chọn chế độ so sánh nào .
            Khi thử nghiệm thì : Thanh ghi TCCN0 liên tục đổi giá trị (gán
            TCCN0 ra port b để xem, có nghĩa là Timer có chạy )
            Thanh ghi TIFR luôn có giá trị không đổi 0x03, mặc dù trong lập trình có gán cho nó giả trị 0 thì ra ngoài giả lập vẫn giữ nguyên giá trị 0x03, nghĩa là cờ TOV0 không bao giờ đổi giá trị cả ( dù cho TCCn0 có bằng 0 đi nữa) . Vậ là sao? Em có gửi một số hình ảnh các bước thực hiện .
            Vậy là bạn đọc chưa kĩ datasheet của avr rồi. Muốn xóa TOV0 thì phải ghi nó bằng 1 (tức là TOV0=1) chứ không phải ghi nó bằng 0.
            !e

            Comment


            • #7
              Chào bạn mình biết được thế này:

              Comment


              • #8
                Dúng như bạn zemen nói. Lưu ý là đối với các bit trong thanh ghi cờ ngắt Timer TIFR đều được xóa bằng phần cứng khi xảy ra ngắt hoặc được xóa bởi phần mềm khi viết logic 1 vào bit cần xóa.
                Trong mỗi chu kì máy VĐK luôn lấy mẫu giá trị Timer trong thanh ghi TCNTx va so sánh với giá trị trong thanh ghi OCRx cho dù nó không ở chế độ so sánh hay PWM gì cả và cờ ngắt OCF sẽ được bật khi giá trị ( TCNTx = OCRx ).
                Trong bài bạn nói :
                - Timer làm việc ở chế độ Normal
                - Ko sử dụng ngắt
                Trong chế độ Normal Timer chạy từ giá trị được khởi tạo trong TCNTx cho đến giá trị TOP ( 0xFF đối với Timer0, Timer2 và 0xFFFF đối với Timer 1). Nếu giá trị OCRx nằm trong khoảng này thì cờ OCFx sẽ được bật khi 2 giá trị TCNTx = OCRx. do đó bạn có thể xóa nó nhưng ở đây bạn không dùng làm chức năng gì nên cũng chẳng cần thiết. Còn tất nhiên nếu giá trị OCRx nằm ngoai khoảng này thì cờ sẽ ko bị bật . Bạn làm đến ngắt rồi hãy chú ý đến vấn đề này trong ngắt nhé . Và chú ý hơn đến Datasheet .
                Chúc ngon miệng !!!!!!!!!!!!

                Comment


                • #9
                  Đúng như bạn GS_nobita nói ở trên, nó liên quan đến OCRx. Nhưng còn nữa: bit 7 trong thanh ghi TCCRx có cho phép so sánh hay không!

                  Comment


                  • #10
                    Còn vấn đề nữa : PORTC của atmega 16 không bình thường, em chỉ chạy mỗi chương trình quay led ra các chân cổng mà PORTC không chịu chạy cho( không phải là tất cả các chân cổng của PORTC) . Em nghĩ nó liên quan đến phần truyền thông của AVR (Chế độ JTAG)đúng không ạ, và phải làm sao để nó làm các chân cổng I\O bình thường?

                    Comment


                    • #11
                      PORTC cua ban da dat la cong out chua

                      Comment


                      • #12
                        như em đã nói, một số chân cổng của PORTC mới bị hiện tượng như vậy thôi(khoảng 4 chân ở giữa thôi). Em đã đặt cổng C làm PORT out rồi.

                        Comment


                        • #13
                          Cũng cho em hỏi luôn: TRong CODEvesion AVR ,có các lệnh hay phương pháp nào tác động đến bit kô? VD bit 7 của biến x chẳng hạn? Em muốn đưa một Byte ra con 595 qua hai đường SDA và SCl nối với chân PORTD.0 và PORTD.1nhưng khó khăn quá.

                          Comment


                          • #14
                            Nguyên văn bởi mrcuongcon Xem bài viết
                            Cũng cho em hỏi luôn: TRong CODEvesion AVR ,có các lệnh hay phương pháp nào tác động đến bit kô? VD bit 7 của biến x chẳng hạn? Em muốn đưa một Byte ra con 595 qua hai đường SDA và SCl nối với chân PORTD.0 và PORTD.1nhưng khó khăn quá.
                            Không liên quan nhưng mọi người hãy cho phép tôi hướng dẫn 1 chút trong đây.
                            Có nhiêù cách, bạn thử 2 cách sau:
                            1. Khai báo 8 bit riêng biệt cho 1 biến và gán biến này vào 1 ô nhớ cụ thể. Sau đó lại khai 1 biến khác vào ô nhớ trên, biến này làm nhiệm vụ thay đổi dữ liệu cho ô nhớ. còn 8 bít trên để lấy out ra 595. Sở dĩ không lấy được biến đầu để thay đổi dữ liệu là vì đã khai báo nó gồm 8 bít riêng lẻ thì nó không cho phép thao tác mức byte nữa.
                            2.
                            if(byteout > 127)
                            {Cong data cho lên 1;}
                            else
                            {Cong data cho xuống 0;}
                            kích hoạt CLK xong thì dịch byteout đi 1
                            byteout=byteout<<1;

                            Chúc thành công

                            email:mahaco@fpt.vn

                            Comment


                            • #15
                              Nguyên văn bởi mrcuongcon Xem bài viết
                              Cũng cho em hỏi luôn: TRong CODEvesion AVR ,có các lệnh hay phương pháp nào tác động đến bit kô? VD bit 7 của biến x chẳng hạn? Em muốn đưa một Byte ra con 595 qua hai đường SDA và SCl nối với chân PORTD.0 và PORTD.1nhưng khó khăn quá.
                              Sao o tận dụng luôn cái port còn dư nhỉ! Chẳng hạn, port C không dùng, thế thì:
                              PORTC=biến;
                              PORTD.0=PORTC.0;
                              PORTD.1=PORTD.1;

                              => Bác hoctro89xxx:
                              Theo em biết thì trong C nó viết như vầy:
                              unsigned char biến _at_ 0x20;
                              sbit biến0 = biến^0;
                              sbit biến.1 = biến^1;
                              //-----------------
                              PORTD.0=bien0;
                              PORTD.1=bien1;

                              Còn bên codevision_AVR thì như thế nào?!
                              !e

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X