Nếu đây là lần đầu tiên đến với Điện Tử Việt Nam, bạn có thể đọc phần Hỏi đáp bằng cách nhấn vào liên kết. Có thể bạn cần đăng kí trước khi có thể gửi bài . Để bắt đầu xem bài viết, chọn diễn đàn bạn muốn thăm dưới đây.
Tổng quát nếu có n chân tín hiệu (n>2) thì mắc đc (n-1) nút nhấn và (n-1)*(n-2) led.
Bài toán này chưa phải tổng quát mà, F đang dẫn các bạn đi từ từ tới bài toán tiếp theo. Đó là N chân thì điều khiển được N nút nhấn và (N-1)(N-2) LED.
Thường người ta nhắc đến nút bấm là nhắc đến quét phím. Tuy là nó đơn giản, có thể áp dụng với tất cả các loại VDK. nhưng nhược điểm của nó là tốn chân. Nếu dùng PIC, giả sử 16F877, chúng ta có thể chỉ cần sử dụng một chân Analog là có thể đọc được rất nhiều phím bấm.
Chỉ cần đọc giá trị analog, cho nó một khoảng sai lệch điện trở nào đó (ví dụ khoảng 5%) là có thể đọc được khá chính xác giá trị điện trở và là phím bấm.
Nhược điểm của cách này là có thể có sai lệch vì do nhiều nguyên nhân ảnh hưởng đến điện trở tiếp xúc của button, của giá trị điện trơ... Nhưng nếu thiết kế tốt thì khả năng nhiễu là rất ít. Một số hãng điện tử cũng áp dụng cách này, như ti vi một số hãng chẳng hạn.
Mọi người thấy sao?
Thường người ta nhắc đến nút bấm là nhắc đến quét phím. Tuy là nó đơn giản, có thể áp dụng với tất cả các loại VDK. nhưng nhược điểm của nó là tốn chân. Nếu dùng PIC, giả sử 16F877, chúng ta có thể chỉ cần sử dụng một chân Analog là có thể đọc được rất nhiều phím bấm.
Chỉ cần đọc giá trị analog, cho nó một khoảng sai lệch điện trở nào đó (ví dụ khoảng 5%) là có thể đọc được khá chính xác giá trị điện trở và là phím bấm.
Nhược điểm của cách này là có thể có sai lệch vì do nhiều nguyên nhân ảnh hưởng đến điện trở tiếp xúc của button, của giá trị điện trơ... Nhưng nếu thiết kế tốt thì khả năng nhiễu là rất ít. Một số hãng điện tử cũng áp dụng cách này, như ti vi một số hãng chẳng hạn.
Mọi người thấy sao?
Hoan hô. Rất tuyệt! Nhưng mà thay thế làm sao được. Nhược điểm về sai lệch không phải là vấn đề đáng nói ra ở đây. NHƯỢC ĐIỂM LỚN NHẤT LÀ... ĐỐ BẠN BẮT MỘT LÚC ĐƯỢC NHIỀU PHÍM!
Quên mất, đói quá up nhầm file
Up lại nha, mà giá trị điện trở đề bằng nhau, bằng 1k cả nha
Vì tổng trở vào của các ngõ vào lớn nên áp vào là như nhau (Vcc).
Mạch phải là cầu phân áp mới được. Nút nhấn dưới cùng phải có thêm 1 điện trở xuống mass.
Ví dụ là 1K.
Lúc đó áp sẽ lần lượt là:
ko biết con 16F54 có ADC chưa ta , nếu chưa thì cách dùng ADC đâu có thuộc vào luồng bài này . HÌnh như mấy bài tiết kiệm chân VDK này , bác BINHANH đã post oy , h lục lại trong PC thử còn ko nữa .
Vậy bạn có thể trình bày ý tưởng giải thuật để quét phím này không? Làm thế nào để xác định phím được bấm hoặc không được bấm?
Lưu ý rằng, thời gian đáp ứng của nó phải đủ để nhận ra phím được bấm, và phải xử lý cả vấn đề nhiễu trên phím bấm luôn. Đồng thời phải không được phép làm cho phím bấm khi bấm gây ảnh hưởng tới các LED.
Vấn đề giải thuật phần mềm ở đây là vấn đề mấu chốt.
Chúc vui.
Cảm ơn bác Trungkt đã trả lời hộ tui. Quả đúng như lời bác nói.
Trong khi lập trình: tốc độ quét led nên chọn khoảng 50 hình/s---> vì 4 led nên tốc độ quét=4*20 h/s=200h/s=200Hz. Bởi vậy nên nạp cho timer giá tri khoảng 1/200=5ms.
Sau đó viết lệnh:
if(Tràn timer)
{
-Khóa transistor(để tắt led)= cách gán chân đk = 0;
-for(i=0;i<8;i++)
{
Port_i=1;
if(P1_0==1)
{
Phím i được ấn, xử lý...
}
}
Mã lệnh quét led.... tại đây
}
Ý tưởng là như vậy, vừa dùng timer đó để bắt phím+quét led. Có thể dùng thêm 1 biến phụ để chống rung.
đây , e xin trích dẫn 1 đoạn giải thick của bác BA , chỉ cần đọc sơ code thì các cao thủ nhà ta cũng đủ hiểu thủ thuật oy .
Có vẻ như tới khi nâng lên N nút thì các bác nhà ta bắt đầu bối rối thì phải .
Lưu ý rằng, nếu bạn nào đã làm thực tế, thì sẽ biết việc sử dụng ADC không đơn giản, nó thường mắc những lỗi sau:
- Độ nhạy của việc đo ADC. Về lý thuyết, 1/16 là sai số chấp nhận được. Nhưng thử nghĩ xem, khi điện trở bản thân nó đã có sai số 10%, thì 1/16 có chấp nhận được không?
- Các bạn quên tính tới việc điện trở của phím than, mỗi loại vật liệu làm khác nhau, khi thử nghiệm và đưa ra sản xuất lại còn thêm một mớ vấn đề nữa.
- ADC khi được tích hợp vào VDK, giá sẽ cao lên. Khi đó làm thế nào mà các bạn giải quyết bài toán giá rẻ được? Hãy chú ý là việc thêm vào một module ADC đắt tiền hơn nhiều so với việc thêm vào một module I/O (một cách lý thuyết), vậy có phải là giải pháp hiệu quả hay không?
Các bạn lưu ý, ở đây F đề cập tới "nâng cao", chứ các bài toán đã có thì không còn gì để bàn nữa. F đang tìm cách dẫn dắt các bạn đi tới một giải pháp tương đối tối ưu cho việc thiết kế tiết kiệm chân, bởi lý do:
- Thông thường người ta cần dùng 4 nút bấm để điều khiển: 1 nút chọn MODE, 1 nút OK (có thể kết hợp vào nút chọn MODE), 1 nút lên, 1 nút xuống (để thay đổi giá trị). Như vậy, người ta cần khoảng 4 nút để điều khiển hầu hết mọi việc.
- Thông thường, người ta cần dùng từ 10 - 12 LED để hiển thị các chế độ, tín hiệu khác nhau: ON/OFF, SWING, NATURE, SPEED (3), TIMER (3), LIGHT (2) (đây là thí dụ về ứng dụng cho quạt máy)
Với việc làm như thế này, chỉ cần 4 - 5 chân để điều khiển.
Tại sao phải tiết kiệm chân?
- Có nhiều chân hơn để điều khiển phần LCD, Relay, Triac,...
- Kích thước chip giảm nhỏ đi, do hiện nay các nhà sản xuất đều sản xuất các sản phẩm loại này ở dạng công nghệ cắm, nếu tăng từ 14, 18 lên 20,28 chân, thì kích thước chip to ra đáng kể trên bo mạch.
- Thiết kế làm sao để giảm thiểu số điện trở, tụ điện, vì giá thành cắm một con điện trở vào có khi bằng với tiền mua con điện trở đó.
Giải pháp cụ thể:
- Làm thế nào để cho LED không sáng mờ khi bấm nút. Hầu hết các giải pháp các bạn đưa ra đều sẽ làm LED sáng mờ khi bấm nút (có lẽ các bạn chưa thử thực tế, hoặc chưa chỉ ra điểm mấu chốt). Cần giải quyết triệt để vấn đề này thì người dùng mới có thể sử dụng được.
- Nếu sử dụng giải pháp phần mềm, hoặc delay để lọc phím bấm, thì kết quả sẽ là chúng ta tốn thêm một đoạn code nữa. Mà các bạn cần lưu ý một điều rằng, cứ tăng dung lượng bộ nhớ lên một chút, thì sẽ tốn tiền nhiều hơn, và có thể lượng code sẽ không viết vừa vào một con chip rẻ tiền, giá dưới 10K. Như vậy, khi thiết kế tới mức này, các bạn cần cân nhắc giữa giá phần cứng của PIC và giá phần cứng mạch ngoài để cân nhắc tối ưu về giá, mục tiêu là làm tăng độ ổn định của nút bấm.
Vì tổng trở vào của các ngõ vào lớn nên áp vào là như nhau (Vcc).
Mạch phải là cầu phân áp mới được. Nút nhấn dưới cùng phải có thêm 1 điện trở xuống mass.
Ví dụ là 1K.
Lúc đó áp sẽ lần lượt là:
Hoan hô. Rất tuyệt! Nhưng mà thay thế làm sao được. Nhược điểm về sai lệch không phải là vấn đề đáng nói ra ở đây. NHƯỢC ĐIỂM LỚN NHẤT LÀ... ĐỐ BẠN BẮT MỘT LÚC ĐƯỢC NHIỀU PHÍM!
Với giải pháp tiết kiệm chân, chắc chắn không giải pháp nào cho phép bấm cùng lúc cả (về mặt nguyên lý). Tuy nhiên, trên thực tế, có thể cho phép bấm nhiều phím và phải xử lý trong trường hợp cụ thể.
Với giải thuật dùng ADC thì vẫn làm được, bài toán này đã có cụ thể rồi. Nhưng ở đây một lần nữa ta bỏ qua giải thuật ADC.
Bài toán dùng N chân để bắt N phím chưa có lời giải, xin tiếp tục chờ các anh em đưa ra giải pháp.
Bài toán tiếp theo sẽ là làm thế nào để bắt nhiều phím cùng lúc mà không làm sáng các đèn không mong muốn (bài này tất nhiên là sử dụng giải pháp phần mềm, và vì là phần mềm nên phải tùy thuộc vào trường hợp cụ thể). Chính vì thế sẽ tương đối khó thảo luận.
Bây giờ, với cách làm này, các bạn có thể nào dùng 5 chân, điều khiển 5 nút bấm và 10 LED. Ta lấy bài toán 1 nút bấm sẽ bật tắt 2 LED. Bấm lần 1 bật LED 1, bấm lần 2 tắt LED 1 bật LED 2, bấm lần 3 bật 2 LED, bấm lần 4 tắt 2 LED. Và bây giờ các bạn hãy tìm thuật toán để làm sao cho khi bấm 2 nút thì LED không mong muốn sẽ không được phép sáng!?
Bài toán này sẽ để lại sau mới giải quyết nhé. Giải quyết bài toán N chân và N nút trước đã nhé.
Mình mod lại cái mạch cũ để gắn thêm được một phím thành N chân N phím
Giải thuật vẫn tương tự như trên, 1..5 output, lần lượt lên mức cao. Nếu ngõ vào bắt được tín hiệu mức cao thì:
-Ghi nhận ngõ ra nào đang ở mức cao, ví dụ chân 1
-Tiếp tục quét chân 2 mức cao và kiểm tra ngõ vào, sẽ xảy ra hai trường hợp:
1. Ngõ vào về mức thấp: nghĩa là phím 1 được nhấn
2. Ngõ vào vẫn giữ nguyên mức cao: nghĩa là phím 6 được nhấn
Giải thuật có thể nâng cấp thành 2': Tiếp tục ghi nhận cho đến khi quét hết chân 5, nếu cả 5 kỳ ngõ vào đều mức cao thì khi đó mới kết luận phím 6 được nhấn. Cách này có thể dùng để bắt nhiều hơn một phím trừ hai trường hợp:
1. nhấn nút 6 thì nhấn thêm các nút 12345 đều không có tác dụng, vậy nút 6 có thể làm nút on/off, reset hay gì đó mà không đòi hỏi phải nhấn kèm phím khác
2. tất cả các phím 12345 nhấn cùng lúc thì vdk sẽ hiểu là phím 6 được nhấn, tuy nhiên ra trường hợp này là khó có thể xảy ra
Mình mod lại cái mạch cũ để gắn thêm được một phím thành N chân N phím
Giải thuật vẫn tương tự như trên, 1..5 output, lần lượt lên mức cao. Nếu ngõ vào bắt được tín hiệu mức cao thì:
-Ghi nhận ngõ ra nào đang ở mức cao, ví dụ chân 1
-Tiếp tục quét chân 2 mức cao và kiểm tra ngõ vào, sẽ xảy ra hai trường hợp:
1. Ngõ vào về mức thấp: nghĩa là phím 1 được nhấn
2. Ngõ vào vẫn giữ nguyên mức cao: nghĩa là phím 6 được nhấn
Giải thuật có thể nâng cấp thành 2': Tiếp tục ghi nhận cho đến khi quét hết chân 5, nếu cả 5 kỳ ngõ vào đều mức cao thì khi đó mới kết luận phím 6 được nhấn. Cách này có thể dùng để bắt nhiều hơn một phím trừ hai trường hợp:
1. nhấn nút 6 thì nhấn thêm các nút 12345 đều không có tác dụng, vậy nút 6 có thể làm nút on/off, reset hay gì đó mà không đòi hỏi phải nhấn kèm phím khác
2. tất cả các phím 12345 nhấn cùng lúc thì vdk sẽ hiểu là phím 6 được nhấn, tuy nhiên ra trường hợp này là khó có thể xảy ra
Nếu làm như thế này, thì tới bài toán số (3) sẽ không giải được, đó là nếu nhấn 2 nút cùng lúc, thì chắc chắn sẽ làm LED không mong muốn sáng lên, hoặc làm cháy PIC (do dòng output có thể bị ngắn mạch).
Lần trước đã gợi ý cho bạn về điện trở kéo lên xuống, đúng là lợi hại, đã ra ngay được cái mạch N nút. Bây giờ khó khăn ở chỗ nếu làm thế này thì PIC sẽ toi khi bấm 2 nút cùng lúc.
À hà... câu chuyện lại bắt đầu vui rồi .
Tất cả các nhà sản xuất chip đặc biệt dành cho quạt đều có ghi khuyến cáo rất rõ, nếu như khách hàng sử dụng mà bấm 2 nút cùng lúc, thì việc hư hỏng nhà sản xuất không chịu trách nhiệm.
Như vậy, nếu giải quyết thêm bài toán này, có thể nói là ta đã giải quyết được một bài toán lớn rồi đấy.
Em chào các anh và mọi người.
Hiện em đang có 1 con bơm màng trong thiết bị y tế đang gặp tình trạng yếu dần hoặc ngừng hoạt động sau thời gian sử dụng
Sau khi tìm hiểu về thông tin của bơm trên mạng thì em được biết...
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...
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...
Comment