Thông báo

Collapse
No announcement yet.

Dùng phần mềm để chống xung nẩy cho ngắt ngoài!

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

  • #16
    trời kô bit là còn trang tiếp theo!

    Comment


    • #17
      Tu thấy 8051 nó "nhớ" dc ngắt ngoài khi đang xử lí ngắt ngoài, nhưng chỉ dc một lần thôi, tu thử rồi, thời gian lại quá nhanh (<20ms) do đó ứng dụng cho phím nhấn thì cũng dc chứ sao!
      !e

      Comment


      • #18
        Nguyên văn bởi zemen Xem bài viết
        Tu thấy 8051 nó "nhớ" dc ngắt ngoài khi đang xử lí ngắt ngoài, nhưng chỉ dc một lần thôi, tu thử rồi, thời gian lại quá nhanh (<20ms) do đó ứng dụng cho phím nhấn thì cũng dc chứ sao!
        Ý của zemen là sao nhỉ, chính ngắt ngoài, ví dụ ngắt ngoài 0 đi, ngắt chính nó à?

        Comment


        • #19
          à có lần tu dùng ngắt ngoài 0 (tác động bởi nhấn phím). Khi ngắt xảy ra tu delay_ms(20) rồi làm vài câu lệnh nhỏ khác. Sau khi thoát hàm ngắt để về chương trình chính, thì đôi khi nó lại gọi hàm ngắt ngoài 1 lần nữa
          !e

          Comment


          • #20
            Bạn làm như thế này nhé:

            - Khai báo 1 biến toàn cục 8 bit gọi là A chẳng hạn và 1 cờ F, được khởi tạo ban đầu F=0,A=0

            - Thiết lập một ngắt thời gian khoảng 5-10ms
            Chương trình ngắt thời gian nếu thấy F=1 sẽ dịch trái biến A 1 bit và thoát, nếu tất cả các bit của A =0 thì thực hiện các công việc của ngắt cứng và xóa cờ F=0.

            - Chương trình ngắt cứng chỉ làm hai việc set bit 0 của A=1 và set cờ F=1

            Như vậy ngắt cứng chỉ làm nhiệm vụ thiết lập cờ thôi, công việc chủ yếu sẽ thuộc về ngắt thời gian.
            Như vậy có thể chống được rung phím cỡ 80ms, nếu cần có thể tăng lên nữa.

            Chúc vui vẻ

            Comment


            • #21
              Nguyên văn bởi Tubes Xem bài viết
              Bạn làm như thế này nhé:

              - Khai báo 1 biến toàn cục 8 bit gọi là A chẳng hạn và 1 cờ F, được khởi tạo ban đầu F=0,A=0

              - Thiết lập một ngắt thời gian khoảng 5-10ms
              Chương trình ngắt thời gian nếu thấy F=1 sẽ dịch trái biến A 1 bit và thoát, nếu tất cả các bit của A =0 thì thực hiện các công việc của ngắt cứng và xóa cờ F=0.

              - Chương trình ngắt cứng chỉ làm hai việc set bit 0 của A=1 và set cờ F=1

              Như vậy ngắt cứng chỉ làm nhiệm vụ thiết lập cờ thôi, công việc chủ yếu sẽ thuộc về ngắt thời gian.
              Như vậy có thể chống được rung phím cỡ 80ms, nếu cần có thể tăng lên nữa.

              Chúc vui vẻ
              Hiểu ý của bạn rồi, để suy nghĩ lại!
              Last edited by vinh81; 14-06-2007, 21:15. Lý do: Nhầm

              Comment


              • #22
                Nguyên văn bởi Tubes Xem bài viết
                Bạn làm như thế này nhé:

                - Khai báo 1 biến toàn cục 8 bit gọi là A chẳng hạn và 1 cờ F, được khởi tạo ban đầu F=0,A=0

                - Thiết lập một ngắt thời gian khoảng 5-10ms
                Chương trình ngắt thời gian nếu thấy F=1 sẽ dịch trái biến A 1 bit và thoát, nếu tất cả các bit của A =0 thì thực hiện các công việc của ngắt cứng và xóa cờ F=0.

                - Chương trình ngắt cứng chỉ làm hai việc set bit 0 của A=1 và set cờ F=1

                Như vậy ngắt cứng chỉ làm nhiệm vụ thiết lập cờ thôi, công việc chủ yếu sẽ thuộc về ngắt thời gian.
                Như vậy có thể chống được rung phím cỡ 80ms, nếu cần có thể tăng lên nữa.

                Chúc vui vẻ
                Cách này không được, nó có 1 khuyết điểm: nếu tui đè phím cỡ 1/10s rồi thì trong thời gian đó sẽ hết xung nẩy nhưng khi buông phím ra lại có xung nẩy trở lại rồi mới hết xung nẩy. Chương trình của bạn sẽ cho công việc cần làm thực hiện 2 lần! Chương trình của bạn chỉ là dò khi nào hết nẩy trong 80ms mới làm!

                Comment


                • #23
                  Nguyên văn bởi zemen Xem bài viết
                  à có lần tu dùng ngắt ngoài 0 (tác động bởi nhấn phím). Khi ngắt xảy ra tu delay_ms(20) rồi làm vài câu lệnh nhỏ khác. Sau khi thoát hàm ngắt để về chương trình chính, thì đôi khi nó lại gọi hàm ngắt ngoài 1 lần nữa
                  Ui, bạn biết vì sao lúc bị lúc không không? Vì tay ấn phím lúc dài lúc ngắn. Bạn thử với cái trò đợi phím nhả xong, delay tiếp, thoát ngắt, xem nó có gọi ngắt lần nữa không?

                  Comment


                  • #24
                    Nguyên văn bởi vinh81 Xem bài viết
                    Cách này không được, nó có 1 khuyết điểm: nếu tui đè phím cỡ 1/10s rồi thì trong thời gian đó sẽ hết xung nẩy nhưng khi buông phím ra lại có xung nẩy trở lại rồi mới hết xung nẩy. Chương trình của bạn sẽ cho công việc cần làm thực hiện 2 lần! Chương trình của bạn chỉ là dò khi nào hết nẩy trong 80ms mới làm!
                    Quá đơn giản!, vấn đề chỉ còn liên quan đến trạng thái On/Off thôi, bạn có thể cải tiến bằng cách ngắt thời gian vừa kiểm tra A=0 & F=1 đồng thời kiểm tra trạng thái vào của ngắt cứng nữa, nếu Port=0 là đang bấm và chuỗi xung nảy vừa xử lý là quá trình bắt đầu bấm, nếu Port=1 là phím đang nhả và chuỗi xung nảy vừa xử lý là quá trình rung khi nhả phím

                    Đây là thuật toán chống rung hay nhất mà tôi được biết,
                    Tôi chọn 80ms là do phím thường sẽ rung khoảng 70-160ms, nếu bạn không muốn nó delay tới 80ms thì có thể giảm ngắt thời gian xuống 1ms. Khi đó có lẽ phải tăng A lên 16bit thì mới chính xác.
                    Thuật toán này hay ở chỗ tuy delay 80ms, nhưng nó có thể chống rung cho các xung >80ms ví dụ 160ms hoặc hơn nữa thậm chí chống cả nhiễu EMI.
                    Last edited by Tubes; 15-06-2007, 09:34.

                    Comment


                    • #25
                      Hi,
                      Theo tui thì dùng trễ thời gian rồi thực hiện chương trình là được rồi. Nếu ngắt lại bị lặp lại thì tăng thời gian trễ lên một chút cho đến khi được thì thôi. Nếu thời gian trễ quá lâu làm ảnh hưởng tới các chương trình khác thì nên dùng một tụ lọc trị số nhỏ nối song song với phím nhấn và làm giảm thời gian trễ xuống. Nếu không được nữa thì chuyển qua lập trình đa nhiệm.
                      Một cách khác nữa là cấu hình từ ngắt kích khởi cạnh qua kích khởi mức. Nói chung là nên làm cách nào đáp ứng được tác động thông thường nhất là được còn bác cố tình thao tác khác (vd: bấm lâu một chút xem sao,... để test) thì chắc chắn không bao giờ thỏa mãn được rồi.

                      Thân ái và đoàn kết.
                      Đường đến những ngày vinh quang không còn xa
                      Con đường chúng ta... chúng ta đã chọn.

                      Comment


                      • #26
                        Nguyên văn bởi Tubes Xem bài viết
                        Quá đơn giản!, vấn đề chỉ còn liên quan đến trạng thái On/Off thôi, bạn có thể cải tiến bằng cách ngắt thời gian vừa kiểm tra A=0 & F=1 đồng thời kiểm tra trạng thái vào của ngắt cứng nữa, nếu Port=0 là đang bấm và chuỗi xung nảy vừa xử lý là quá trình bắt đầu bấm, nếu Port=1 là phím đang nhả và chuỗi xung nảy vừa xử lý là quá trình rung khi nhả phím

                        Đây là thuật toán chống rung hay nhất mà tôi được biết,
                        Tôi chọn 80ms là do phím thường sẽ rung khoảng 70-160ms, nếu bạn không muốn nó delay tới 80ms thì có thể giảm ngắt thời gian xuống 1ms. Khi đó có lẽ phải tăng A lên 16bit thì mới chính xác.
                        Thuật toán này hay ở chỗ tuy delay 80ms, nhưng nó có thể chống rung cho các xung >80ms ví dụ 160ms hoặc hơn nữa thậm chí chống cả nhiễu EMI.
                        Hay! Học hỏi thêm một cách! Thực ra tui cũng có 1 cách, đã thử rồi hoàn toàn OK, cho dù có bấm phím kiểu gì đi nữa cũng hoàn toàn không nẩy!
                        Cho kiểm đủ 50 lần phím nhấn thì đợi tiếp đủ 50 lần phím nhả thì thực hiện chương trình!
                        Nếu chưa đủ 50 lần phím nhấn mà chân INT0 (hay INT1) lên 1 thì không làm gì vì đó là xung nẩy. Phải đợi phím nhả đủ 50 lần vì lúc nhả vẫn bị rung phím! Phải xử lý cả 2 lần rung phím khi nhấn và khi nhả! 50 lần đây chính là tui kiểm tra liên tục 50 lần, chứ không phải nhấn 50 lần
                        Dù sao thì cuối cùng cũng có người trả ời đúng câu hỏi của tui!

                        Comment


                        • #27
                          Xử lý phím bấm không phải đơn giản như mọi người nghĩ đâu.
                          Bạn nào nghĩ lắp thếm 1 tụ là có thể xử lý được nút bấm thì hoàn toàn nhầm đấy. Nếu dùng tụ thì phải lắp như sơ đồ gửi kèm.

                          Không phải tự dưng mà một số hãng lại đâm đầu vào sản xuất IC chống rung cho bàn phím đâu
                          Xem IC sau
                          MC14490-D.PDF
                          Attached Files

                          Comment


                          • #28
                            Chào cả nhà.
                            Tui làm cách này các bác xem có được không?
                            _ Khai báo 1 biến toàn cục mTDelay.
                            _ Trong ngắt INT0:
                            + Cấm ngắt INT0.
                            + Xử lý nhấn phím.
                            + mTDelay = 250. (giá trị này tùy thuộc thời gian bạn muốn dập phím)
                            _ Sử dụng Timer 0 (chế độ tự nạp và TH0=200) 250*200=50.000uS = 50mS.
                            _ Trong ngắt Timer0:
                            if(mTDelay >0)
                            { mTDelay--;
                            if(mTDelay<0)
                            { Cho phép ngắt ngoài hoạt động.}
                            }
                            Như vậy khi có phím nhấn thì những việc khác vẫn được thực hiện mà việc dập phím vẫn hoàn tất tốt. Bạn cần lưu ý một chút về thời gian dập phím, nếu nó quá ngắn so với thời gian xử lý nhấn phím thì có thể sẽ có sự cố.
                            Tôi nghĩ không lý do gì nó không chạy.
                            Last edited by HPECOM; 16-06-2007, 09:27.
                            Một bông hồng cho những ai đang còn mẹ,
                            Đang còn mẹ để lòng vui sướng hơn ..

                            Comment


                            • #29
                              Nguyên văn bởi HPECOM Xem bài viết
                              Chào cả nhà.
                              Tui làm cách này các bác xem có được không?
                              _ Khai báo 1 biến toàn cục mTDelay.
                              _ Trong ngắt INT0:
                              + Cấm ngắt INT0.
                              + Xử lý nhấn phím.
                              + mTDelay = 250. (giá trị này tùy thuộc thời gian bạn muốn dập phím)
                              _ Sử dụng Timer 0 (chế độ tự nạp và TH0=200) 250*200=50.000uS = 50mS.
                              _ Trong ngắt Timer0:
                              if(mTDelay >0)
                              { mTDelay--;
                              if(mTDelay<0)
                              { Cho phép ngắt ngoài hoạt động.}
                              }
                              Như vậy khi có phím nhấn thì những việc khác vẫn được thực hiện mà việc dập phím vẫn hoàn tất tốt. Bạn cần lưu ý một chút về thời gian dập phím, nếu nó quá ngắn so với thời gian xử lý nhấn phím thì có thể sẽ có sự cố.
                              Tôi nghĩ không lý do gì nó không chạy.
                              Nó không chạy! Có ngườii đưa ra cách này rồi! Tui cũng đã có nói ở trên rồi! Bro có delay 1s thì nó vẫn không chống được xung nẩy (tui bấm phím rất bình thường chứ không cố ý đè lâu hơn bình thường) Còn 2 cách đúng ở trên thì có ai nổi hứng đè lâu 5s, 10s nó vẫn không sao!

                              Comment


                              • #30
                                Hi,
                                Xin nói thêm một chút về cách đấu tụ song song với phím. Như sơ đồ ở trên thì đúng là quá chuẩn và trong các thiết bị chất lượng cao thì thường dùng như vậy. Tuy nhiên ta có thể bỏ bớt điện trở R2 và diode vì 2 linh kiện này chỉ có tác dụng chống hỏng tụ mà thôi (cái này cần dùng cho tụ hóa). Trong các mạch ta dùng, thường dùng tụ gốm trị số nhỏ (102, 103. 104) nên có thể không dùng R2 và diode cũng tốt không sao cả.
                                Từ trước đến giờ rất nhiều cách được nhiều bác đưa ra, dựa theo cách hoạt động của cái mạch của bác để chọn cái nào cho phù hợp. Ví dụ tôi dùng điều khiển từ xa, khi ta bấm 1 phím thì có tới 3 thậm chí 4 mã (của phím) gửi tới một lúc, nhưng ta chỉ lấy cái đầu tiên còn bỏ qua các mã tiếp theo trong một khoảng thời gian. Khoảng thời gian này gần bằng với khoảng thời gian giữa 2 lần bấm phím. Vì vậy khi ta giữ một phím khá lâu thì nó mới hiểu nhầm lần bấm thứ 2. Nếu các bác để ý thì bàn phím của máy tính cũng có khoảng thời gian giữa 2 lần bấm. Nếu ta đặt cái này lâu thì khi bấm và giữ phím 'a' sẽ xuất hiện một dãy chữ 'a' chậm hơn khi ta set khoảng thời gian này ngắn lại.

                                Chúc các bác thành công và xin chào thân ái, đoàn kết.
                                Đường đến những ngày vinh quang không còn xa
                                Con đường chúng ta... chúng ta đã chọn.

                                Comment

                                Về tác giả

                                Collapse

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

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

                                Collapse

                                • mèomướp
                                  Trả lời cho Công thức điện tử
                                  bởi mèomướp
                                  Dạ thời thế giờ thay đổi theo hướng tích cực hơn rồi chú trung sĩ ạ. Kiến thức được chia sẻ ngày càng nhìu nên làm ăn gian dối ko còn dễ dàng như trước đâu ạ. Những thợ nhỏ rồi sẽ thành công nhân sản xuất đồ mới hết thay vì sửa chữa lặt vặt...
                                  Hôm qua, 21:21
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ cùng chuẩn tín hiệu thì chắc chắn là nhận ạ. Vì bản chất oled hay lcd thì đều phải có mạch chuyển đổi trên thanh gỗ rồi chuyển sang những chip xử lý hàng nghìn chân gắn trên những tab mỏng dính rồi mới ra các điểm ảnh theo hàng...
                                  Hôm qua, 20:31
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  Ok , thanks bác đã chỉ...
                                  Hôm qua, 15:06
                                • nguyendinhvan
                                  Công thức điện tử
                                  bởi nguyendinhvan
                                  Sau bao năm nghiên cứu cái dtvn. Tôi phát hiện công thức này. Các anh em xem đúng bao nhiêu phần trăm nhé !

                                  Chập thì thay. Cháy thì tháo
                                  Làm thì láo. Báo thì hay
                                  May thì khoe. Rủi thì bỏ
                                  Thành tích nhỏ. Báo thành to
                                  Làm cho có. Báo chi li
                                  Sai cả li. Báo
                                  ...
                                  Hôm qua, 00:35
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  có chắc ko b, màn lcd phải có cao áp mới sáng, màn led thì ko có, ko có cáp chuyển đổi thì lắp thế nào đc ??...
                                  25-11-2024, 22:31
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ ý chú là màn oled ấy ạ. Cùng chuẩn lvds cùng độ phân giải thì cắm được ạ. Còn nó mà khác thì hơi khó vì oled các điểm ảnh nó tự phát sáng chứ ko dùng đèn nền như lcd. Cháu chỉ biết đến vậy thôi ạ. Chú muốn nghịch phải tự tìm hiểu kỹ trước khi mua thôi, khó mà ông thợ nào tư vấn vụ này...
                                  25-11-2024, 22:14
                                • bactho
                                  Trả lời cho Tự làm máy đo Cuộn cảm
                                  bởi bactho
                                  Hay đấy bạn ạ. Đây có thể hiểu là máy đo cuộn dây. Tiện đây xin cho hỏi bạn có hiểu rõ về máy nạp rôm pcb 45 của hãng thiên minh không giúp mình cách cài fw của nó với vì mình vừa được anh bạn cho nhưng lại không biết cài fw nên chưa dùng được. Nếu có thể thì bạn giúp mình với...
                                  25-11-2024, 21:48
                                • yname11
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi yname11
                                  màn của mình là LCD , giờ m muốn mua màn LED để thay thế (ko muốn dùng màn LCD nữa) , lên muốn hỏi xem có cáp chuyển đổi nào có thể cắm đc màn LED vào ko , tất nhiên phải có cùng số chân pin với màn cũ rồi . VD: màn cũ là lcd mỏng , 40 pin...
                                  25-11-2024, 21:43
                                • bactho
                                  Trả lời cho các bạn giúp mình về file HEX với!!!
                                  bởi bactho
                                  Bạn vào trang phuclanshop.com ,tìm đến góc kỹ thuật. Tác giả vương khánh hưng nói rất rõ về điều bạn tìm...
                                  25-11-2024, 21:21
                                • mèomướp
                                  Trả lời cho Xin hỏi về màn hình laptop
                                  bởi mèomướp
                                  Dạ màn hình lcd đều có thể lai cấy cho nhau được hết ạ. Các loại cáp, bo mạch chuyển đổi lvds rất nhìu, với dòng sony còn phải nhổ cả chip nhớ của main cũ đưa lên gỗ thì mới lắp sang máy khác đc, chưa kể các bệnh về màu... ngay cả...
                                  25-11-2024, 20:43
                                Đang tải...
                                X