Từ khi người ta chế ra được các loại đèn Led chiếu sáng có hiệu suất cao thì nó đã được ứng dụng rộng rãi trong công nghệ trang trí cho các sản phẩm, như làm các bảng đèn quảng cáo, như dùng trong các mạch chỉ thị bằng ánh sáng, như làm đèn chiếu sáng công cộng, làm các mạch nhạc quang rất hấp dẫn, và làm cả màn hình có độ phân giải cao nữa... Với các ưu điểm của Led hiện có, Không biết rồi ngày mai, người ta còn dùng nó cho việc gì nữa. Hãy chờ xem!
Vừa qua tôi nhận được một điện thư, nội dung câu hỏi có liên quan đến các Led siêu sáng dùng trong các máy điện thoại cầm tay, thư hỏi như sau:
Trong lần này mượn ý trong điện thư của một Bạn đọc viết cho tôi, tôi sẽ trình bày cách dùng các Led siêu sáng trong các mạch điện chạy mức nguồn DC thấp và viết mở rộng về cách sử dụng các ic nâng áp DC và cách tạo các mạch Led nháy theo điệu nhạc. Mong bài viết được nhiều Bạn vào xem.
Tìm hiểu mạch chiếu sáng màn hình màu trong các máy điện thoại di động.
Trước hết theo dòng tiến hóa, chúng ta hãy tìm hiểu các mạch chiếu sáng màn hình dùng trong các máy điện thoại di động có màn hình đen trắng, như máy Nokia 6110, rồi qua máy Nokia 3310... Rồi cũng phải theo sự tiến hóa, khi các máy điện thoại di động bắt đầu dùng đến các loại màn hình màu thì mạch chiếu sáng màn hình màu cũng phải có nhiều thay đổi, lúc này người ta cần có các Led trắng, lại phải dùng loại Led siêu sáng mới đủ mạnh và cũng để dùng ít số Led hơn. Chúng ta biết loại Led siêu sáng có mức rào áp đến 3V, do đó các mạch điện chiếu sáng dùng trong thời kỳ màn hình đen trắng không còn thích hợp nữa, và người ta đã nghĩa ra các mạch điện khác, thích hợp hơn, đó là các mạch nâng áp, nâng mức áp DC thấp lên mức áp DC cao, điều quan trọng nữa là loại mạch nâng áp này phải có hiệu suất cao, nếu không thì pin sẽ rất mau hết. Đó chính là vấn đề mà chúng ta sẽ bàn đến sau đây.
1. Mạch chiếu sáng màn hình đen trắng ở các máy điện thoại đời cũ
Ở các điện thoại di động đời cũ, màn hình thường là dạng đen trắng, nên người ta có thể dùng các Led màu để chiếu sáng các màn hình này, đây là loại Led có mức rào áp thấp, thường từ 1.8V đến 2.2V, do vậy việc kích sáng các Led này với mức nguồn pin của điện thoại là 3.6V sẽ rất đơn giản. Trong hình người ta cho mắc các led theo dạng song song, các chân Anode cho nối vào nguồn dương của pin Ion Li+ (Mức áp danh định là 3.6V). Các chân Cathode nhận dòng từ chân C của transistor npn. Trên chân E là điện trở định dòng 15 ohm, trên chân B có điện trở 2.2K dùng hạn dòng IB và dùng điện trở vài K trên chân B nối masse để làm tăng hệ số ổn định nhiệt. Muốn transistor cấp dòng làm sáng các Led chiếu sáng trên chân C, người ta cho CPU xuất lệnh BLight với mức áp dương trên chân B của các transistor này. Nói chung mạch rất dễ hiểu và rất dễ sửa.
2. Mạch chiếu sáng màn hình đen trắng ở máy đời DCT3.
Trong các máy điện thoại đời DCT3, như máy Nokia 3310, 8210...Tuy mạch có cải tiến so với máy Nokia 5110, 6110... nhưng do máy vẫn còn dùng dạng màn hình đen trắng nên mạch chiếu sáng về nguyên tắc vẫn dùng các Led màu thường. Trong các máy này, người ta dùng IC để cấp dòng cho các Led chiếu sáng. Chúng ta vẽ lại sơ đồ mạch điện trên, Bạn thấy:
* Dòng chảy ra trên chân số 13 làm sáng các Led chiếu sáng bàn phím. Điện trở R311 (10K) có tác dụng định dòng. Lệnh tắt mở các Led chiếu sáng bàn phím đưa vào trên chân 15.
* Dòng chảy ra trên chân số 9 làm sáng các Led chiếu sáng màn hình. Điện trở R310 (12K) có tác dụng định dòng. Lệnh tắt mở các Led chiếu sáng màn hình đưa vào trên chân 7.
IC TA23A làm việc với chân số 1 nối vào cực dương của pin và các chân số 4, 5, 10 và 11, 12, 17, 18 cho nối masse. Mức áp Enable trên chân số 2 dùng tạm tắt ic TA23A, khi máy đi vào mode nghĩ.
3. Mạch chiếu sáng màn hình màu trong đời máy DCT4 (máy Nokia 7210).
Với các máy điện thoại di động đời DCT4, một cải tiến quan trọng là máy chuyển qua dùng màn hình màu, với màn hình màu, các Led chiếu sáng phải đủ mạnh và nhất là phải có màu trắng. Do đó người ta chuyển qua dùng loại Led trắng siêu sáng, đặc tính của loại Led này là có rào áp cao, thường là 3V, do vậy với nguồn pin có mức áp danh định là 3.6V thì các kiểu mạch chiếu sáng của các máy đời cũ không còn phù hợp nữa. Người ta phải giải quyết bằng các kiểu mạch tự nâng áp và nhất là loại mạch này còn phải có hiệu suất cao để tránh hao pin.
Trên đây là sơ đồ mạch Led dùng chiếu sáng màn hình màu dùng trong máy điện thoại Nokia 7210, cũng tương tự trong các máy 6100, 3210, 3100, 6610, 6600...Chúng tôi chọn kiểu mạch này để trình bày là do mạch dùng ic chân đặt ở cạnh, thay vì dùng chân bụng, việc "chế biến" trên các ic có chân đặt ở bụng, việc hàn ráp sẽ khó khăn hơn.
Tìm hiểu ic nâng áp TK11851L.
Theo trang tư liệu của nhà sản xuất, chúng ta biết: IC có 8 chân, Công dụng của các chân như sau:
* Chân 1: Chân cấp nguồn. Bạn cho nối chân này vào cực dương của pin, với pin điện thoại Ion Li+, mức áp trên cực dương của pin thay đổi từ 4.2V (lúc pin nạp đầy) và 3.2V, đây là "mức chết", ở mức volt này máy sé tự tắt chờ Bạn nạp điện lại cho pin. IC này có thể làm việc với mức nguồn trên chân số 1 là 2.7V đến 6.5V.
* Chân 2: Chân cho dòng điện chảy ra từ chân số 3 qua cuộn dây L chảy trở vào và cho chảy qua một điện trở nhỏ 0.3 ohm rồi chảy ra trên chân số 1 về cực dương của pin. Người ta dùng điện trở 0.3 ohm để đo dòng, từ đó điều chỉnh lại hoạt động của mạch, nhầm tránh hiện tượng ic bị quá dòng.
* Chân số 3: là chân C của một transistor khóa, sự đóng mở nhanh của transistor này sẽ cấp dòng điện dạng xung để kích thích cuộn dây L, chúng ta biết khi sự tắt mở nhanh một dòng điện chảy qua một cuộn dây L, trên cuộn dây L này sẽ phát sinh ra điện áp ứng có biên cao. Người ta sẽ dùng diode cho nắn dòng nạp mức áp ứng này vào các tụ điện để có mứa áp DC cao.
* Chân số 4: Trên chân này người ta cho định mức áp ngả ra bằng một diode zener, khi mức áp ngả ra cao hơn mức áp của diode zener, diode này sẽ dẫn điện và nó sẽ làm tắt mạch đóng mở của transistor, trong IC đã có diode zener dùng để xác định mức áp ngả ra khoảng 14V, dĩ nhiên Bạn có thể dùng diode zener ngoài để chọn định lại mức áp ngả ra theo đúng ý của Bạn.
* Chân số 5: Trên chân này có một điện trở dùng để đo cường độ dòng điện chảy qua các Led chiếu sáng. Nó tạo tác dụng hồi tiếp nghịch dùng để giữ cho cường độ dòng điện chảy qua các Led luôn không thay đổi, nhờ vậy mức sáng chiếu trên màn hình màu không bị ảnh hưởng do mức áp trên pin có thay đổi.
* Chân số 6: cho nối masse. Dòng điện tử chảy vào IC qua chân này.
* Chân số 7: Người ta có thể thay đổi tần số của xung bằng cách thay đổi trị số của tụ điện Cx gắn trên chân này. Với tụ Cx là 68pF, tần số củaq mạch dao động tạo xung là 300KHz.
* Chân số 8: Chân này dùng để nhận lệnh đóng mở mạch. Với mức volt cao, transistor trong IC sẽ đóng mạch và mạch sẽ hoạt động và khi chân này ở mức volt thấp, transistor ngưng dẫn, mạch sẽ vào trạng thái "ngủ", ở trạng thái sleep, ic ăn dòng rất rất nhỏ.
Phân tích mạch:
Hình vẽ cho thấy, chân Vin cho nối vào cực dương của nguồn pin, chân GND cho nối masse, ic sẽ được cấp điện. Trên chân Cx Bạn cho gắn tụ định tần Cosc. Lúc này sẽ có dòng xung chảy ra trên chân Ext, dòng này chảy vào ở chân Is để qua điện trở đo dòng đặt bên trong ic. Dòng xung kích thích cuộn cảm L gắn trên Ext, chân Is. Cuộn cảm L sẽ phát ra xung biên cao trên chân Ext, người ta dùng một diode Schocky có mức áp tổn hao nhỏ để nắn dòng, cho dòng nạp vào tụ Cout để có mức áp DC cao. Dùng mức áp này, khoảng 14V, để cấp dòng cho các Led siêu sáng trắng. Dòng chảy qua các Led cho chảy qua một điện trở để đổi dòng ra áp và cho mức volt này trả về mạch hồi tiếp nghịch trên chân FB, dùng đường hồi tiếp nghịch này để ổn định dòng chảy qua các Led, dù mức volt DC trên chân Vin có thay đổi.
Một gợi ý: Qua phần trình bày trên, chúng ta thấy muốn có dòng khoảng 10mA để cấp cho các Led trắng siêu sáng, Bạn có thể dùng nguyên lý của mạch điện trên. Đặc điểm của loại mạch này là có kích thước rất gọn nhỏ, và do mạch dùng ic có chân cạnh nên cũng rất dễ hàn ráp, toàn mạch có thể gắn gọn trong các thiết bị "tí hon". Mạch có thể làm việc với loại pin Ion Li+ có mức nguồn danh định 3.6V, do mạch có hiệu suất rất cao, trên 90%, nên không hao pin.
Câu hỏi là đi đâu mua được loại ic này?
Tôi không biết ở chợ Nhật Tảo P7 - Q10 có bán các linh kiện này hay không. Nhưng nếu chỉ làm thực hành để học tập và chỉ làm một vài bộ thì Bạn có thể tìm mua các máy điện thoại di động hư để rả lấy linh kiện, loại máy hư này có bán ở bên kia đường gần chợ Nhật Tảo và giá bán cũng thấp. Nếu có nhu cầu Bạn hãy thử xem.
Tìm hiểu các IC nâng áp DC thấp lên mức DC cao có hiệu suất cao:UTJ34063.
Sơ đồ chức năng của IC cho thấy, trong IC có một mạch dao động dùng để tạo ra xung đóng mở. Tần số xung tùy theo trị của tụ điện gắn trên chân TC, tần số dao động từ 100Hz đến 100KHz. Xung ra cho tác động vào chân Reset của một Flip Flop. Ngả ra Q của Flip Flop cho tác động vào chân B của hai transistor ghép phức hợp. SE là chân E chung. SC là chân C của transistor công suất. DRI là chân C của transistor thúc. Trong IC có nguồn điện áp mẫu 1.25V cấp cho tầng so áp, điện áp hồi tiếp đưa vào tầng so áp qua chân FB vào chân đảo, ngả ra của tầng so áp qua cổng AND cho tác dụng vào cổng Set của Flip Flop. Chân IPK dùng để giới hạn mức dòng đỉnh. IC làm việc với chân GND cho nối masse và chân Vcc cho nối nguồn DC. IC có thể làm việc với mức nguồn vào Vin từ 3V đến 40V.
Cấu trúc của mạch trong IC cho thấy, người ta dùng dòng xung tạo ra từ mạch dao động để cho kích thích cuộn cảm L để tạo ra điện áp ứng có mức áp cao và dùng diode Schocky nắn dòng cho nạp dòng xung vào tụ để nâng áp. Khi mạch dùng như một mạch giảm áp DC thì dùng cuộn cảm như một kho chứa điện, kết hợp với diode lấy dòng nghịch để tăng độ ổn định đường nguồn ngả ra. Cách tăng áp hay giảm theo theo tín hiệu dạng xung cho hiệu suất rất cao, trên 90%. Loại IC này hiện có rất nhiều và khá thông dụng.
Dưới đây là các mạch điện ứng dụng điển hình:
Trong IC có mạch dao động tạo ra tín hiệu dạng xung, tần số tín hiệu này lấy theo trị của tục điện Cx gắn trên chân số 3. Tín hiệu xung qua tầng đảo tác dụng vào chân Reset của Flip Flop, tín hiệu dạng xung vuông cho ra trên chân Q của Flip Flop dùng để đóng mở nhanh hai transistor Q1, Q2 ghép theo kiểu phức hợp.
Để có dòng xung kích thích cuộn cảm L gắn trên chân C của transistor Q2, tức chân số 1 của IC. Chân số 2 của IC phải cho nối masse, và chân 8 của IC cho nối lên nguồn điện dương qua điện trở giảm áp 150 ohm. Khi cuộn cảm bị kích thích bởi dòng xung chảy ra trên chân số 1, nó sẽ phát ra điện áp ứng có biên cao trên chân số 1, người ta dùng diode Schottky có mức tổn hao nhỏ để nắn dòng và cho dòng nạp vào một tụ hóa lớn 220uF để có mức áp DC cao, 28V với khả năng cấp dòng cho tải là 200mA.
Dòng điện dạng xung cho chảy qua điện trở đo dòng 0.22 ohm để tạo ra tín hiệu đưa vào trên chân số 7 để có tác dụng hạn biên dòng xung đỉnh. Điện áp DC lấy trên ngả ra, trên tụ 220uF, qua mạch chia áp với điện trở 47K và 2.2K tạo ra điện áp hồi tiếp nghịch đưa vào IC trên chân 5 để đến mạch so áp, cho so với mức áp mẫu là 1.25V để tạo ra tác dụng xác định mức áp trên ngả ra. Như vậy muốn điều chỉnh mức áp ở ngả ra Bạn có thể cho thay đổi trị của điện trở 2.2K. Mạch biến đổi mức áp DC thấp lên mức áp DC cao này dùng ít linh kiện ngoài, hiệu suất lại rất cao, nên hiện nay rất được ưa dùng.
Sơ đồ này cho thấy muốn có dòng xung mạnh hơn, Bạn phải dùng thêm transistor ngoài. Lúc này chân 2 cho nối vào chân B của transistor ngoài, điện trở R2 có tác dụng làm tăng độ ổn định nhiệt, chân C của transistor ngoài nối vào chân số 1, tức cho nối vào chân C của transistor Q2 trong IC, chân E của transistor ngoài cho nối masse, với mạch này khả năng cấp dòng cho tải sẽ lớn hơn. Một cải biến rất đơn giản để tăng khả năng cấp dòng cho tải.
Sơ đồ trên cho thấy cách dùng IC xung làm mạch giảm áp DC. Lúc này xung lấy ra trên chân E của hai transistor Q1, Q2. Để có mức áp DC ra ổn định, cuộn cảm L dùng làm cuộn lọc. Khi Q1, Q2 dẫn điện, dòng điện cấp cho tải sẽ cho chảy qua cuộn cảm L, lúc này cuộn dây L vừa có tác dụng ổn dòng, và đồng thời vừa tích trữ điện năng, khi Q1, Q2 tắt, lúc này điện năng tích tụ trong cuộn cảm L sẽ hoàn trả lại dưới dạng điện áp ứng, dấu của điện áp ứng sẽ làm thông diode D, và dòng điện ứng lại được cho nạp vào tụ C. Với cơ chế này, chúng ta thấy mạch dùng hai kho chứa điện để ổn định điều kiện cấp điện cho tải, một kho áp với tụ hóa lớn C (470uF) và một kho dòng với cuộn cảm L (200uH). Ở mạch này với điện trở lấy tín hiệu hồi tiếp 3.6K và 1.2K, điện áp ra sẽ được giữ ổn định ở mức 5V, điện áp vào có thể thay đổi trong khoảng 9V đến 30V.
Nói thêm cho rõ:
Hình vẽ trên giải thích vai trò dùng làm kho chứa điện của cuộn cảm L và tụ điện C. Với cuộn cảm L khi có dòng điện I chảy qua nó sẽ tích trữ điện năng dưới dạng từ trường trong cuộn dây và với tụ điện C khi có điện áp đặt lên tụ nó sẽ tích điện dưới dạng điện trường cất trong lớp điện môi. Muốn ổn định điện năng chúng ta có thể dùng cuộn cảm để ổn dòng hay dùng tụ điện đề ổn áp.
Trong mạch này người ta dùng thêm transistor ngoài Q3 để tăng khả năng cấp dòng cho cuộn cảm L, và nhờ đó tăng được khả năng cấp dòng cho tải. Trong mạch: R2 dùng để hạn dòng chân B và R1 dùng làm tăng hệ số ổn định nhiệt cho Q3. RB và RA là cầu chia volt dùng lấy tín hiệu cho chân hồi tiếp FB, trị của hai điện trở này sẽ xác định mức áp ngả ra. Khi Q3 dẫn, cuộn cảm L được nạp điện năng và khi Q3 tắt, cuộn cảm L sẽ hoàn trả lại điện năng dưới dạng điện áp ứng và lúc này diode D dẫn điện và cho nạp dòng điện ứng vào tụ C.
Nguyên lý dùng tạo đường nguồn có cực ra âm như sau: Khi Q1, Q2 dẫn điện, lúc này cuộn dây L được cho nạp điện năng và nó tích trữ điện năng dưới dạng từ trường, khi Q1, Q2 tắt, cuộn dây L sẽ hoàn trả lại lượng điện năng tích trữ dưới dạng điện áp ứng, lúc này diode D sẽ dẫn điện và cho nạp dòng ứng vào tụ C (470uF), với cách mắc của mạch trên, ở ngả ra chúng ta sẽ có mức áp âm. Mức áp âm cao hay thấp sẽ phụ thuộc vào trị của hai điện trở lấy tín hiệu hồi tiếp FB. Với trị điện trở có trong mạch này, chúng ta sẽ lấy được mức áp ra là -12V, và dòng cấp cho tải là 100mA.
Nói thêm cho rõ:
Một lần nữa Bạn lại thấy người ta tìm cách khai thác điện áp ứng của cuộn cảm L để tạo ra mức áp âm trên tụ C. Khi khóa K đóng là lúc cuộn cảm được cho nạp dòng và nó tích trữ điện năng và khi khóa K hở, cắt dòng của nguồn chảy qua cuộn dây, lúc này cuộn dây sẽ phát ra điện áp ứng. Nếu biết cách dùng diode nắn dòng, chúng ta sẽ lấy được dòng ứng cho nạp vào tụ để có nguồn điện áp âm cấp cho tải.
Hoạt động của mạch 6 giống như mạch 5, chỉ khác là mạch dùng thêm transistor ngoài Q3, ở đây Q3 là loại transistor pnp làm việc như một khóa điện đóng mở nhanh, khi Q3 dẫn nó bơm dòng vào cuộn cảm L và khi Q3 tắt nó để điện áp ứng của cuộn dây L cho nạp dòng ứng vào tụ C và tạo ra nguồn volt âm. Dùng hai điện trở để định hệ số hồi tiếp nghịch qua đó xác định mức áp ở ngả ra. Với Q3 mạch sẽ có khả năng cấp dòng lớn hơn cho tải.
Bạn có thể dùng điều biến độ rộng xung để thay đổi mức sáng của Led.
1. Cách thức điều chỉnh mức sáng của các Led trong mạch điện dạng xung.
Xung chậm, thấy Led nhấp nháy Xung nhanh, mức sáng Led thay đổi
Với các mạch dùng xung on/off để tắt mở các Led, để điều chỉnh mức sáng của Led, Bạn phải dùng xung điều biến độ rộng nhịp nhanh để điều chỉnh mức sáng của Led.
* Hình vẽ cho thấy với xung có hệ số duty 50 % thì trong một chu kỳ tín hiệu thời gian cho Led sáng bằng thời gian cho Led tắt, như vậy Led sẽ có mức sáng trung bình.
* Với xung có hệ số duty nhỏ, như 25 % thì trong một chu kỳ tín hiệu thời gian cho Led sáng ngắn hơn thời gian cho Led tắt, như vậy Led sẽ có mức sáng yếu hơn.
* Với xung có hệ số duty lớn, như 75 % thì trong một chu kỳ tín hiệu thời gian cho Led sáng dài hơn thời gian cho Led tắt, như vậy Led sẽ có mức sáng mạnh hơn.
Phân tích này cho thấy trong các mạch điện làm việc với tín hiệu dạng xung, các Led chỉ làm việc theo trạng thái sáng hay tắt, thì việc điều chỉnh mức sáng của các Led là phải dùng đến các xung PWM, hay còn gọi là xung điều biến độ rộng.
Vậy, hệ số Duty là gì?
Người ta định nghĩa, trong một chu kỳ xung, tỷ số giữa thời gian Ton trên chu kỳ T là hệ số duty. Vậy thời gian Ton càng dài thì hệ số duty càng lớn. Một thí dụ để hiểu hệ số duty: Nếu trong một ngày 24 giờ, chúng ta làm việc 12 giờ và nghĩ 12 giờ thì hệ số duty sẽ là 50%. Vậy số giờ làm việc càng ít hệ số duty sẽ càng nhỏ và số giờ làm việc nhiều hệ số duty sẽ lớn.
Trong các mạch điện làm việc với xung, do tần số của xung ổn định, nghĩa là chu kỳ xung không thay đổi, lúc đó người ta sẽ dùng hệ số duty đề điều khiền các hoạt động của mạch. Đây là một dạng xung điều biến độ rộng, vấn đề này chúng ta sẽ gặp trong các mạch số, như các mạch làm cho các Led nhấp nháy điều khiển bởi các ic lập trình, ic logic...
2. Xem một thí dụ:
Mạch điều chế độ rộng của xung ráp với IC 555.
Nguyên lý làm việc của mạch như sau:
* Thời kỳ Ton: Khi chân số 3 ở mức volt cao, lúc này chân 7 hở masse, tụ C2 nạp dòng qua RV', qua diode D13, và qua điện trở 1K, và khi mức áp trên chân 2, 6 lên bằng mức 8V (2/3 mức nguồn) thì chân số 3 sẽ chuyển nhanh xuống mức volt thấp, và cùng lúc nó cho chân số 7 đóng masse.
* Thời kỳ Toff: Khi chân số 3 ở mức volt thấp, lúc này chân 7 đóng masse, tụ C2 xả dòng qua RV'', qua diode D14, và khi mức áp trên chân 2, 6 xuống bằng mức 4V (1/3 mức nguồn) thì chân số 3 sẽ chuyển nhanh xuống mức volt cao, và cùng lúc nó cho chân số 7 hở masse.
Quy trình trên cứ lập đi lập lại và chu kỳ của tín hiệu xung ra trên chân số 3 sẽ là:
T ﹦0.69 (RV' + 1K + RV'')C = 0.69(50K + 1K)0.1 ... là một hằng số.
Với : Ton = 0.69 (RV'+1K)C và: Toff = 0.69(RV'')C
Duty = Ton/T , nó là một hàm của RV', vậy khi chỉnh chiết áp RV, Bạn thay đổi RV' và độ rộng của xung có dạng điều biến và Bạn sẽ thấy mức sáng của các Led thay đổi.
Nhắn Bạn: Để hiểu rõ hơn về IC 555, Bạn tham khảo bài viết sau:
Click chuột vào dòng này để mở xem.
3. Làm mạch Led nháy theo tín hiệu nhạc.
Tìm hiểu IC phát các bản nhạc khúc: UM66
Các dữ liệu trên cho thấy, IC nhạc UM66 có hình dạng như một transistor TO92, nó có 3 chân, chân giữa cho nối masse, chân bên phải nối vào nguồn dương 3V, chân bên trái cho ra các xung điều biến, với nội dung là các điệp khúc quen thuộc. UM66 có nhiều phiên bản, phân biệt theo các chữ phụ ghi thêm ở bên sau, mỗi phiên bản có các điệp khúc nhạc khác nhau. Cách dùng IC UM66 rất đơn giản. Các sơ đồ ứng dụng điển hình như sau:
Nếu UM66 dùng với loa gốm thì do loa gốm có trở kháng lớn nên có thể cho nối thẳng vào chân Out để lấy tín hiệu, nếu dùng loa điện động có nội trở nhỏ thì phải thêm tầng khuếch đại. Mạch dùng transistor 9013 với điện trở 4.7K hạn dòng trên chân B, loa gắn trên chân C. Với các mạch điện này, mỗi khi Bạn nhấn nút SW, mạch được cấp điện và từ loa sẽ phát ra các điệp khúc nhạc nghe quen tai. Nếu Bạn dùng máy hiện sóng để xem các tín hiệu nhạc phát ra từ IC UM66 Bạn sẽ thấy nó là một chuổi xung điều biến độ rộng, nghĩa là biên độ tín hiệu không thay đổi, luôn là xung vuông, các xung chỉ thay đổi độ rộng mà thôi, đó cũng là một đặc điểm của các nhạc cụ điện tử.
Bạn có thể dùng nhạc khúc phát ra từ IC UM66 để kích sáng một bảng đèn Led. Một sơ đồ ứng dụng như hình sau:
Trong mạch dùng IC UM66 để phát ra tín hiệu nhạc (các điệp khúc), đó là các dãy xung điều biến độ rộng, IC UM66 được cấp nguồn lấy trên 2 Led D7, D8, điện trở R1 dùng để hạn dòng và tụ C2 có tác dụng ổn áp đường nguồn 3.8V. Tín hiệu nhạc phát ra từ chân số 1, cho vào chân B của transistor Q1 để được khuếch đại, trên chân C của Q1 chúng ta dùng transistor pnp Q3 để khuếch đại, cấp tín hiệu đủ lớn cho loa điện động, và dùng transistor npn Q2 để khuếch đại, tạo tính tắt mở cho các Led trên bảng đèn, các Led này sẽ nhấp nháy theo điệu nhạc. Khi có xung ra biên cao thì Led sẽ sáng và khi xung ở mức biên thấp thì Led tắt, Bạn có thể gắn thêm diode 4148 mắc nối tiếp với điện trở hạn dòng 4.7K trên chân B của Q2 để tăng rào áp, tạo tính ngưng dẫn tốt cho Q2. Nhìn chung mạch rất đơn giản dễ ráp, cơ hội thành công cao.
Một gợi ý: Bạn có thể làm bảng đèn Led chạy nguồn pin Lithium 3.6V
Tôi nghĩ đọc qua bài viết này, Bạn có thể tự cho kết hợp các mạch điện để có một kiểu mạch theo đúng ý muốn của Bạn. Thí dụ: Để có bảng đèn Led chạy với mức nguồn nuôi thấp. Bạn có thể dùng IC nâng áp 34063A, để nâng mức áp 3V lên mức áp 12V hay lên đến 30V. Dùng IC UM66 để có tín hiệu nhạc, cho kết hợp các mạch điện này lại là đã có một bảng đèn Led siêu sáng nháy theo điệu nhạc. Phần này để Bạn tự thiết kế. Thử xem!!!
Phụ Lục
Bạn có thể dùng AT89C2051 cho Led nháy theo điệu nhạc.
Trong các bài viết trước đây, chúng ta thấy với các ic lập trình, như AT89C51, AT89C2051... chúng ta đã có thể làm được rất nhiều việc thích thú. Trong bài này tôi thêm phần phụ lục nói về cách dùng ic lập trình để viết các chương trình nhạc, phân tích cách viết các chương trình nguồn và rồi tìm cách dùng các chương trình này để điều khiển các bảng đèn Led. Mong Bạn thích đề tài này.
Trước khi muốn viết một chương trình nguồn để dùng ic lập trình cho phát ra tín hiệu nhạc, Bạn cũng phải biết tín hiệu nhạc được tạo ra như thế nào?
Hình vẽ cho thấy, sự thay đổi của r6 sẽ tạo ra các nốt nhạc khác nhau, và sự thay đổi của r7 sẽ tạo ra các trường độ khác nhau.
Chúng ta biết trong một điệu nhạc gồm có 2 phần: Phần nốt nhạc và phần trường độ, phụ thêm là khoảng dừng và dấu hiệu hết bài.
Nốt nhạc gồm có nốt: Do Re Mi Fa Sol La Si ứng với 7 con số là 1 2 3 4 5 6 7. Về mặt vật lý mỗi nốt nhạc là một tín hiệu có một tần số xác định. Sau đây là tần số của tín hiệu ứng với 7 nốt nhạc trên.
Do (523Hz) - Re (587Hz) - Mi (659Hz) - Fa (698Hz) - Sol (784Hz) - La (880Hz) - Si (988Hz).
* Vấn đề tạo ra các nốt nhạc:
Trong chương trình nguồn bên dưới chúng ta dùng thanh ghi r6 để cho phát ra nốt nhạc. Chúng ta có thể tạo ra xung với tần số xác định tùy theo trị nạp vào thanh ghi r6. Thí dụ: Trong chương trình nguồn bên dưới, với thạch anh 12MHz, khi trị trong r6 là 1 thì thời gian trể sẽ là 20us. Vậy để tạo ra tín hiệu có tần số là 200Hz, chúng ta sẽ phải nạp trị là bao nhiêu vào thanh ghi r6?
Cách tính như sau:
Với: nếu để có tín hiệu có tần số là f = 200Hz thì chu kỳ xung sẽ là: T = 1/200Hz = 5ms hay 5000us, vậy nửa bán kỳ của xung sẽ là 2500us, nếu chia cho 20us, chúng ta có con số 125 hay 7dh. Vậy nếu Bạn nạp con số 125 hay 7dh vào thanh ghi r6, chúng ta sẽ có tín hiệu có tần số 200Hz. Qua thí dụ này Bạn biết cách tính ra trị thập phân hay trị thập lục phân để nạp vào thanh ghi r6, để ic lập trình phát ra tín hiệu các nốt nhạc có tần số như trên. Trong cách làm, Bạn sẽ tính trị thập lục phân tương ứng với 7 nốt nhạc trên và khi cần có nốt nhạc nào, Bạn chỉ việc cho nạp trị đã tính được vào thanh ghi r6.
* Vấn đề trường độ của các nốt nhạc:
Để kéo dài thời gian cho phát ra một nốt nhạc, chúng ta sẽ dùng timer0 để điều khiển trường độ phát các nốt nhạc. Trong chương trình này chúng ta dùng timer 0 để tạo ra khoảng thời chuẩn là 10ms và dùng ngắt để điều khiển khoảng thời gian phát ra của các nốt nhạc, khoảng thời gian này tuỳ thuộc vào trị trong r7. Thí dụ, nếu chung ta qui định trong 1phút có 94 nhịp hay phách, thì thời gian để cho 1 nhịp sẽ là 1/94 hay 0.64s. Vậy 1/4 nhịp sẽ là 0.64s/4 = 0.16s hay 160ms = 16x10, 10 lần của 10ms sẽ tạo ra trường độ là 1/4 nhịp. Để có trường độ 3 nhịp, thời gian sẽ là 0.64sx3 = 1.92s hay 1920ms = 192x10ms. 192 lần của 10ms sẽ tạo ra trường độ là 3 nhịp. Như vậy chúng ta định được số lần cho ngắt để định trường độ của các nốt nhạc.
* Vấn đề khoảng dừng và mã kết thúc bản nhạc:
Chúng ta có thể dùng mã 00h đặt trong bảng để đánh dấu sự kết thúc của bản nhạc và dùng mã 0ffh để tạo khoảng dừng.
Sau đây là một chương trình nguồn đã giản lượt để tạo ra tín hiệu nhạc. Tín hiệu cho xuất trên chân p1.7
ORG 0000H ; khởi đầu từ địa chỉ thanh nhớ 0000h
JMP START ; nhẩy đến tên nhãn start
ORG 000BH ; vị trị dùng cho ngắt timer 0, nhẩy ngắt theo bit tf0
; chương trình của ngắt timer 0
INC 20H ; cho tăng trị trong thanh 20h lên +1
MOV TH0,#0D8H ; Nạp trị vào thanh đếm th0 của timer 0
MOV TL0,#0EFH ; Nạp trị cho thanh đếm tl0. Với thạnh anh 12MHz, timer0 cho định là 10ms
RETI ; dừng chương trình ngắt quay lại chương trình chính.
START: ; tên nhãn dùng cho lệnh nhẩy
MOV SP,#50H ; chọn vùng làm ngăn xếp
MOV TH0,#0D8H ; nạp trị định trước cho thanh đếm th0
MOV TL0,#0EFH ; nạp trị định trước cho thanh đếm tl0
MOV TMOD,#01H ; khai báo dùng mode 1 cho timer 0, mode đếm 16 bit
MOV IE,#82H ; khai báo cho dùng ngắt theo bit báo tràn tf0
; Dùng timer0 cho chạy ở mode 1 để tạo thời gian chuẩn là 10ms
MUSIC0: ; đặt tên nhãn cho lệnh nhẩy
NOP ; dòng không tác vụ
MOV DPTR,#DAT ; đặt bảng dat vào thanh ghi con trỏ
MOV 20H,#00H ; nạp trị 0 khởi đầu vào thanh ghi 20h
MOV B,#00H ; nạp trị 0 vào thanh ghi b
MUSIC1: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
CLR A ; cho xóa sạch thanh ghi a
MOVC A,@A+DPTR ; lấy mã trong bảng cho cất vào thanh a
JZ END0 ; xét trị trong thanh a, bằng 0 chưa để chọn hướng nhẩy
CJNE A,#0FFH,MUSIC5 ; cho so trị trong a với trị 0ffh để chọn hướng nhẩy
JMP MUSIC3 ; nhẩy đến tên nhãn là music3
MUSIC5: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
MOV R6,A ; cho cất trị trong thanh a vào thanh r6
INC DPTR ; cho tăng trị trong dptr lên +1 để lấy mã tiếp theo
MOV A,B ; chuyển trị trong thanh b vào thanh a
MOVC A,@A+DPTR ; cho lấy mã trong bảng cất vào thanh a
MOV R7,A ; chuyển trị trong thanh a vào thanh r7
SETB TR0 ; cho chạy mạch timer 0, để nhẩy ngắt theo bit báo tràn
MUSIC2: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
CPL P1.7 ; lấy bù và cũng cho xuất tín hiệu trên chân p1.7
MOV A,R6 ; trả trị trong thanh r6 trở lại thanh a
MOV R3,A ; chuyển trị trong thanh a vào thanh r3
CALL DEL ; gọi chương trình trể có tên nhãn del
MOV A,R7 ; trả trị trong thanh r7 trở vào thanh a
CJNE A,20H,MUSIC2 ; so trị trong a với trị trong 20h để định hướng nhẩy
MOV 20H,#00H ; trả trị 0 vào thanh ghi 20h
INC DPTR ; cho tăng trị trong thanh ghi con trỏ
JMP MUSIC1 ; nhẩy đến tên nhãn music1
MUSIC3: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
CLR TR0 ; tắt mạch đếm của timer 0
; tạo khoảng dừng 100ms
MOV R2,#0DH ; đặt trị số đếm 0dh vào thanh r2
MUSIC4: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
MOV R3,#0FFH ; đặt trị 0ffh vào thanh r3
CALL DEL ; gọi chương trình trể có tên nhãn là del
DJNZ R2,MUSIC4 ; giàm trị trong r2, r2=0? chọn hướng nhẩy
INC DPTR ; cho tăng trị trong thanh ghi con trỏ lên +1
JMP MUSIC1 ; nhẩy đến tên nhãn music1
END0: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
; Tạo khoảng dừng 1s
MOV R2,#64H ; đặt trị số đếm 64h vào thanh r2
MUSIC6: ; đặt tên nhãn dùng cho lệnh nhẩy
MOV R3,#00H ; đặt trị 00h vào thanh ghi r3
CALL DEL ; gọi chương trình làm trể có tên nhãn là del
DJNZ R2,MUSIC6 ; giảm trị trong r2, r2=0?, chọn hướng nhẩy
JMP MUSIC0 ; nhẩy đến tên nhãn là music0
DEL: ; đặt tên nhãn dùng cho lệnh nhẩy, trể thay đổi theo r3
NOP
DEL3: ; đặt tên nhãn dùng cho lệnh nhẩy
MOV R4,#02H ; đặt trị số đếm 02h vào r4
DEL4: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP
DJNZ R4, DEL4 ; giảm trị trong r4 theo bước -1, r4=0?, chọn hướng nhẩy
NOP
DJNZ R3,DEL3 ; giảm trị trong r3 theo bước -1, r3=0?, chọn hướng nhẩy
RET ; quay lại sau lệnh call del
NOP
DAT: ; bảng đặt các cặp mã: nốt nhạc và trường độ... của một bản nhạc
db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
db 20h,10h,2bh,10h,26h,30h,30h,80h,00H
END
* Nếu Bạn thay dùng bảng mã sau đây cho chương trình nguồn trên, Bạn sẽ có bản nhạc: Tháng 8 hoa Quế tỏa hương thơm.
DAT: ; Bản nhạc "Tháng 8 hoa Quế tỏa hương thơm"
DB 18H, 30H, 1CH, 10H
DB 20H, 40H, 1CH, 10H
DB 18H, 10H, 20H, 10H
DB 1CH, 10H, 18H, 40H
DB 1CH, 20H, 20H, 20H
DB 1CH, 20H, 18H, 20H
DB 20H, 80H, 0FFH,20H
DB 30H, 1CH, 10H, 18H
DB 20H, 15H, 20H, 1CH
DB 20H, 20H, 20H, 26H
DB 40H, 20H, 20H, 2BH
DB 20H, 26H, 20H, 20H
DB 20H, 30H, 80H, 0FFH
DB 20H, 20H, 1CH, 10H
DB 18H, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H
DB 30H, 20H, 2BH, 40H
DB 20H, 20H, 1CH, 10H
DB 18H, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H
DB 30H, 20H, 2BH, 40H
DB 20H, 30H, 1CH, 10H
DB 18H, 20H, 15H, 20H
DB 1CH, 20H, 20H, 20H
DB 26H, 40H, 20H, 20H
DB 2BH, 20H, 26H, 20H
DB 20H, 20H, 30H, 80H
DB 20H, 30H, 1CH, 10H
DB 20H, 10H, 1CH, 10H
DB 20H, 20H, 26H, 20H
DB 2BH, 20H, 30H, 20H
DB 2BH, 40H, 20H, 15H
DB 1FH, 05H, 20H, 10H
DB 1CH, 10H, 20H, 20H
DB 26H, 20H, 2BH, 20H
DB 30H, 20H, 2BH, 40H
DB 20H, 30H, 1CH, 10H
DB 18H, 20H, 15H, 20H
DB 1CH, 20H, 20H, 20H
DB 26H, 40H, 20H, 20H
DB 2BH, 20H, 26H, 20H
DB 20H, 20H, 30H, 30H
DB 20H, 30H, 1CH, 10H
DB 18H, 40H, 1CH, 20H
DB 20H, 20H, 26H, 40H
DB 13H, 60H, 18H, 20H
DB 15H, 40H, 13H, 40H
DB 18H, 80H, 00H
* Đây là bảng mã cho phát bản nhạc: Chúc Bạn bình an
DAT:
db 26h,20h,20h,20h,20h,20h,26h,10h,20h,10h,20h,80h,26h,20h,30h,20h
db 30h,20h,39h,10h,30h,10h,30h,80h,26h,20h,20h,20h,20h,20h,1ch,20h
db 20h,80h,2bh,20h,26h,20h,20h,20h,2bh,10h,26h,10h,2bh,80h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,60h,40h,10h,39h,10h,26h,20h
db 30h,20h,30h,20h,39h,10h,26h,10h,26h,80h,26h,20h,2bh,10h,2bh,10h
db 2bh,20h,30h,10h,39h,10h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,20h
db 20h,10h,20h,10h,2bh,10h,26h,30h,30h,80h,18h,20h,18h,20h,26h,20h
db 20h,20h,20h,40h,26h,20h,2bh,20h,30h,20h,30h,20h,1ch,20h,20h,20h
db 20h,80h,1ch,20h,1ch,20h,1ch,20h,30h,20h,30h,60h,39h,10h,30h,10h
db 20h,20h,2bh,10h,26h,10h,2bh,10h,26h,10h,26h,10h,2bh,10h,2bh,80h
db 18h,20h,18h,20h,26h,20h,20h,20h,20h,60h,26h,10h,2bh,20h,30h,20h
db 30h,20h,1ch,20h,20h,20h,20h,80h,26h,20h,30h,10h,30h,10h,30h,20h
db 39h,20h,26h,10h,2bh,10h,2bh,20h,2bh,40h,40h,10h,40h,10h,20h,10h
db 20h,10h,2bh,10h,26h,30h,30h,80h,00H
Giải thích ý nghĩa các câu lệnh dùng trong chương trình nguồn:
(1) Dùng Timer 0, chọn mode 1, để tạo ra thời chuẩn 10ms
Để có thời chuẩn 10ms dùng để chọn định trường độ phát ra của các nốt nhạc, người ta dùng timer0, cho làm việc ở mode 1, với các trị đã nạp vào thanh đếm tl0, th0 là th0 0d8h=216 và tl0 là 0efh=239 thì bộ đếm chỉ cần đếm thêm 10000us=10ms nữa là tràn. Để Bạn hiểu rõ hơn về hoạt động của đồng hồ timer0, chúng ta sẽ khảo sát hình vẽ sau:
Hình vẽ cho thấy với thạch anh 12MHz thì chu kỳ xung vào mạch đếm sẽ là 1us, với thanh đếm 16 bit tạo bởi 2 thanh tl0 và th0 thì bộ đếm này có thể đếm được tối đa là 65535 xung, hay 65525us, nhưng do chúng ta đã cho nạp trước vào 2 thanh tl0 và th0 trị d8efh, tức là 55355, nên bộ đếm chỉ cần đếm thêm 10000us nữa là tràn, tức là 10ms. Đề dùng timer0, ở mode 1, chúng ta dùng các câu lệnh sau:
mov tmod, #01h ; tức đặt bit 00000001b vào thanh tmod.
mov th0, #0d8h ; tức đặt trị 0d8h=216 vào thanh đếm th0
mov tl0, #0efh ; tức đặt trị 0efh=239 vào thanh đếm tl0
Để mở mạch đếm chúng ta dùng câu lệnh: setb tr0
và để dừng đếm chúng ta dùng câu lệnh: clr tr0.
Ở đây chúng ta khai báo như sau, trong thanh IE, để dùng ngắt theo bit báo tràn tf0.
Dùng câu lệnh: setb tr0 để cho mở bộ đếm của timer 0, và khi bộ đếm tràn số, đếm đến 65535 nhịp, bit báo tràn bậc lên 1, ngay lúc này sẽ nhẩy ngắt tf0, chương trình chính sẽ dừng lại, nhẩy đến địa chỉ 000bh và cho thực hiện các câu lệnh bên dưới địa chỉ này...cho đến khi gặp câu lệnh:reti, nó sẽ dừng thực hiện chương trình ngắt và quay lại thực hiện tiếp chương trình chính đã dừng lại lúc trước.
(2) Dùng các câu lệnh để lấy mã nốt nhạc và mã trường độ trong bảng.
Chúng ta biết trong bảng mã với tên nhãn là dat: , trong đó người ta đã đặt từng cặp mã, trước làmã nốt nhạc và kế bên là mã trường độ. Để lấy các mã này cho phát ra trên chân p1.7 (hay có thể trên các chân khác tùy chọn), chúng ta sẽ dùng các câu lệnh được giải thích như sau:
MUSIC0: ; đặt tên nhãn cho lệnh nhẩy
NOP ; dòng không tác vụ
MOV DPTR,#DAT ; đặt địa chỉ của bảng dat vào thanh ghi con trỏ dph và dpl
MOV 20H,#00H ; nạp trị 0 khởi đầu vào thanh ghi 20h
MOV B,#00H ; nạp trị 0 vào thanh ghi b
Giải thích: dùng thanh ghi có địa chỉ 20h làm thanh ghi cất giữ số đếm số lần đã nhẩy ngắt. Dùng thanh ghi b để giữ số lần đã lấy mã trường độ
MUSIC1: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
CLR A ; cho xóa sạch thanh ghi a, lấy trị 0
MOVC A,@A+DPTR ; lấy mã vị trị 0 trong bảng cho cất vào thanh a
JZ END0 ; xét trị trong thanh a, bằng 0 chưa để chọn hướng nhẩy
CJNE A,#0FFH,MUSIC5 ; cho so trị trong a với trị 0ffh để chọn hướng nhẩy
JMP MUSIC3 ; nhẩy đến tên nhãn là music3
Giải thích: Trước hết cho xóa trị trong thanh clr a, rồi cho lấy mã đầu tiên trong bảng cho cất vào thanh a. Xét xem trị trong thanh a có bằng 0 không?. Nếu chưa bằng 0 thì xuống câu lệnh dưới, nếu bằng 0 thì nhẩy đến tên nhãn END0, chạy chương trình kết thúc bản nhạc. Câu lệnh: CJNE cho kểm tra trị trong a có là 0ffh không? Nếu không thì nhẩy đến tên nhãn MUSIC5 để tiếp tục cho phát nhạc.....Nếu a băng 0ffh thì xuống chạy câu lệnh jmp music3, music3: là chương trình cho dừng 100ms.
MUSIC5: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
MOV R6,A ; cho cất trị trong thanh a vào thanh r6
INC DPTR ; cho tăng trị trong dptr lên +1 để lấy mã tiếp theo
MOV A,B ; chuyển trị trong thanh b vào thanh a
MOVC A,@A+DPTR ; cho lấy mã trong bảng cất vào thanh a
MOV R7,A ; chuyển trị trong thanh a vào thanh r7
SETB TR0 ; cho chạy mạch timer 0, để nhẩy ngắt theo bit báo tràn
Giải thích: Bây giờ cho chuyển mã nốt nhạc có trong a cất vào thanh ghi r6, dùng câu lệnh: inc dptr cho dời mã trong bảng lên một bậc. Chuyển trị của thanh b vào thanh a và lại cho lấy mã trong bảng, lần này lấy là mã trường độ, lại cho cất mã trường độ vào thanh ghi r7. Bắt đầu cho chạy timer 0 với câu lệnh: setb tr0 để dùng ngắt tf0.
Tóm lại đoạn chương trình trên cho thấy, chúng ta đã lấy mã nốt nhạc trong bảng cho cất vào thanh ghi r6 và lấy mã trường độ cho cất vào thanh ghi r7, cùng lúc kiểm tra mã trường độ trong a có là 00h hay không? hay có là 0ffh hay không? Nếu trong a là mã 00h thì cho kết thúc bản nhạc, cho nghĩ 1s rồi lập lại, nếu trong a là mã 0ffh thì dừng 100ms rồi tiếp tục.
̣(3) Cách phát tín hiệu nhạc ra trên chân chúng ta chọn là p1.7
MUSIC2: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
CPL P1.7 ; lấy bù và cũng cho xuất tín hiệu trên chân p1.7
MOV A,R6 ; trả trị trong thanh r6 trở lại thanh a
MOV R3,A ; chuyển trị trong thanh a vào thanh r3
CALL DEL ; gọi chương trình trể có tên nhãn del
MOV A,R7 ; trả trị trong thanh r7 trở vào thanh a
CJNE A,20H,MUSIC2 ; so trị trong a với trị trong 20h để định hướng nhẩy
MOV 20H,#00H ; trả trị 0 vào thanh ghi 20h
INC DPTR ; cho tăng trị trong thanh ghi con trỏ
JMP MUSIC1 ; nhẩy đến tên nhãn music1
Giải thích: Câu lệnh: cpl p1.7 dùng để cho xuất tín hiệu nhạc trên chân p1.7. Lần xuất này là mã nốt nhạc, nốt nhạc là một xung có tần số đã biết, tần số xung xác định theo trị có trong thanh ghi r6, ở đây cho chuyển trị của r6 vào thanh ghi r3 rồi dùng lệnh gọi: call del, để chạy chương trình định thời gian trể, thời gian trể tùy thuộc vào trị trong r3, với trị trong r3 càng lớn thời gian trể dài sẽ tạo ra xung có tần số thấp và ngược lại nếu trị trong r3 nhỏ chúng ta sẽ có xung tín hiệu tần cao.
Kế đó cho chuyển trị trong thanh ghi r7 vào thanh a, trị trong thanh ghi r7 là mã trường độ, tức độ dài của nốt nhạc mà chúng ta cho phát ra trên chân p1.7. Hãy cho so sánh trị có trong thanh 20h và trị trong thanh ghi a (tức trị của r7) để biết số lần nhẩy ngắt đã đủ theo trị trong thanh ghi r7 chưa. Nếu chưa thì tiếp tục cho nhẩy ngắt đến khi trị trong 20h bằng trị trong thanh r7. Trước khi nhẩy trở lại tên nhãn music1 để tiếp tục..., chúng ta không quên trả trị trong thanh ghi 20h về 0 và đồng thời cho dời mã trong bảng lên một bậc với câu lệnh: inc dptr.
Tóm lại, mã nốt nhạc có tần số định theo trị trong r6, tần số lấy theo thời gian trể trong chương trình del: và mã trường độ có độ dài xác định theo trị trong thanh ghi r7, thời gian dài ngắn là một bội số của ngắt timer 0, tức lấy theo số lần của thời chuẩn 10ms.
DEL: ; đặt tên nhãn dùng cho lệnh nhẩy, trể thay đổi theo r3
NOP
DEL3: ; đặt tên nhãn dùng cho lệnh nhẩy
MOV R4,#02H ; đặt trị số đếm 02h vào r4
DEL4: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP
DJNZ R4, DEL4 ; giảm trị trong r4 theo bước -1, r4=0?, chọn hướng nhẩy
NOP
DJNZ R3,DEL3 ; giảm trị trong r3 theo bước -1, r3=0?, chọn hướng nhẩy
RET ; quay lại sau lệnh call del
(4) Tạo khoàng dừng 100ms ứng với mã trường độ 0ffh lấy được từ trong bảng dat:
MUSIC3: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
CLR TR0 ; tắt mạch đếm của timer 0
; tạo khoảng dừng 100ms
MOV R2,#0DH ; đặt trị số đếm 0dh vào thanh r2
MUSIC4: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
MOV R3,#0FFH ; đặt trị 0ffh vào thanh r3
CALL DEL ; gọi chương trình trể có tên nhãn là del
DJNZ R2,MUSIC4 ; giàm trị trong r2, r2=0? chọn hướng nhẩy
INC DPTR ; cho tăng trị trong thanh ghi con trỏ lên +1
JMP MUSIC1 ; nhẩy đến tên nhãn music1
Giải thích: Trước hết cho tắt timer 0 với câu lệnh: clr tr0, rồi đặt trị 0dh=13 vào thanh ghi r2, đây là một số đếm. Lúc này đặt trị 0ffh=255 vào thanh ghi r3, rồi cho gọi chương trình làm trểdel: , dùng câu lệnh: call del. Qui trình này cho lập lại đến khi trị trong thanh ghi r2 giảm theo bước -1 cho đến bằng 0. Trước khi quay lại tên nhãn music1, Bạn không quên cho dời mã trong bảng dat: lên một bậc với câu lệnh: inc dptr.
Vậy mỗi khi lấy được mã trường độ có trị là 0ffh, thì chúng ta sẽ cho chương trình nhẩy đến tên nhãn music4: để cho chạy chương trình làm trể 100ms.
(5) Tạo khoảng dùng 1s ứng với mã trường độ 00h lấy được từ trong bảng dat:
END0: ; đặt tên nhãn dùng cho lệnh nhẩy
NOP ; dòng không tác vụ
; Tạo khoảng dừng 1s
MOV R2,#64H ; đặt trị số đếm 64h vào thanh r2
MUSIC6: ; đặt tên nhãn dùng cho lệnh nhẩy
MOV R3,#00H ; đặt trị 00h vào thanh ghi r3
CALL DEL ; gọi chương trình làm trể có tên nhãn là del
DJNZ R2,MUSIC6 ; giảm trị trong r2, r2=0?, chọn hướng nhẩy
JMP MUSIC0 ; nhẩy đến tên nhãn là music0
Giải thích: Khi lấy mã trường độ trong bảng gặp trị 00h thì chương trình sẽ nhẩy đến tên nhãn end0: Đây là chương trình làm trể 1s. Chương trình này được viết như sau: Trước hết đặt trị số đếm 64h=100 vào thanh r2. đặt trị 00h vào thanh ghi r3 và cho gọi chương trình trể với câu lệnh:call del. Kiểm tra trị trong r2 xem bằng không chưa để định hướng nhẩy. Nếu trị trong r2 đã giảm đến mức bằng 0 thì nhẩy về tên nhãn music0 để cho khởi đầu lại.
end ; là một giả lệnh, có nghĩa là dừng biên dịch tại dòng này
Tạm kết
Bài viết đến đây đã quá dài, từ một câu hỏi nhỏ chúng ta đã "lan man" đến nhiều lĩnh vực khác, nếu cứ tiếp tục sẽ không tìm được điểm dừng. Thôi tạm stop tại đây, chúng ta sẽ chuyển qua các đề tài khác. Mong Bạn thường xuyên vào trang web nhà phuclanshop.com để tiếp tục cùng chúng tôi tìm hiểu khám phá qua rất nhiều đề tài hấp dẫn khác.
vivian.wang.yun
Kinh doanh linh kiện và thiết bị ngành điện tử và điều khiển điện