Thông báo

Collapse
No announcement yet.

Chống rung cho nút bấm (Push Button)

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

  • Chống rung cho nút bấm (Push Button)

    Khi làm việc với nút bấm phải đề phòng hiện tượng rung. Cái này thì ai cũng biết. Hình vẽ


    Để chống rung có thể giải quyết bằng phần mềm..sử dụng trễ thời gian. Nhưng bộ nhớ VDK có hạn nên trong các ứng dụng lớn thì ta phải tiết kiệm bộ nhớ cho VDK của mình. Có thể dùng con IC chống rung MC14490 có 6 lối vào nút bấm và 6 lối ra tương ứng. Nguyên lý hoạt động của nó bằng cách phát hiện nút được bấm và giữ trạng thái đó trong một khoảng thời gian mà hiện tượng rung vẫn xảy ra.Ta có thể điều chỉnh thời gian này bằng tụ điện lắp ngoài. Thay đổi giá trị tụ điện.. tương ứng với thay đổi thời gian trễ. Con IC này hay thiệt! Xem chi tiết hơn ..
    http://www.onsemi.com/pub/Collateral/MC14490-D.PDF

    Đây có phải là cách dùng dao bầu cắt tiết muỗi không nhỉ?
    Attached Files
    Learn more...

  • #2
    Tui thấy tốt hơn hết là chống rung bằng phần cứng. Ngoài IC trên có thể làm một mạch 2 IC NAND để chống run cực tốt
    Sống và làm việc theo gương Bác Hồ vĩ đại

    Comment


    • #3
      Bác Tux hero nói rõ thêm một chút..về cách chống rung dùng 2 con NAND đi!
      Xin lỗi các bác nếu câu hỏi này của em "gà" quá!
      Learn more...

      Comment


      • #4
        Dùng mạch đa hài đơn ổn.
        Học thầy không tày học bạn.

        Comment


        • #5
          Dùng chổng rung: Phần cứng ( sao không thử dùng luôn flip flop cho nó được việc ).
          Nên dùng bằng phần mềm : nếu bạn dùng trễ để kiểm tra ---> kiểm tra nhiều vòng thì chống rung tốt nhưng tốn bộ nhớ.
          Nên dùng vòng lặp có ngắt ---> thoát khỏi chương trình kiểm tra để giữ trạng thái.
          Lấy ví dụ điển hình :
          Thiết kế chức năng Flip Flop trên vi điều khiển khi ấn một nút ( hoặc nối chân xuống mass) thì sẽ xuất ra một đầu tương ứng.
          +++ giải quyết : như vậy nếu dùng trễ để kiểm tra : vòng trễ kiểm tra ngắn bạn sẽ gặp phải hiện tượng đầu ra sẽ có xung nhấp nháy theo thời gian trễ, nếu vòng kiểm tra nhiều sẽ ít bị hiện tượng hơn nhưng cũng không thể bằng con Flip flop nguyên bản được.
          Tôi có đề xuất là sau khi thời gian bấm và nhả thay vì ta bắt mức ta sẽ bắt sườn của nó có được không ??? tuy nó khó hơn nhung chắc là tốt hơn bắt mức.
          --- Một ví dụ cơ bản : ( rất sơ sài nhưng đủ minh chứng cho việc bắt mức ). Ai có phương pháp bắt sườn tốt hơn xin cho ý kiến.

          // Flip-Flop Fullduplex chanel.
          #include<reg51.h>
          #define LED P1
          sbit up=P3^2;
          sbit down=P3^3;
          /*Digits: 1:0xF9, 2:0xA4; 3:0xB0, 4:0x99, 5:0x92, 6:0x82, 7:0xF8, 8:0x80, 9:0x90, 0:0xC0 clear:0xFF*/
          char digits[]={0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8, 0x80, 0x90};
          char i;
          void delay(unsigned char n)
          {
          unsigned char j;
          for(j=0;j<n;j++)
          {
          TMOD=0x01;
          TL0=0x3C;
          TH0=0xAF;
          TR0=1;
          while(!TF0);
          TR0=0;
          TF0=0;
          }}
          void tang()
          {
          if(up==0)
          {LED=digits[i++];}
          delay(10);
          if(i>9)
          {i=0;}
          }
          void giam()
          {
          if(down==0)
          {LED=digits[i]-1;}
          delay(10);
          if(i<0)
          {i=9;}
          }
          main()
          {
          i=0;
          LED=digits[i];
          while(1)
          {
          tang();
          giam();
          }}
          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


          • #6
            chống rung bằng phần mềm hơn nhiều chứ, chẳng phải lắp thêm cái gì sất
            lại còn có thể phân biệt nút bấm nháy hay là nút bị giữ nữa : để làm nhiều lệnh trên 1 nút duy nhất

            Tôi quét phím trong Interrupt (dùng timer) như sau
            ví dụ chu kỳ ngắt là 50 ms

            void INT_timer0(void) ......

            {

            if(!button) // bấm nút , button là 1 bít ứng với 1 cổng vào nào đó vd P1^0
            {
            t_push ++; // tăng biến đếm
            }

            if((pushed ^ button) && !button && t_push <15) // bam nut và nhả ngay
            {
            // lam cái gì đó khi nút bị bấm rồi nhả ngay
            t_push=0;
            }

            if( t_push > 15 ) // giu nut quá 15 x 50 ms = 750 ms
            {
            t_push = 0; // xoa biến đếm

            // làm cái gì đó khi nut bị giữ quá 750 ms
            }
            pushed = button; // quet trang tai nut bam, luu vào biến pushed

            // tiếp tục
            }

            Comment


            • #7
              cách chống rung bằng phần mền và dùng ngắt là cách rất hay vì không chiếm toàn bộ thời lượng của vxl mà lại khá dễ và tiết kiệm.các bạn thử nghiên cứu kỹ xem

              Comment


              • #8
                Nguyên văn bởi XXX
                cách chống rung bằng phần mền và dùng ngắt là cách rất hay vì không chiếm toàn bộ thời lượng của vxl mà lại khá dễ và tiết kiệm.các bạn thử nghiên cứu kỹ xem
                Các bác làm phím nghe có vẻ mệt nhỉ
                nếu bác Quế Dương quét phím & chống rung như thế thì sẽ quét ổn định theo khoảng thời
                gian(dùng Timer)
                Nếu dùng chống rung bằng phần cứng thì quá vất vả, tốn tiền, thiết kế mạch phức tạp
                Các bác hãy tự thiết kế lấy 1 cái phím mà ấn 1 phím, nó sinh ra 1 ngắt ngoài
                khi ngắt ngoài thực hiện => (phím ấn ) trễ (chống rung), button=(đọc cổng)

                các bác thấy đơn giản không ?
                " Con người nhờ có ước mơ mà trở nên vĩ đại"
                -----------------------------------------------

                Comment


                • #9
                  Lúc đầu mới tập tành về VDK,làm 1 cái công tắc để điều khiển sáng tắt cho 1 con led,khi ấn lần đầu led sáng, ấn lần thứ hai led tắt,loay hoay mãi cũng không được. Cũng biết là phải chống rung cho công tắc,nhưng chuyển thành phần mềm thì không đúng.Thực ra chỉ như thế này thôi.
                  ............
                  led=tắt;
                  if (công tắc = ấn)
                  {
                  delay(200);
                  led=!led;//đổi trạng thái của led:sáng->tắt, tắt->sáng.
                  while(công tắc chưa được thả ra)
                  delay(20);//sau khi công tắc được khống ấn nữa, trễ 1 khoảng thời gian
                  }

                  Lúc ấn công tắc, hoặc lúc công tắc được nhả ra,đây là khoảng thời gian quá độ chuyển trạng thái mức logic của chân được nối với công tắc đó,chúng ta phải tạo ra 1 khoảng thời gian trễ(Ơ vd trên là 20ms) để xác lập hoàn toàn mức logic.
                  Trong vd trên khi công tắc ấn và được giữ thì VDK không làm được việc gì khác, tuy nhiên khi ta soạn thảo 1 văn bản và ấn và giữ phím A chẳng hạn, 1 loạt chữ A sẽ xuất hiện. Cách này khác với cách chúng ta làm ở trên.Vậy người ta làm việc đó như thế nào?. Các bạn thử nghĩ xem nhé.
                  Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                  Comment


                  • #10
                    Re

                    bác thử cách này xem:
                    Đọc khoãng 10 lần coi thử phát hiện bao nhiêu lần phím nhấn nếu khoãng 6-7 lần thì có thể OK rồi. Có thể thay đổi các con số cho phù hợp với thực tế.

                    Comment


                    • #11
                      Nguyên văn bởi qmk
                      Rốt cục cũng chưa ai đưa ra cách quét phím hay cả.
                      Các bác chịu khó đọc sách thêm chứ.
                      Các bác bàn gì ghê vậy.Nếu chỉ muốn chống rung thôi thì chỉ cần làm vài vòng lặp là OK rồi (ko dùng Timer,ngắt gì thêm cho mệt).
                      Sách Vi điều khiển 8051 của Tống Văn On có chương trình mẫu mà chả ai chịu đọc hết.

                      Comment


                      • #12
                        Nguyên văn bởi cuteolenpho
                        Sách Vi điều khiển 8051 của Tống Văn On có chương trình mẫu mà chả ai chịu đọc hết.
                        Làm gì có.
                        Chỉ có thuật toán thôi.
                        Thế giới quả là rộng lớn, và có rất nhiều việc phải làm.

                        Comment


                        • #13
                          Nguyên văn bởi quynh
                          Làm gì có.
                          Chỉ có thuật toán thôi.
                          Có đấy bạn, nếu tớ nhớ ko nhầm thì nó nằm trong phần giao tiếp ma trận phím Hex.
                          Xem đoạn chương trình IN_HEX,đoạn này thực hiện việc chống nảy cả việc nhấn và nhả phím luôn( tớ đã xài nhiều loại chống nảy phím như dùng : timer, cổng NAND ,... nhưng thích nhất loại này,nếu giao tiếp phím đơn thì chỉ dùng kiểu này thôi).

                          Comment


                          • #14
                            Code chống nảy phím nè

                            while(1)
                            {
                            value2 = porta & 1;

                            if(value1 == 1 && value2 == 0)
                            {
                            save = save + 1;
                            }

                            value1 = value2;

                            if(save % 2 == 1)
                            {
                            portb = 0xff;
                            delay_ms(n);

                            portb = 0;
                            delay_ms(n);
                            }
                            }
                            |

                            Comment


                            • #15
                              Nhờ các pro giải thích dùm em mạch chống dội này ak. Em không hiểu cho lắm. Thanks!
                              http://cB0.upanh.com/19.573.26422239.e9q0/untitled.png

                              Comment

                              Về tác giả

                              Collapse

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

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

                              Collapse

                              Đang tải...
                              X