Thông báo

Collapse
No announcement yet.

lập trình chống xung dội

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

  • lập trình chống xung dội

    mọi người cho mình hỏi cách lập trình chống xung dội cho nút nhấn là như thế nào, mình mới học vdk nên còn gà lắm, mong mọi người chỉ giáo.
    vấn đề của em là dùng 1 nút nhấn, at32 kiềm tra, nếu nhấn nút thì tăng biến đếm lên 1.nút nhấn tác động mức thấp.
    em đã làm thử nhưng vì do xung dội nên biến tăng vọt hoài.
    mong mọi người giúp đỡ.thank

  • #2
    bạn daihoa,mình có chút góp ý thế này,bạn tham khảo thử nha:
    đầu tiên chú ý cách khai báo luồng dữ liệu ra vào ở các PORT bạn định dùng,ví dụ mình dùng PORTA.0 để gắn nút nhấn chẳng hạn,ctrinh mình sẽ thế này:
    PORTA=0xFF;(chỗ này bạn chỉ cần PA.0=1,còn mức tích cực các chân còn lại tùy bạn chọn,không nhất thiết phải PORTA=0xFF)
    DDRA=0xFE (PORTA.0=0)
    /************************************************** ***/
    if (PINA.0==0)
    {
    while(PINA.0==0) ; //chống
    delay_ms(20); //dội phím
    n++;
    PORTB=n;
    delay_ms(100);
    }

    Comment


    • #3
      Vấn để chống dội phím bằng phần mềm có nhiều cách khắc phục. Tôi xin sơ lược một số cách để bạn tham khảo:

      Delay một khoảng thời gian để bỏ qua giai đoạn nhấn phím: Hai giai đoạn dội phím là khi bạn bắt đầu nhấn (dội nhấn) và khi bắt đầu nhả phím ra (dội nhả). Giả sử nút nhấn của chúng ta tác động mức 0. Như vậy, nếu vdk nhận thấy bạn nhấn phím (chân nối với phím nhấn xuống mức 0) thì bạn delay một khoảng thời gian (khoảng vài chục ms, tùy theo loại nút nhấn), sau đó kiểm tra lại chân đó. Nếu chân đó vẫn ở mức 0 thì bạn xác nhận là có nút nhấn (cộng biến đếm lên 1), nếu chân đó lên mức cao thì chắc là có cái gì đó nhiễu rồi (bỏ qua). Sau đó bạn chờ cho nút nhấn được nhả ra (chân gắn nút nhấn lên mức 1) rồi delay tiếp một khoảng thời gian để bỏ qua giai đoạn dội nhả.

      Dựa vào tần số (khoảng thời gian tác động) để bỏ qua dội phím : Phương pháp này dựa trên ý tưởng là nút nhấn khi dội thì tạo ra xung tần số cao. Trong giai đoạn dội phím, tại ngõ vào thời gian ở mức thấp rất ngắn, sau đó chuyển lên mức cao cũng trong thời gian rất ngắn. Lúc bạn nhấn nút, khi nút nhấn đã ổn định, thời gian ở mức thấp rất dài so với giai đoạn dội phím. Do đó, khi chân vdk xuống mức 0 thì bạn bắt đầu tính thời gian (ví dụ tăng một biến đếm lên). Nếu biến đếm vượt qua một giá trị nào đó (tức là thời gian mức thấp đủ dài) thì đó là phím đã ổn định. Nếu biến đếm không vượt qua được một giá trị mà bạn đã đặt mà chân vdk đã chuyển sang mức cao (thời gian ở mức thấp không đủ dài) thì đó là dội nhấn. Khi bạn nhả phím ra cũng vậy, thời gian chân vdk ở mức cao trong giai đoạn dội phím thấp hơn rất nhiều giai đoạn nút nhấn đã hoàn toàn ổn định. Dựa vào ý tưởng này bạn hoàn toàn có thể chống dội phím được

      Hy vọng là ý kiến nhỏ này giúp được bạn.
      Chúc vui!
      Last edited by Nguyen Cong; 10-12-2009, 23:58.

      Comment


      • #4
        còn cách này nữa... mình thấy nó cũng khá hay
        thay vì bạn dứng để kiểm tra và chờ thời gian nhấn phím thì bạn cho việc kiểm tra đó, lồng hẳn vào vòng quét ctr chính của bạn, giả sử vòng lặp ctr chính của bạn chạy khoảng vài ms.. thì bạn cứ cho nó kiểm tra phím khoảng vài lần, nếu thông số trả về là cố định thì xác định là có nút nhấn.. còn thay đổi thì cứ xóa bộ đếm.

        nói thì có vẻ khó hiểu, nếu bạn đang sử dụng codevision thì tham khảo cách quét phím trong phần example... sẽ có ích cho việc lập trình của bạn đó.

        Comment

        Về tác giả

        Collapse

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

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

        Collapse

        Đang tải...
        X