Lời mở đầu Ngày nay, những ứng dụng của Vi điều khiển đã đi sâu vào đời sống sinh hoạt và sản xuất của con người. Thực tế hiện nay là hầu hết các thiết bị điện dân dụng hiện nay đều có sự góp mặt của Vi Điều Khiển và vi xử lí . Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và hạ giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị và hệ thống. Việc phát triển ứng dụng các hệ vi xử lý đòi hỏi những hiểu biết cả về phần cứng cũng như phần mềm, nhưng cũng chính vì vậy mà các hệ vi xử lý được sử dụng để giải quyết những bài toán rất khác nhau. Một trong những ứng dụng rõ ràng nhất của Vi điều khiển là trong các hệ thống quang báo. Thật khó phủ nhận trong đời sống hiện đại ngày nay, quảng cáo là một phần không thể thiếu trong nhịp sống bùng nổ công nghệ thông tin như hiện nay. Ở bất cứ nơi đâu ta cũng bắt gặp những biển quảng cáo từ đơn giản, thủ công cho đến những biển quảng cáo điện tử hiện đại, thẩm mỹ. Đó là những bảng quảng cáo điện tử mà chúng ta gọi là những bảng đèn quang báo. Công nghệ điện tử này còn được sử dụng trong nhiều lĩnh vực như những biển báo giao thông, những bảng điểm trên những sàn giao dịch chứng khoán,hay tại các sân bay, siêu thị... Những bảng quang báo này góp phần làm cho thành phố chúng ta có được một bộ mặt của một thành phố hiện đại và văn minh. Với mục đích tìm hiểu sâu những kiến thức đã học trên giảng đường cộng với niềm đam mê riêng của bản thân, em đã nghiên cứu và học hỏi để thiết kế mạch điều khiển led ma trận bằng vi điều khiển 8051.
TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI KHOA ĐIỆN TỬ - VIỄN THÔNG o0o B I T P L NÀ Ậ Ớ Môn : VI XỬ LÝ Đề tài : ĐIỀU KHIỂN LED MA TRẬN LED BẰNG 8051 Thầy hướng dẫn : Nguyễn Huy Hoàng Sinh viên : Nguyễn Hoàng Minh Sơn Lời mở đầu Ngày nay, những ứng dụng của Vi điều khiển đã đi sâu vào đời sống sinh hoạt và sản xuất của con người. Thực tế hiện nay là hầu hết các thiết bị điện dân dụng hiện nay đều có sự góp mặt của Vi Điều Khiển và vi xử lí . Ứng dụng vi điều khiển trong thiết kế hệ thống làm giảm chi phí thiết kế và hạ giá thành sản phẩm đồng thời nâng cao tính ổn định của thiết bị và hệ thống. Việc phát triển ứng dụng các hệ vi xử lý đòi hỏi những hiểu biết cả về phần cứng cũng như phần mềm, nhưng cũng chính vì vậy mà các hệ vi xử lý được sử dụng để giải quyết những bài toán rất khác nhau. Một trong những ứng dụng rõ ràng nhất của Vi điều khiển là trong các hệ thống quang báo. Thật khó phủ nhận trong đời sống hiện đại ngày nay, quảng cáo là một phần không thể thiếu trong nhịp sống bùng nổ công nghệ thông tin như hiện nay. Ở bất cứ nơi đâu ta cũng bắt gặp những biển quảng cáo từ đơn giản, thủ công cho đến những biển quảng cáo điện tử hiện đại, thẩm mỹ. Đó là những bảng quảng cáo điện tử mà chúng ta gọi là những bảng đèn quang báo. Công nghệ điện tử này còn được sử dụng trong nhiều lĩnh vực như những biển báo giao thông, những bảng điểm trên những sàn giao dịch chứng khoán,hay tại các sân bay, siêu thị Những bảng quang báo này góp phần làm cho thành phố chúng ta có được một bộ mặt của một thành phố hiện đại và văn minh. Với mục đích tìm hiểu sâu những kiến thức đã học trên giảng đường cộng với niềm đam mê riêng của bản thân, em đã nghiên cứu và học hỏi để thiết kế mạch điều khiển led ma trận bằng vi điều khiển 8051. 1. Mục đích đề tài: - Điều khiển ma trận led 8x24 (Hình 1) - Sử dụng vi điều khiển trung tâm 8051 2. Cơ sỏ lý thuyết: - Sơ đồ ma trận led: o Các led được phân chia thành hàng và cột o Các led trên 1 hàng nối cực (+) với nhau và lấy tìn hiệu điều khiển từ cùng 1 chân ( từ H1 đén H8) o Các led trên 1 cột được nối cực (-) với nhau và lấy tín hiệu điều khiển từ cùng 1 chân (từ C1 đến C24) - Điều khiển LED: o Áp dụng phương pháp quét hàng với tốc độ cao: tại mỗi thời điểm nhất định chỉ có tín hiệu tích cực ở một hàng để điều khiển led sáng. Tuy nhiên do hiện tượng lưu ảnh của mắt (24hình/s) nên con người có cảm giác toàn bộ các led sáng cùng lúc o Do ta có một số lượng lớn các chân điều khiển (32 chân) nên ta phải ghép nối vi điều khiển để mở rộng số lượng chân tín hiệu. Việc này cũng thuận tiện cho việc nâng cấp mạch khi ta có một vi điều khiển trung tâm và modul led ma trận, khi muốn mở rộng số lượng led ta chỉ việc mở rộng số modul ma trận led. - Như vậy để điều khiển led sáng ta cần tín hiệu điều khiển tức thời tại một hàng và toàn bộ các cột. Ví dụ: Điều khiển led đầu tiên (bên trái) của hàng 2 sáng: - led(H2,C24) sáng. Tín hiệu điều khiển như sau: H1(-), H2(+), H3(-), H4(-),H5(-), H6(-), H7(-), H8(-) C24(-), C23(+), C22(+), C21(+),C20(+), C19(+), C18(+), C17(+) C16(+), C15(+), C14(+), C13(+),C12(+), C11(+), C10(+), C9(+) C8(+), C7(+), C6(+), C5(+),C4(+), C3(+), C2(+), C1(+) Điều khiển 3 led đầu tiên (bên trái) của cột đầu tiên (C24) sáng: - led(H1,C24) sáng trong 1ms, tắt led(H1,C24) - led(H2,C24) sáng trong 1ms, tắt led(H2,C24) - led(H3,C24) sáng trong 1ms, tắt led(H3,C24) - Do hiện tượng lưu ảnh của mắt ta sẽ thấy 3 led này sáng đồng thời. Khối điều khiển Khối đệm Khối đệm 24 đường tín hiệu điều khiển 8 đường tín hiệu Mạch led ma trận MCU 8051 Mạch giải mã cột Tín hiệu điều khiển Tín hiệu điều khiển Mạch quét hàng 24 đường tín hiệu điều khiển 8 đường tín hiệu điều khiển 3. Sơ đồ khối: Sơ đồ 1: Chú thích: : Đường tín hiệu sau khi đệm có khả năng cung dòng lớn. Nhiệm vụ từng khối: - Khối điều khiển: cung cấp tín hiệu giải mã địa chỉ cho hàng và cột, xác định led nào sáng (tắt). - Khối đệm: đệm dòng led sáng hiệu quả, chống nhiễu cho mạch led ma trận. Sơ đồ 2: cho khối điều khiển Nhiệm vụ từng khối: - MCU 8051: đây là nơi lưu trữ chương trình và dữ liệu cho các mạch giải mã cột và mạch quét hàng. - Mạch quét hàng: nhận tín hiệu điều khiển từ MCU 8051, tại 1 thời điểm xác định, mạch chỉ cấp tín hiệu tích cực cho 1 hàng các hàng còn lại không có tín hiệu tích cực. - Mạch giải mã cột: nhận tín hiệu điều khiển từ MCU 8051, tại mỗi thời điêm mạch quét hàng cung cấp tín hiệu tích cực cho 1 hàng, mạch giải mã cột sẽ cung cấp tín hiệu địa chỉ của led để xác định led nào sáng (tắt). - Như vậy đường tín hiệu ra của khối điều khiển bao gồm 32 đường tín hiệu cung cấp cho mạch led ma trận. 4. Thiết kế chi tiết: 4.1 Phần cứng: - MCU 8051: AT89C51 - Mạch giải mã cột: 74HC595 (mở rộng chân cho MCU 8051) - Mạch quét hàng: 74HC138 (mở rộng chân cho MCU 8051) - Khối đệm: Transistor B562: cấp nguồn cho hàng ma trận led ULN2803 đệm dòng và có khả năng ổn định dòng cho led sáng đều 74HC245 đệm dòng và có khả năng chống nhiễu - Nguồn 5V - Mạch led ma trận 8x24 được mắc như Hình 1 4.2 Đặc tính kỹ thuật của phần cứng: 4.2.1: AT89C51: Năm 1980 khi intel tung ra chip 8051, bộ Vi điều khiển đầu tiên của họ MCS-51 và là chuẩn công nghệ cho nhiều họ Vi điều khiển được sản xuất sau này. Sau đó rất nhiều họ Vi điều khiển của nhiều nhà chế tạo khác nhau lần lượt được đưa ra thị trường với tính năng được cải tiến ngày càng mạnh. Trong mạch sử dụng AT89C51 của hãng Atmel là một trong số này. 4.2.1.1 Sơ lược phần cứng: Các thành viên của họ MCS-51 (Atmel) có các đặc điểm chung như sau: Có 4/8/12/20 Kbyte bộ nhớ FLASH ROM bên trong để lưu chương trình. Nhờ vậy Vi điều khiển có khả năng nạp xoá chương trình bằng điện đến 10000 lần. 128 Byte RAM nội 4 Port xuất/nhập 8 bit Từ 2 đến 3 bộ định thời 16-bit Có khả năng giao tiếp truyền dữ liệu nối tiếp Có thể mở rộng không gian nhớ chương trình ngoài 64KByte (bộ nhớ ROM ngoại): khi chương trình do người lập trình viết ra có dung lượng lớn hơn dung lượng bộ nhớ ROM nội, để lưu được chương trình này cần bộ nhớ ROM lớn hơn, cách giải quyết là kết nối Vi điều khiển với bộ nhớ ROM từ bên ngoài (hay còn gọi là ROM ngoại). Dung lượng bộ nhớ ROM ngoại lớn nhất mà Vi điều khiển có thể kết nối là 64Kbyte Có thể mở rộng không gian nhớ dữ liệu ngoài 64KByte (bộ nhớ RAM ngoại) Bộ xử lí bit (thao tác trên các bit riêng rẽ), 210 bit có thể truy xuất đến từng bit 4.2.1.2 Khảo sát sơ đồ chân: Mặc dù các thành viên của họ MSC-51 có nhiều kiểu đóng vỏ khác nhau, chẳng hạn như hai hàng chân DIP (Dual In-Line Pakage) dạng vỏ dẹt vuông QFP (Quad Flat Pakage) và dạng chíp không có chân đỡ LLC (Leadless Chip Carrier) và đều có 40 chân cho các chức năng khác nhau như vào ra I/0, đọc , ghi , địa chỉ, dữ liệu và ngắt. Tuy nhiên, vì hầu hết các nhà phát triển chính dụng chíp đóng vỏ 40 chân với hai hàng chân DIP, nên chúng ta cùng khảo sát Vi điều khiển với 40 chân dạng DIP. Chân VCC: Chân số 40 là VCC cấp điện áp nguồn cho Vi điều khiển Nguồn điện cấp là +5V±0.5. Chân GND: Chân số 20 nối GND(hay nối Mass). Khi thiết kế cần sử dụng một mạch ổn áp để bảo vệ cho Vi điều khiển, cách đơn giản là sử dụng IC ổn áp 7805. Port 0 (P0) Port 0 gồm 8 chân (từ chân 32 đến 39) có hai chức năng: Chức năng xuất/nhập :các chân này được dùng để nhận tín hiệu từ bên ngoài vào để xử lí, hoặc dùng để xuất tín hiệu ra bên ngoài, chẳng hạn xuất tín hiệu để điều khiển led đơn sáng tắt. Chức năng là bus dữ liệu và bus địa chỉ (AD7-AD0) : 8 chân này (hoặc Port 0) còn làm nhiệm vụ lấy dữ liệu từ ROM hoặc RAM ngoại (nếu có kết nối với bộ nhớ ngoài), đồng thời Port 0 còn được dùng để định địa chỉ của bộ nhớ ngoài. Port 1 (P1) Port P1 gồm 8 chân (từ chân 1 đến chân 8), chỉ có chức năng làm các đường xuất/nhập, không có chức năng khác. Port 2 (P2) Port 2 gồm 8 chân (từ chân 21 đến chân 28) có hai chức năng: Chức năng xuất/nhập Chức năng là bus địa chỉ cao (A8-A15): khi kết nối với bộ nhớ ngoài có dung lượng lớn,cần 2 byte để định địa chỉ của bộ nhớ, byte thấp do P0 đảm nhận, byte cao do P2 này đảm nhận. Port 3 (P3) Port 3 gồm 8 chân (từ chân 10 đến 17): Chức năng xuất/nhập Với mỗi chân có một chức năng riêng thứ hai như sau: P3.0(RxD): Ngõ vào nhận dữ liệu nối tiếp P3.1(TxD): Ngõ xuất dữ liệu nối tiếp P3.2(INT0): Ngõ vào ngắt cứng thứ 0 P3.3(INT1): Ngõ vào ngắt cứng thứ 1 P3.4(T0): Ngõ vào của Timer/Counter thứ 0 P3.5(T1): Ngõ vào của Timer/Counter thứ 1 P3.6(WR): Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài P3.7(RD): Ngõ điều khiển đọc dữ liệu từ bộ nhớ bên ngoài P1.0(T2): Ngõ vào của Timer/Counter thứ 2 P1.1(T2X): Ngõ Nạp lại/thu nhận của Timer/Counter thứ 2 Chân RESET (RST) Ngõ vào RST ở chân 9 là ngõ vào Reset dùng để thiết lập trạng thái ban đầu cho vi điều khiển. Hệ thống sẽ được thiết lập lại các giá trị ban đầu nếu ngõ này ở mức 1 tối thiểu 2 chu kì máy. Chân XTAL1 và XTAL2 Hai chân này có vị trí chân là 18 và 19 được sử dụng để nhận nguồn xung clock từ bên ngoài để hoạt động, thường được ghép nối với thạch anh và các tụ để tạo nguồn xung clock ổn định. Chân cho phép bộ nhớ chương trình PSEN PSEN ( program store enable) tín hiệu được xuất ra ở chân 29 dùng để truy xuất bộ nhớ chương trình ngoài. Chân này thường được nối với chân OE (output enable) của ROM ngoài. Khi vi điều khiển làm việc với bộ nhớ chương trình ngoài, chân này phát ra tín hiệu kích hoạt ở mức thấp và được kích hoạt 2 lần trong một chu kì máy Khi thực thi một chương trình ở ROM nội, chân này được duy trì ở mức logic không tích cực (logic 1) (Không cần kết nối chân này khi không sử dụng đến) Chân ALE (chân cho phép chốt địa chỉ-chân 30) Khi Vi điều khiển truy xuất bộ nhớ từ bên ngoài, port 0 vừa có chức năng là bus địa chỉ, vừa có chức năng là bus dữ liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ở chân ALE dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và các đường dữ liệu khi kết nối chúng với IC chốt. Các xung tín hiệu ALE có tốc độ bằng 1/6 lần tần số dao động đưa vào Vi điều khiển, như vậy có thể dùng tín hiệu ở ngõ ra ALE làm xung clock cung cấp cho các phần khác của hệ thống. Ghi chú: khi không sử dụng có thể bỏ trống chân này Chân EA Chân EA dùng để xác định chương trình thực hiện được lấy từ ROM nội hay ROM ngoại. Khi EA nối với logic 1(+5V) thì Vi điều khiển thực hiện chương trình lấy từ bộ nhớ nội Khi EA nối với logic 0(0V) thì Vi điều khiển thực hiện chương trình lấy từ bộ nhớ ngoại 4.2.1.3 Kết nối phần cứng: Kết nối trên hai chân XTAL1 và XTAL2 Mạch dao động được đưa vào hai chân này thông thường được kết nối với dao động thạch anh như sau: Ghi chú: C1,C2= 30pF±10pF (thường được sử dụng với C1,C2 là tụ 33pF) dùng ổn định dao động cho thạch anh. Chu kì máy Gọi fzat là tần số dao động của thạch anh. Đối với 89Sxx có thể sử dụng thạch anh có tần số fzat từ 2MHz đến 33MHz. Chu kì máy là khoảng thời gian cần thiết được qui định để Vi điều khiển thực hiện hoàn thành một lệnh cơ bản. Một chu kì máy bằng 12 lần chu kì dao động của nguồn xung dao động cấp cho nó. Tck = 12.Toc Với: Tck là chu kì máy Toc là chu kì của nguồn xung dao động cấp cho Vi điều khiển Như vậy: Với: Tck là chu kì máy foc là tần số dao động cấp cho Vi điều khiển. Ví dụ: Ta kết nối Vi điều khiển với thạch anh có tần số fzat là 12MHz, thì chu kì máy Tck=12/(12.106)=10-6s =1µs Chính vì lí do thạch anh có tần số fzat là 12MHz tạo ra chu kì máy là 1µs, thuận lợi cho việc tính toán thời gian khi lập trình do đó thạch anh có tần số fzat là 12MHz thường được sử dụng trong thực tế. Khi giao tiếp truyền nối tiếp với máy vi tính dùng thạch anh có tần số fzat là 11.0592MHz. Kết nối chân RESET-chân 9 Việc kết nối chân RESET đảm bảo hệ thống bắt đầu làm việc khi Vi điều khiển được cấp điện, hoặc đang hoạt động mà hệ thống bị lỗi cần tác động cho Vi điều khiển hoạt động trở lại, hoặc do người sử dụng muốn quay về trạng thái hoạt động ban đầu. Vì vậy chân RESET được kết nối như sau: Kết nối các Port với led Các Port khi xuất tín hiệu ở mức logic 1 thường không đạt đến 5V mà dao động trong khoảng từ 3.5V đến 4.9V và dòng xuất ra rất nhỏ dưới 5mA(P0,P2 dòng xuất khoảng 1mA; P1,P3 dòng xuất ra khoảng 1mA đến 5mA) vì vậy dòng xuất này không đủ để có thể làm led sáng Tuy nhiên khi các Port xuất tín hiệu ở mức logic 0 dòng điện cho phép đi qua lớn hơn rất nhiều: Chân Vi điều khiển khi ở mức 0: Dòng lớn nhất qua P0 : -25mA Dòng lớn nhất qua P1,P2,P3 : -15mA Do đó khi kết nối với led hoặc các thiết bị khác Vi điều khiển sẽ gặp trở ngại là nếu tác động làm led sáng khi Vi điều khiển xuất ở mức 1, lúc này dòng và áp ra không đủ để led có thể sáng rõ (led đỏ sáng ở điện áp 1.6V-2.2V và dòng trong khoảng 10mA). Khắc phục bằng cách sau: Cho led sáng khi Vi điều khiển ở mức 0: Px.x thay cho các chân xuất của các Port. Ví dụ: Chân P1.1, P2.0, v.v Khi Px.x ở mức 1 led không sáng Khi Px.x ở mức 0 led sáng Cho led sáng khi Vi điều khiển xuất ở mức 1: Như đã trình bày vì ngõ ra Vi điều khiển khi xuất ở mức 1 không đủ để cho led sáng, để led sáng được cần đặt thêm một điện trở kéo lên nguồn VCC(gọi là điện trở treo). Tuỳ từng trường hợp mà chọn R2 để dòng và áp phù hợp với thiết bị nhận. Khi Px.x ở mức 0, có sự chênh lệch áp giữa nguồn VCC và chân Px.x -dòng điện đi từ VCC qua R2 và Px.x về Mass, do đó hiệu điện thế giữa hai chân led gần như bằng 0, led không sáng. Khi Px.x ở mức 1 (+5V),dòng điện không chạy qua chân Vi điều khiển để về mass được, có sự lệch áp giữa hai chân led, dòng điện trong trường hợp này qua led về Mass do đó led sáng. R2 thường được sử dụng với giá trị từ 4.7KΩ đến 10KΩ. Nếu tất cả các chân trong 1 Port đều kết nối để tác động ở mức cao thì điện trở R2 có thể thay bằng điện trở thanh 9 chân vì nó có hình dáng và sử dụng dễ hơn khi làm mạch điện. Ngoài cách sử dụng điện trở treo, việc sử dụng cổng đệm cũng có tác dụng thay đổi cường độ dòng điện xuất ra khi ngõ ra ở mức 1, cổng đệm xuất ra tín hiệu ở mức 1 với áp và dòng lớn khi có tín hiệu mức 1 đặt ở ngõ vào. Tùy theo yêu cầu của người thiết kế về dòng và áp cần thiết mà chọn IC đệm cho phù hợp. Chẳng hạn từ một ngõ ra P0.0 làm nhiều led sáng cùng lúc thì việc sử dụng IC đệm được ưu tiên hơn. Có thể sử dụng 74HC244 hoặc 74HC245, tuy nhiên 74HC245 được cải tiến từ 74HC244 nên việc sử dụng 74HC245 dễ dàng hơn trong thiết kế mạch. Như vậy, ta sẽ chọn cách này trong thiết kế mạch. 4.2.2: 74HC595: - IC 74LS595 là IC ghi dịch. vào nối tiếp - ra song song. Tức là dữ liệu vào từng bít nhưng xuất ra cả byte. - Một trong những ứng dụng chính là quét cột trong điều khiển LED ma trận mà ta sẽ sử dụng trong đề tài này [...]... } void main() { while(1) { xoa_ram(); for(z=(so_hang-1);z>=0;z ) { nap_ram(z,0); hien_thi(5); for(x=0,y=1;(x