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 Công thức điện tửbởi mèomướpDạ 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...
-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ 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...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 20:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11Ok , thanks bác đã chỉ...
-
Channel: Thiết bị điện tử cá nhân
Hôm qua, 15:06 -
-
bởi nguyendinhvanSau 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...-
Channel: Tâm tình dân kỹ thuật
Hôm qua, 00:35 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11có 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 ??...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:31 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ ý 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...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 22:14 -
-
Trả lời cho Tự làm máy đo Cuộn cảmbởi bacthoHay đấ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...
-
Channel: Điện tử dành cho người mới bắt đầu
25-11-2024, 21:48 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi yname11mà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...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 21:43 -
-
Trả lời cho các bạn giúp mình về file HEX với!!!bởi bacthoBạ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...
-
Channel: Vi điều khiển họ 8051
25-11-2024, 21:21 -
-
Trả lời cho Xin hỏi về màn hình laptopbởi mèomướpDạ 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ả...
-
Channel: Thiết bị điện tử cá nhân
25-11-2024, 20:43 -
Comment