Thông báo

Collapse
No announcement yet.

Bộ đếm xung, có nhớ

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

  • Bộ đếm xung, có nhớ

    Mọi người cho em hỏi: Bây giờ em đang muốn làm một bộ đếm xung, tức là lối vào sẽ là dạng xung vuông, nhưng mà lúc có xung, lúc không có xung và em muốn đếm số xung ấy và lưu vào bộ nhớ (Mỗi lần có xung thì bộ nhớ tăng thêm 1).Và sau đó kết quả đó dc xuất ra ngoài.Bộ đếm cỡ khoảng đến 1.000.000. Vì em mới bắt đầu làm với cái AVR này nên chưa hiểu rõ lắm, không biết có phải là lưu dữ liệu vào eprom không? và chân đưa xung vào là chân nào, chân xuất dữ liệu ra là chân nào? Cần cấu hình những chân nào? và cuối cùng là ghi đọc bộ nhớ thế thì cần khai báo và dùng hàm gì ạ. Em đang tìm hiểu nhưng do chưa có kinh nghiệm nên khá khó khăn, mong mọi người giúp em với.
    Em xin cảm ơn rất nhiều !

  • #2
    phân tích giải thuật ...

    Nguyên văn bởi hoangsonk49 Xem bài viết
    Mọi người cho em hỏi: Bây giờ em đang muốn làm một bộ đếm xung, tức là lối vào sẽ là dạng xung vuông, nhưng mà lúc có xung, lúc không có xung và em muốn đếm số xung ấy và lưu vào bộ nhớ (Mỗi lần có xung thì bộ nhớ tăng thêm 1).Và sau đó kết quả đó dc xuất ra ngoài.Bộ đếm cỡ khoảng đến 1.000.000. Vì em mới bắt đầu làm với cái AVR này nên chưa hiểu rõ lắm, không biết có phải là lưu dữ liệu vào eprom không? và chân đưa xung vào là chân nào, chân xuất dữ liệu ra là chân nào? Cần cấu hình những chân nào? và cuối cùng là ghi đọc bộ nhớ thế thì cần khai báo và dùng hàm gì ạ. Em đang tìm hiểu nhưng do chưa có kinh nghiệm nên khá khó khăn, mong mọi người giúp em với.
    Em xin cảm ơn rất nhiều !
    Đếm xung là phải biết đếm trong một khoảng thời gian hoặc một mốc tín hiệu nào đó theo chuẩn thời gian hay biên độ, hay mã ...gì gì đó. Không biết anh hoangsonk49 muốn đếm xung theo kiểu nào làm sao có ý kiến ?

    Cách đếm 1 :

    Đếm xung trong một đơn vị thời gian, còn gọi là đếm số xung trong thời gian thực. Mạch điện ghi nhận xung liên tục hay đứt đoạn và biên độ không đều --> Schmitt trigger để tiết điệu (nâng / hạ biên độ / hạn biên đến mức cần thiết) cho bộ đếm xung cơ bản ghi nhận --> display.

    Cùng lúc đó, bộ định thời khả định (cài đặt được) hoạt động đếm thời gian thực, và sẽ hiển thị tổng số xung sau thời gian định sẵn và bắt đầu qui trình đếm mới cho thời lượng mới.

    Nhận xét :

    - Số hiển thị là số xung của thời đoạn trước nó. Sự thay đổi kết quả hiển thị chỉ diễn ra sau một chu trình đếm.

    - Quá trình là không liên tục --> hiển thị không liên tục, khó theo dõi.

    Phương án kết hợp được sử dụng là :

    - Hiển thị số xung liên tục tăng dần cho đến hết qui trình thì hold trong thời gian ngắn vài giây rồi tiếp tục báo tổng số xung cho chu trình đếm sau. Cách này hơi khó khăn nếu set thời lượng đếm của một qui trình ngắn. Ví dụ, đếm số xung trong 10 giây, thì trị số hold 2 giây là quá ngắn để đọc.

    - Có thể kết hợp với một nút "Hold" và "prev" để đọc tổng số xung tức thời của một chu trình (hold) hay để đọc tổng số xung trong thời đoạn trước đó (Prev). Phương án này có khó khăn trong một số trường hợp (ví dụ, sắp hết thời lượng của một chu trình, đang chuyển qua chu trình sau thì nhấn nút "prev" sẽ đọc lẫn giữa hai trị số của chu trình n-1 và n-2), thao tác còn bán thủ công (nhấn nút). Tuy nhiên vẫn có thể giải quyết không khó khăn lắm nếu dùng 3 bảng hiển thị LCD : môt cho trị số tức thời n ; một cho tốc độ xung tức thời Sn và một cho trị số Hold của chu trình n-1. Từ các thông tin đó, ta đưa lên interface để hiển thị trên màn hình máy tính qua các thiết bị và giao diện vật lý cần thiết.

    Từ phân tích giải thuật nói trên. Lan Hương hi vọng giúp được chút nào cho anh trong việc xây dựng các bước lập trình cho cách đếm này.

    Các phương án đếm khác tạm thời Lan Hương xin khất tại đây.

    Thân ái.

    Lan Hương.

    Comment


    • #3
      À, cảm ơn bạn Lan Hương đã đưa ra phương án đếm 1. Mình cũng đã dùng trigo Smith để tạo ra dạng xung 0101...rồi. Khi có lối vào ở mức 1 thì mình muốn bộ nhớ sẽ tăng thêm 1 và dữ liệu này được ghi ngay cả khi mất điện. Vì bộ của mình là đếm số vạch mà. Thì phần xác định vạch mình dùng sensor và đã phân biệt dc vạch và tạo thành các dạng 0101...để đưa vào Vi xử lý, nhưng mình chưa dùng vi xử lý bao giờ nên giờ không biết là với lối vào đó thì lưu dữ liệu kiểu gì.
      Tóm lại, bây giờ mình đang có 1 dãy xung 010101...để đưa vào vi xử lý và mình muốn khi lối vào là 1 thì bộ nhó tăng thêm 1 và xuất giá trị đó ở lối ra.
      Một lần nữa ,cảm ơn bạn Lan Hương vì cách đếm 1

      Comment


      • #4
        Nguyên văn bởi hoangsonk49 Xem bài viết
        À, cảm ơn bạn Lan Hương đã đưa ra phương án đếm 1. Mình cũng đã dùng trigo Smith để tạo ra dạng xung 0101...rồi. Khi có lối vào ở mức 1 thì mình muốn bộ nhớ sẽ tăng thêm 1 và dữ liệu này được ghi ngay cả khi mất điện. Vì bộ của mình là đếm số vạch mà. Thì phần xác định vạch mình dùng sensor và đã phân biệt dc vạch và tạo thành các dạng 0101...để đưa vào Vi xử lý, nhưng mình chưa dùng vi xử lý bao giờ nên giờ không biết là với lối vào đó thì lưu dữ liệu kiểu gì.
        Tóm lại, bây giờ mình đang có 1 dãy xung 010101...để đưa vào vi xử lý và mình muốn khi lối vào là 1 thì bộ nhó tăng thêm 1 và xuất giá trị đó ở lối ra.
        Một lần nữa ,cảm ơn bạn Lan Hương vì cách đếm 1
        1/. Anh nên click vào nút "cảm ơn" ở cuối bài cho đúng qui định của diễn đàn.

        2/. Anh thấy giải thuật của cách đếm 1 đã thoả mãn yêu cầu công việc của anh chưa ? Lan Hương thấy rằng hình như các máy đọc mã vạch không dùng cách đếm này thì phải. hay là nó khác với "đếm số vạch" ? Hic.

        Đang nghiên cứu lại mạch, có gì sẽ trình bày tiếp cho anh.

        Lan Hương.

        Comment


        • #5
          Đúng, ý mình là đếm số vạch chứ không phải là đọc mã vạch.Tức là không phải đếm trong 1 đơn vị thời gian mà là cái bộ đếm này chạy liên tục không nghỉ, nó cứ canh chừng khi nào lối vào là 1 thì bộ nhớ tăng 1 và xuất dữ liệu luôn. Dữ liệu xuất ra của mình sẽ được truyền wireless nhưng phần xử lý wireless thì đã ok. Chỉ cần mỗi phần đếm nữa thôi. Nó gần như là đếm người đi qua cửa ấy, cứ có một người thì bộ nhớ tăng thêm 1 và lưu kể cả khi mất điện. Có 9 người qua cửa thì bộ nhờ lưu là 9, thêm một người qua cửa thì bộ nhớ tăng thành 10 và xuất cái số 10 ở lối ra (Tất nhiên dưới dạng nhị phân để xử lý tiếp).
          Có thể mạch này không khó nhưng vì mình chưa làm với vi xử lý bao giờ nên cả lập trình cho con ATMEL 8L lần làm phần cứng thấy khá là khó khăn, mong các bạn giúp đỡ. Cảm ơn nhiều !

          Comment


          • #6
            Nghe Lan Hương nói thì nó loằng tà là oằng vậy nhưng thực hiện thì đơn giản lắm. Chỉ cần đút vào 1 chân timer là đếm dễ dàng. Còn làm thế nào để đếm dễ dàng thì cứ từ từ mà tìm hiểu nhé.
            AVR đã quay trở lại: ATMEGA32: 66k, ATMEGA8A: 30k, ATMEGA48: 30k.
            Xem thêm tại Online Store ---> Click here
            Mob: 0982.083.106

            Comment


            • #7
              day la de tai bai tap lon cua minh ! ui!

              Comment


              • #8
                Re:

                Nếu đếm vậy sao bác không dùng ngắt ngoài để đếm. Mỗi khi có ngắt thì tăng biến đếm lên 1 và gọi hàm ghi biến vào EFPROM. Mạch cần phải có một cái tụ gì đó lớn một chút để đề phòng trường hợp mất điện giữa chừng. Khi có điện lại thì đọc giá trị lưu trữ trong ROM ra đếm tiếp.

                Comment


                • #9
                  Chà cái dụ này...Nếu mỗi lần có xung mà đem eeprom ra ghi thì hơi mệt đó. Bác hoangonk49 cần bộ đếm 1.000.000 , phải chú ý đến giới hạn số lần đọc ghi của chú eeprom mới đc

                  Em nghĩ chỉ nên dùng eeprom để lưu dữ liệu (trước) khi MCU bị cúp điện thôi.
                  Muốn đếm thì dùng ngắt ngoài hoặc đưa vào timer/counter là được.
                  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


                  • #10
                    Nguyên văn bởi apple Xem bài viết
                    Chà cái dụ này...Nếu mỗi lần có xung mà đem eeprom ra ghi thì hơi mệt đó. Bác hoangonk49 cần bộ đếm 1.000.000 , phải chú ý đến giới hạn số lần đọc ghi của chú eeprom mới đc
                    Vụ này quan trọng. Nên chơi 1 ẻm NvRAM đi thôi. DS12887 hay j j đó chẳng hạn, vừa có đồng hồ thời gian thực, lại tha hồ mà ghi, đọc. hè hè hè
                    Nỏ biết chữ mần răng ký được??!! Thôi nhé.

                    Comment


                    • #11
                      Nguyên văn bởi thangktvta Xem bài viết
                      Vụ này quan trọng. Nên chơi 1 ẻm NvRAM đi thôi. DS12887 hay j j đó chẳng hạn, vừa có đồng hồ thời gian thực, lại tha hồ mà ghi, đọc. hè hè hè
                      Từ đầu đến bây gìơ mới thấy một phát biểu đúng ý Lan Hương.

                      Cần tích hợp 1 pin tương tự như CMOS Battery.

                      Thân ái

                      Lan Hương.

                      Comment


                      • #12
                        Nguyên văn bởi thangktvta Xem bài viết
                        Vụ này quan trọng. Nên chơi 1 ẻm NvRAM đi thôi. DS12887 hay j j đó chẳng hạn, vừa có đồng hồ thời gian thực, lại tha hồ mà ghi, đọc. hè hè hè
                        Hơi mệt đó bác thangktvta, giao tiếp SPI rùi lưu lằng nhằng số longint, sợ bạn í không kham nổi. Ngu ý của mình thế này:

                        -Không cần lưu eeprom thường xuyên.
                        -Bộ đếm cho vào chân T1, Timer1 cấu hình bộ đếm, tràn thì tạo ngắt
                        -Chương trình ngắt bộ đếm cộng dồn vào 1 byte nữa là đủ (24 bit ~ 16 triệu đơn vị, dư dả)
                        -Chỉ khi nào nguồn suy giảm (phát hiện bằng mạch chia áp, kèm tụ giữ, cho vào chân INT0), kích cạnh xuống INT0 thì lưu tất cả biến dồn, TCNT1H/L vào EEPROM ngay
                        -Để giữ cho vdk đủ thời gian thực hiện, cho tụ lưu điện 100uF cấp nguồn. Lưu ý nguồn VCC chỉ để chạy vdk thôi, lái LED hay mạch schmidt trigger cho chạy bằng nguồn VIN
                        -Cuộn dây, tụ giữ và diode 4148 chỉ để giữ an toàn, không cần cũng được. Chỉ cần tụ lưu đủ lớn là chạy được
                        Attached Files
                        Đẹp từng kilomét

                        Comment


                        • #13
                          AVR có SRAM xài thoải mái (mega8 & mega16 đều có 1Kbyte SRAM) nếu ta đi mua thêm con ds12887 thì coi bộ độn giá thành lên cao mà lại bỏ phí tài nguyên của MCU rồi. Theo em cách đó ko khả thi lắm, e có chút góp ý cho bác hoángonk49 có thêm lựa chọn đó là thiết kế một nguồn dự phòng cho MCU (chơi cục pin 9v) để nó lưu giữ liệu vào eeprom và làm thêm thoải mái một số việc cần thiết khác nếu cần sau khi cúp điện, sau khi lưu xong cho MCU vào chế độ Power-save hoặc Standby. Tất nhiên vẫn phải có phần detect mất - có nguồn chính và wake-up cho MCU.
                          Last edited by apple; 14-10-2008, 02:39.
                          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


                          • #14
                            ừ, mình cũng có pin dự phòng cho trường hợp mất điện rồi. Thực ra cái mạch này đã có sẵn,của 1 bọn nước ngoài làm, giờ nhiệm vụ của mình là làm lại cái mạch y như vậy mà phải tự vẽ sơ đồ,mua linh kiện.v.v...Và yêu cầu là phải làm mạch kích thước nhr như thế, mỗi chiều khoảng 2 đốt ngón tay (Cả phần đếm và phần phát qua RF, hai mảng chia đôi nên phần kích thước cho phần đếm chỉ có một nửa mạch đó thôi). Bọn nó dùng ATMEGA8L
                            2! Apple: Nếu dùng pin như thế thì lưu được khoảng bao lâu, vì cái bộ này nếu làm dc thì dùng rất thường xuyên (năm này qua năm khác), và số lượng lớn và thời gian mất điện có thể kéo dài nên lúc đó không thể đi thay pin cho tất cả được.Như pin bọn nước ngoài dùng là 5.5V
                            2! Kilodeth: Mình thấy cách này khá hợp lý, nếu như vậy thì bình thường vẫn phải nhớ vào SRAM vì khi mà bộ đếm tăng 1 thì vẫn phải đọc cái số đếm đó để truyền ra ngoài, khi phát hiện mất điện thì nó tự lưu số liệu từ SRAM vào EPROM
                            Nhưng có câu này mình thấy hơi ngu ngu nhưng vẫn mạnh dạn hỏi xem: Dữ liệu xuất ra dưới dạng 0101, nếu như là sơ đồ phát LED7 đoạn thì sẽ có 7 output gắn vào 7 thanh.Nhưng khi dữ liệu của mình lên đến 100.000 thì làm sao đủ output để đọc dc số 0101... này, tức là dữ liệu ra là nối tiếp hay song song, vì mình thấy trên cái mạch bon nước ngoài kia làm chỉ có đúng một đường nối sang phần phát ra RF nên đoán là dữ liệu phải ra nối tiếp, nhưng như thế khá là nguy hiểm vì nếu chỉ lỗi một bit thôi thì cũng giảm số của mình mất một nửa rồi.

                            Comment


                            • #15
                              Nếu dùng pin như thế thì lưu được khoảng bao lâu, vì cái bộ này nếu làm dc thì dùng rất thường xuyên (năm này qua năm khác)
                              Cái này bác kiếm mấy cục pin có thể nạp lại, khi mất điện nó sẽ dùng pin còn không thì thôi.


                              Dữ liệu xuất ra dưới dạng 0101, nếu như là sơ đồ phát LED7 đoạn thì sẽ có 7 output gắn vào 7 thanh.Nhưng khi dữ liệu của mình lên đến 100.000 thì làm sao đủ output để đọc dc số 0101... này, tức là dữ liệu ra là nối tiếp hay song song, vì mình thấy trên cái mạch bon nước ngoài kia làm chỉ có đúng một đường nối sang phần phát ra RF nên đoán là dữ liệu phải ra nối tiếp, nhưng như thế khá là nguy hiểm vì nếu chỉ lỗi một bit thôi thì cũng giảm số của mình mất một nửa rồi.
                              Cái đoạn LED7 này bác nhầm rồi. Led7 luôn luôn dùng 7 bit (8 bit cả dot) để hiển thị dữ liệu, còn số cần hiển thị ra LED của bác có bao nhiêu chữ số thì cần bấy nhiêu LED7, ví dụ cần hiển thị số 100.000 thì sẽ cần 5 con LED7 đó bác.
                              Còn việc truyền nối tiếp - nói như bác đúng, chỉ cần sai một bit là coi như vứt cả đống bít vừa truyền. Bác nên nghiên cứu mấy cái mã đường truyền để kiểm tra và sửa lỗi bit....
                              Nỏ biết chữ mần răng ký được??!! Thôi nhé.

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X