Thông báo

Collapse
No announcement yet.

Bộ đo tần số với ATmega8

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

  • Bộ đo tần số với ATmega8

    Em có ý tưởng dùng ATmega8 để làm bộ đo tần số với việc sử dụng led 7 thanh để hiển thị. Hiện em đang phân vân với các cách sau đây:
    _Dùng input capture của chíp
    _Dùng bộ timer/counter để đếm
    _Dùng IC chia tần ngoài VD như 74hc4060,4020,74HC590 kết hợp với ATmega8, đây có lẽ là cách mà ATmega8 ít phải làm việc nhất.
    Nhưng em muốn làm sao cho tần số có thể đo được là >20Mhz, và sản phẩm này em sẽ cố gắng để thiết kế sao cho nhỏ gọn nhất.
    Đây cũng mới chỉ là ý tưởng, nhờ mọi người giúp đỡ và cùng xây dựng.

    Em cũng muốn mọi người cùng làm, cùng học tập về AVR, và tất nhiên là muốn có một bộ đo tần số, đo độ rộng xung, bộ counter... hoàn chỉnh.

  • #2
    Nguyên văn bởi mrcuongcon Xem bài viết
    Em có ý tưởng dùng ATmega8 để làm bộ đo tần số với việc sử dụng led 7 thanh để hiển thị. Hiện em đang phân vân với các cách sau đây:
    _Dùng input capture của chíp
    _Dùng bộ timer/counter để đếm
    _Dùng IC chia tần ngoài VD như 74hc4060,4020,74HC590 kết hợp với ATmega8, đây có lẽ là cách mà ATmega8 ít phải làm việc nhất.
    Nhưng em muốn làm sao cho tần số có thể đo được là >20Mhz, và sản phẩm này em sẽ cố gắng để thiết kế sao cho nhỏ gọn nhất.
    Đây cũng mới chỉ là ý tưởng, nhờ mọi người giúp đỡ và cùng xây dựng.

    Em cũng muốn mọi người cùng làm, cùng học tập về AVR, và tất nhiên là muốn có một bộ đo tần số, đo độ rộng xung, bộ counter... hoàn chỉnh.

    Dùng timer/counter là tốt nhất . Với ATMEGA 8 có thể đo trực tiếp được 70MHz
    Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

    Comment


    • #3
      Oái, 70Mhz lận ??? mà lại đo trực tiếp?? Trong datasheet của nó em không thấy nói đến tần số đầu vào cao nhất của bộ timer/counter. Tuy nhiên, bộ Timer/counter có thể dùng chung thạch anh với chíp khoảng 16Mhz max. Một số mạch em cũng đã seach trên mạng tuy nhiên nó dùng IC chia tần, và thường dùng loại chíp AVR cũ hoặc là dùng PIC.
      Việc thiết kế đầu vào cho bộ đếm tần này cũng khá quan trọng, nhưng cũng không phải là khó lắm.
      Bác Quế Dương gợi ý thêm đi ?

      Comment


      • #4
        Nguyên văn bởi queduong Xem bài viết
        Dùng timer/counter là tốt nhất . Với ATMEGA 8 có thể đo trực tiếp được 70MHz
        anh chia tần rồi đưa vào trong ATMEGA à.

        Sông dài, Thuyền lớn, Biển rộng bao la.
        Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

        Comment


        • #5
          70MHz theo ngu ý của em là bác ý dùng như sau:
          Timer 16bit over_flow sẽ tăng một biến nào đó như là biến "a" rồi lại đếm tiếp ... cuối cùng Frequency đếm được sẽ bằng 65536*a + phần lẻ !!! =)). khi đó đếm được hơn 70Mhz ý chớ!!!

          Comment


          • #6
            Nguyên văn bởi mrcuongcon Xem bài viết
            Oái, 70Mhz lận ??? mà lại đo trực tiếp?? Trong datasheet của nó em không thấy nói đến tần số đầu vào cao nhất của bộ timer/counter. Tuy nhiên, bộ Timer/counter có thể dùng chung thạch anh với chíp khoảng 16Mhz max. Một số mạch em cũng đã seach trên mạng tuy nhiên nó dùng IC chia tần, và thường dùng loại chíp AVR cũ hoặc là dùng PIC.
            Việc thiết kế đầu vào cho bộ đếm tần này cũng khá quan trọng, nhưng cũng không phải là khó lắm.
            Bác Quế Dương gợi ý thêm đi ?

            --- Bạn dùng counter của nó , đếm clock từ phía bên ngoài ( chẳng hạn đếm vào counter 1 )

            --- Bên trong bạn định thời 1 s hoặc gate time theo ý muốn .

            --- số xung clock đếm được ... sẽ bằng số lần tràn x loại counter ( 8 bits , 16 bits ) + số lẻ .

            --- Nếu đếm trong 1 s ===> đây là loại direct frequency counter ( đọc trực tiếp đơn vị là Hz )


            Với Atmega 8 có thể đo được trực tiếp 70Mhz . Trước đây tôi có làm máy đo tần số , trong quá trình so sánh các MCU tôi đã thử nghiệm .

            ( Về lý thuyết nếu dùng counter ... sẽ đo được tần số rất cao >>> lớn hơn 70Mhz nhiều ... Nhưng thực tế do kết cấu phần cứng ... thì chỉ đo trực tiếp được tốt trong tầm 70Mhz thôi .

            ( với Pic16Fxxx được khoảng 50Mhz )
            Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

            Comment


            • #7
              Nguyên văn bởi quoc_thaibk Xem bài viết
              anh chia tần rồi đưa vào trong ATMEGA à.
              đo trực tiếp .... còn chia tần rồi thì đo đến 2GHz , 5GHz , 10GHz ... là chuyện thường ... ( lúc đó sẽ do con chia tần nó hạ xuống ... chứ không phải khả năng của ATMEGA 8 nữa )
              Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

              Comment


              • #8
                Nguyên văn bởi queduong Xem bài viết
                đo trực tiếp .... còn chia tần rồi thì đo đến 2GHz , 5GHz , 10GHz ... là chuyện thường ... ( lúc đó sẽ do con chia tần nó hạ xuống ... chứ không phải khả năng của ATMEGA 8 nữa )
                Vậy dùng IC gì hoạt động ở 2G, 5G để chia tần số hả anh QD? (hay có phương pháp khác?)
                ●█═██▄▄▄▄▄▄▄▄▄
                ▄▅██████▅▄▃▂
                ████████████████
                ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

                Comment


                • #9
                  Nguyên văn bởi luulinh Xem bài viết
                  Vậy dùng IC gì hoạt động ở 2G, 5G để chia tần số hả anh QD? (hay có phương pháp khác?)
                  ví dụ uPB1507
                  Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                  Comment


                  • #10
                    uPB1507

                    Nhưng vẫn đề là mua mấy con nàydễ không, giá không quá ~~ hight
                    Không thì chấp nhận 70MHz thôi cũng đủ dùng rồi.
                    ●█═██▄▄▄▄▄▄▄▄▄
                    ▄▅██████▅▄▃▂
                    ████████████████
                    ◥⊙▲⊙▲⊙▲⊙▲⊙▲⊙▲◤

                    Comment


                    • #11
                      Với 70MHz thì đầu vào của em như thế này có ổn không nhỉ?
                      Attached Files

                      Comment


                      • #12
                        Nguyên văn bởi mrcuongcon Xem bài viết
                        Với 70MHz thì đầu vào của em như thế này có ổn không nhỉ?
                        Chú ý các IC số !!! Phải dùng các loại IC số có tần số cắt cao Ví dụ 74Fxxx

                        hoặc dòng AHCT ... chứ mấy cái 74HC , 74LS ... thì chỉ đến 35Mhz là cùng

                        --- Nên dùng Smitt triger để có tín hiệu tốt và chuẩn .

                        Đầu vào nên dùng transistor trường để có độ nhạy cao , trở kháng lớn ... có diode bảo vệ cường độ mạnh làm hỏng hoặc gây sai số !.

                        --- Có thể tham khảo cái này :
                        Module RF chuyên dụng điều khiển, truyền dữ liệu, thiết kế đề tài, dự án điện tử - chuyển giao công nghệ... ĐT: 0904964977 - email: dientuqueduong@yahoo.com

                        Comment


                        • #13
                          Nguyên văn bởi queduong Xem bài viết
                          --- Bạn dùng counter của nó , đếm clock từ phía bên ngoài ( chẳng hạn đếm vào counter 1 )

                          Với Atmega 8 có thể đo được trực tiếp 70Mhz . Trước đây tôi có làm máy đo tần số , trong quá trình so sánh các MCU tôi đã thử nghiệm .

                          ( Về lý thuyết nếu dùng counter ... sẽ đo được tần số rất cao >>> lớn hơn 70Mhz nhiều ... Nhưng thực tế do kết cấu phần cứng ... thì chỉ đo trực tiếp được tốt trong tầm 70Mhz thôi .

                          ( với Pic16Fxxx được khoảng 50Mhz )
                          Nếu vậy thì nó chế tạo IC số dạng không đồng bộ đối với các tín hiệu ngõ vào à.
                          Việc thắc mắc là ở điểm thường thì các PIN I/O được cập nhập bằng tần số của hệ thống (Fosc hoặc Fcy) mà các F này tần số chưa đạt đến đó.
                          Nếu gặp trường hợp vậy thì có thể sẽ dẫn đến quá tần số có thể đo (metastability)

                          Sông dài, Thuyền lớn, Biển rộng bao la.
                          Tháo neo ngôn ngữ, lèo lái con thuyền kiến thức nhân loại.

                          Comment


                          • #14
                            timer

                            nhờ diễn đàng chỉ giúp: Tôi muốn đo thời gian tồn tại của một xung, dùng timer/count với TCCR1B. Khi có xung (tín hiệu vào) thì kích hoạt timer để bắt sườn lên của tín hiệu và ngừng khi sườn xuống, tuy nhiện timer chỉ đưa ra được count đếm. Giả sử tôi muốn dùng count này để chuyển sang thành thời gian và cho hiển thị ra led 7 đoạn thì làm thế nào, công thức nào để tính.

                            Comment


                            • #15
                              đo thời gian của xung

                              Nguyên văn bởi the rock Xem bài viết
                              nhờ diễn đàng chỉ giúp: Tôi muốn đo thời gian tồn tại của một xung, dùng timer/count với TCCR1B. Khi có xung (tín hiệu vào) thì kích hoạt timer để bắt sườn lên của tín hiệu và ngừng khi sườn xuống, tuy nhiện timer chỉ đưa ra được counts đếm. Giả sử tôi muốn dùng counts này để chuyển sang thành thời gian và cho hiển thị ra led 7 đoạn thì làm thế nào, công thức nào để tính.
                              đây là chương trình:
                              #include <avr\io.h>
                              #include <avr\interrupt.h>
                              #include <avr\iom8.h>
                              #define ICP PINB0
                              //định nghĩa bộ đếm tràn
                              uint16_t ov_counter;
                              //định nghĩa bắt đầu và kết thúc của tín hiệu
                              uint16_t rising, falling;
                              uint32_t counts;
                              //Chương trình con phục vụ ngắt bộ đếm tràn
                              ISR(TIMER1_OVF_vect){
                              ov_counter++;
                              }
                              //Chương trình con phục vụ ngắt capture Timer1
                              ISR(TIMER1_CAPT_vect){
                              //chương trình con kiểm tra bắt đầu và kết thúc xung
                              if (ICP) //Nếu mức cao
                              {
                              //ghi lại thời điểm bắt đầu
                              rising=ICR1;
                              TCCR1B=TCCR1B&0xBF;
                              //Reset bộ đếm tràn
                              ov_counter=0;
                              }
                              else
                              {
                              //lưu lại thời gian kết thúc xung (sườn xuống)
                              falling=ICR1;
                              TCCR1B=TCCR1B|0x40;
                              counts=(uint32_t)falling-(uint32_t)rising+(uint32_t)ov_counter;
                              /*Chuyển đổi counts sang thời gian s và gửi dữ liệu đến led7đoạn*/
                              }
                              }
                              int main(void) {
                              TIMSK=0x24;
                              TCCR1B=0xC1;
                              sei();
                              for ( ;; ) {
                              // Vòng lặp vô tận
                              }
                              }

                              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