trời kô bit là còn trang tiếp theo!
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
-
Nguyên văn bởi zemen Xem bài viếtTu 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!
Comment
-
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
-
Nguyên văn bởi Tubes Xem bài viếtBạ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
-
Nguyên văn bởi Tubes Xem bài viếtBạ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
-
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
Comment
-
Nguyên văn bởi vinh81 Xem bài viếtCá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!
Đâ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
-
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
-
Nguyên văn bởi Tubes Xem bài viếtQuá đơ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.
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
-
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
Comment
-
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
-
Nguyên văn bởi HPECOM Xem bài viếtChà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.
Comment
-
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
Bài viết mới nhất
Collapse
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677nhân tiện cho mình hỏi thêm về cái phần test hipot (cao áp),là để kiểm tra độ bền cách điện giưa các cuộn dây,mà thấy thông số test thường ở mức 4kvac,vậy nếu mấy con fail đó xài bình thường vẫn dduocj phải không ạ,vì điện mình làm gì lên tới mức đó
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:52 -
-
Trả lời cho Kiểm tra biến ápbởi lamvu0677máy đo số vòng thì cty có ,mà nó to quá,tưởng có máy nào gọn gọn bỏ túi được thì tiện hơn,vì đi lại nhiều...
-
Channel: Điện tử dành cho người mới bắt đầu
10-11-2024, 08:47 -
-
bởi tmcodonMình thấy diễn đàn có chuyên mục quảng cáo rồi mà. Bạn đóng góp để mở luồng riêng
-
Channel: Hướng dẫn sử dụng diễn đàn
09-11-2024, 13:36 -
-
bởi Nicole08Xin chào mọi người, tôi đã sử dụng Flashforge Inventor 2 được gần 5 năm và rất hài lòng với nó, nhưng tuần trước đã xảy ra sự cố. Có vẻ như động cơ bước đưa sợi in vào đầu nóng đã bị hỏng. Mọi thứ khác có vẻ ổn trên máy...
-
Channel: Điện tử dành cho người mới bắt đầu
09-11-2024, 12:55 -
Comment