Ngày nay cùng với sự phát triển không ngừng của khoa học kỹ thuật, điện tử đã đang và sẽ phát triển mạnh mẽ, đặc biệt là trong các nhà máy, xí nghiệp để phát triển quá trình tự động hóa cũng như mang lại tiện ích trong sinh hoạt cho con người. Một trong những lĩnh vực phát triển hiện nay đó là ứng dụng vi điều khiển. Dưới sự hướng dẫn của Thầy Nguyễn Duy Thảo, em quyết định thực hiện đề tài: “Thiết kế đồng hồ thời gian thực, có hiển thị nhiệt độ”. Sau thời gian nỗ lực nghiên cứu, được sự chỉ dẫn nhiệt tình của thầy Nguyễn Duy Thảo, em đã hoàn thành đề tài đã chọn. Dưới đây là Bài tiểu luận báo cáo kết quả nghiên cứu của em, tuy đã nổ lực hết sức nhưng trong quá trình thực hiện đề tài, do trình độ hiểu biết còn hạn chế nên đề tài còn nhiều thiếu sót, em rất mong được sự giúp đỡ của Thầy để chúng em hoàn thiện quá trình học tập tốt hơn. Em xin gửi lời cảm ơn đến Thầy Nguyễn Duy Thảo đã giúp đỡ chúng em rất nhiều trong quá trình thực hiện đề tài, em xin chân thành cảm ơn. Khối vi điều khiển sử dụng vi điều khiển AT89S52 điều khiển toàn bộ các hoạt động chính của mạch: nhận tín hiệu điều khiển của khối nút nhấn và tín hiệu từ khối cảm biến nhiệt độ và khối thời gian thực để xuất dữ liệu ra khối hiển thị là LCD. Khối hiển thị sử dụng LCD 20x4 dùng để hiển thị dữ liệu gồm có thứ, ngày, tháng, năm, giờ, phút, giây và nhiệt độ. Khối nút nhấn gồm các nút nhấn để đặt và hiệu chỉnh thời gian. Khối thời gian thực là IC thời gian thực DS1307. Khối cảm biến nhiệt độ là IC cảm biến DS18b20, là loại cảm biến số 1 dây.
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ BÁO CÁO ĐỒ ÁN ĐỀ TÀI: THIẾT KẾ ĐỒNG HỒ THỜI GIAN THỰC VÀ ĐO NHIỆT ĐỘ HIỂN THỊ LCD Giảng viên hướng dẫn Sinh viên thực MSSV LỚP : NGUYỄN DUY THẢO : TRẦN TRUNG HIẾU : 10101043 : 101012B MỤC LỤC LỜI NÓI ĐẦU Ngày với phát triển không ngừng khoa học kỹ thuật, điện tử phát triển mạnh mẽ, đặc biệt nhà máy, xí nghiệp để phát triển trình tự động hóa mang lại tiện ích sinh hoạt cho người Một lĩnh vực phát triển ứng dụng vi điều khiển Dưới hướng dẫn Thầy Nguyễn Duy Thảo, em định thực đề tài: “Thiết kế đồng hồ thời gian thực, có hiển thị nhiệt độ” Sau thời gian nỗ lực nghiên cứu, dẫn nhiệt tình thầy Nguyễn Duy Thảo, em hoàn thành đề tài đã chọn Dưới là Bài tiểu luận báo cáo kết quả nghiên cứu của em, đã nổ lực hết sức trình thực đề tài, trình độ hiểu biết hạn chế nên đề tài nhiều thiếu sót, em mong giúp đỡ Thầy để chúng em hoàn thiện quá trình học tập tốt Em xin gửi lời cảm ơn đến Thầy Nguyễn Duy Thảo giúp đỡ chúng em nhiều trình thực đề tài, em xin chân thành cảm ơn Tp.Hồ Chí Minh ngày tháng 12 năm 2013 CHƯƠNG I: GIỚI THIỆU ĐỀ TÀI I SƠ ĐỒ KHỐI II CHỨC NĂNG SƠ LƯỢC CỦA TỪNG KHỐI Khối vi điều khiển sử dụng vi điều khiển AT89S52 điều khiển toàn hoạt động mạch: nhận tín hiệu điều khiển khối nút nhấn tín hiệu từ khối cảm biến nhiệt độ khối thời gian thực để xuất liệu khối hiển thị LCD Khối hiển thị sử dụng LCD 20x4 dùng để hiển thị liệu gồm có thứ, ngày, tháng, năm, giờ, phút, giây nhiệt độ Khối nút nhấn gồm nút nhấn để đặt hiệu chỉnh thời gian Khối thời gian thực IC thời gian thực DS1307 Khối cảm biến nhiệt độ IC cảm biến DS18b20, loại cảm biến số dây CHƯƠNG I: GIỚI THIỆU PHẦN CỨNG I VI ĐIỀU KHIỂN AT89S52 Giới thiệu sơ lược AT89S52 thuộc họ vi điều khiển MCS-52, có cấu sau: Có 8Kb nhớ FLASH ROM bên để lưu chương trình điều khiển Có 256 Byte RAM nội ghi có chức đặc biệt Có port xuất/nhập bit Có khả giao tiếp truyền liệu nối tiếp Có nguồn ngắt Có timer 16 bit Cho phép lập trình nối chuẩn SPI với điện áp lập trình 5V Có thể giao tiếp với 64Kb nhớ ngoại dùng để lưu chương trình điều khiển Có thể giao tiếp với 64Kb nhớ ngoại dùng để lưu liệu Sơ đồ cấu trúc vi điều khiển AT89S52 Cấu trúc vi điều khiển trình bày hình Các ghi có vi điều khiển bao gồm: Khối ALU kèm với ghi temp1, temp2 ghi trạng thái PSW Bộ điều khiển logic (timing and control) Vùng nhớ RAM nội vùng nhớ Flash Rom lưu trữ chương trình Mạch tạo dao động nội kết hợp với tụ thạch anh bên để tạo dao động Khối xử lý ngắt, truyền liệu, khối timer/counter Thanh ghi A, B, dptr port0, port1, port2, port3 có chốt đệm Thanh ghi đếm chương trình PC (program counter) Con trỏ liệu dptr (data pointer) Thanh ghi trỏ ngăn xếp SP (stack pointer) Thanh ghi lệnh IR (instruction register) Ngoài có số ghi hổ trợ để quản lý địa nhớ ram nội bên ghi quản lý địa truy xuất nhớ bên Sơ đồ khối AT89S52 Sơ đồ chân AT89S52 Vi điều khiển AT89S52 có 40 chân Trong nhiều chân có chức kép, đường hoạt động đường xuất nhập điều khiển IO thành phần bus liệu bus địa liệu giao tiếp với nhớ a Chức port Port 0: dùng làm đường điều khiển (nếu không dùng nhớ mở rộng bên ngoài), bus địa bus liệu (nếu dùng nhớ mở rộng bên ngoài) Port 1: có chân chức năng: chân P1.0 P1.1 phục vụ cho timer T2, chân P1.5, P1.6, P1.7 có chức nạp liệu nối tiếp cho nhớ chương trình Sau nạp chương trình, chân làm xuất nhập liệu để điều khiển Port 2: có chức năng: o Dùng làm đường điều khiển (nếu không dùng nhớ mở rộng bên ngoài) o Dùng làm bus địa cao A8-A15 (nếu dùng nhớ mở rộng bên ngoài) Port 3: có nhiều chức năng: Bit P3.0 P3.1 P3.2 P3.3 P3.4 Tên RxD TxD INT0 INT1 T0 P3.5 T1 P3.6 WR P3.7 RD Chức chuyển đổi Ngõ vào nhận liệu nối tiếp Ngõ xuất liệu nối tiếp Ngõ vào ngắt cứng thứ Ngõ vào ngắt cứng thứ Ngõ vào nhận xung đếm timer/counter thứ Ngõ vào nhận xung đếm timer/counter thứ Tín hiệu điều khiển ghi liệu lên nhớ Tín hiệu điều khiển đọc liệu từ nhớ b Các chân tín hiệu: Tín hiệu PSEN (Program Store Enable) Là tín hiệu ngõ có chức cho phép đọc nhớ chương trình mở rộng Tín hiệu điều khiển ALE/PROG (Address Latch Enable/Program) Dùng làm tín hiệu điều khiển IC chốt để giải đa hợp đường địa liệu, nhận xung từ bên để lập trình lưu mã vào nhớ Flash Rom chế độ lập trình song song Tín hiệu EA/VPP EA=1(+5V): thi hành chương trình từ nhớ nội EA=0(0V): thi hành chương trình từ nhớ ngoại Tín hiệu RST Khi cấp điện cho hệ thống nhấn reset mạch reset vi điều khiển II GIỚI THIỆU IC THỜI GIAN THỰC DS1307 DS1307 chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm thời gian thực dùng với ý nghĩa thời gian tuyệt đối mà người sử dụng, tinh giây, phút, DS1307 sản phẩm Dallas Semiconductor (một công ty thuộc Maxim Integrated Products) Chip có ghi 8-bit chứa thời gian là: giây, phút, giờ, thứ (trong tuần), ngày, tháng, năm Ngoài DS1307 có ghi điều khiển ngõ phụ 56 ghi trống dừng RAM Sơ đồ chân Các chân DS1307 mô tả sau: X1 X2: ngõ kết nối với thạch anh 32.768KHz làm nguồn tạo dao động cho chip VBAT: cực dương nguồn pin 3V nuôi chip GND: chân mass chung cho pin 3V Vcc Vcc: nguồn cho giao diện I2C, thường 5V dùng chung với vi điều khiển SQW/OUT: ngõ phụ tạo xung vuông (Square Wave / Output Driver), tần số xung tạo lập trình Như chân không liên quan đến chức DS1307 đồng hồ thời gian thực SCL SDA đường giao xung nhịp liệu giao diện I2C Cấu tạo bên DS1307 bao gồm số thành phần mạch nguồn, mạch dao động, mạch điều khiển logic, mạch giao diện I2C, trỏ địa ghi (hay RAM) Sử dụng DS1307 chủ yếu ghi đọc ghi chip Vì có vấn đề cấu trúc ghi cách truy xuất ghi thông qua giao diện I2C Như trình bày, nhớ DS1307 có tất 64 ghi 8-bit đánh địa từ đến 63 (từ 00H đến 3FH theo hệ HexaDecimal) Tuy nhiên, thực chất có ghi đầu dùng cho chức “đồng hồ” (RTC) lại 56 ghi bỏ trống dùng chứa biến tạm RAM muốn Bảy ghi chứa thông tin thời gian đồng hồ bao gồm: giây (SECONDS), phút (MINUTES), (HOURS), thứ (DAY), ngày (DATE), tháng (MONTH) năm (YEAR) Việc ghi giá trị vào ghi tương đương với việc “cài đặt” thời gian khởi động cho RTC Việc đọc giá trị từ ghi đọc thời gian thực mà chip tạo Ví dụ, lúc khởi động chương trình, ghi vào ghi “giây” giá trị 42, sau 12s đọc ghi này, thu giá trị 54 Thanh ghi thứ (CONTROL) ghi điều khiển xung ngõ SQW/OUT (chân 6) Tuy nhiên, không dùng chân SQW/OUT nên có thề bỏ qua ghi thứ 10 SDA=1; delay(1); SCL=0; return gt; } //Ham ghi gia tri vao dia chi void ghi(unsigned char add,unsigned char gt) { start(); truyen(0xd0); //d0 la dia chi nha san xuat qui dinh truyen(add); //add:dia chi.gt:dulieu 01 la phut truyen(gt); stop(); } // Ham doc gia tri tu dia chi unsigned char doc(unsigned char add) { unsigned char value; start(); truyen(0xd0); truyen(add); start(); truyen(0xd1);//d1 la thong bao se doc value=nhan(); stop(); return value; 33 } void khoitao_DS() { unsigned char check; check=doc(0x08); if(check!='c') { ghi(0x08,'c'); ghi(0x00,(dec_bcd(30))&0x7F); ghi(0x01,(dec_bcd(35))&0x7F); ghi(0x02,(dec_bcd(14))&0x3F); ghi(0x03,dec_bcd(4)); ghi(0x04,dec_bcd(1)); ghi(0x05,dec_bcd(5)); ghi(0x06,dec_bcd(13)); } } void docgio() { giay =bcd_dec(doc(0x00)); phut =bcd_dec(doc(0x01)); gio =bcd_dec(doc(0x02)); thu =bcd_dec(doc(0x03)); =bcd_dec(doc(0x04)); thang=bcd_dec(doc(0x05)); 34 nam =bcd_dec(doc(0x06)); } void tach() { s1=giay/10+48;s2=giay%10+48;//giay m1=phut/10+48;m2=phut%10+48;//phut h1=gio/10+48;h2=gio%10+48; //gio day=thu+48; ng1=ngay/10+48;ng2=ngay%10+48; th1=thang/10+48;th2=thang%10+48; n1=nam/10+48;n2=nam%10+48; } void hienthi() { docgio(); tach(); gotolcd(1,1); if(thu!=7) { lcdstring("Thu "); writelcd(1,day+1); lcdstring(" "); } else lcdstring("CNHAT "); writelcd(1,ng1); writelcd(1,ng2); lcdstring("/"); 35 writelcd(1,th1); writelcd(1,th2); lcdstring("/"); lcdstring("20"); writelcd(1,n1); writelcd(1,n2); gotolcd(2,1); lcdstring("Time: "); writelcd(1,h1); writelcd(1,h2); lcdstring(":"); writelcd(1,m1); writelcd(1,m2); lcdstring(":"); writelcd(1,s1); writelcd(1,s2); lcdstring(" "); } void hienngay() { tach(); gotolcd(2,1); if(thu!=7) { lcdstring("Thu "); writelcd(1,day+1); lcdstring(" "); } else lcdstring("CNHAT "); writelcd(1,ng1); writelcd(1,ng2); 36 lcdstring("/"); writelcd(1,th1); writelcd(1,th2); lcdstring("/"); lcdstring("20"); writelcd(1,n1); writelcd(1,n2); } void hiengio() { tach(); gotolcd(2,1); lcdstring("Time: "); writelcd(1,h1); writelcd(1,h2); lcdstring(":"); writelcd(1,m1); writelcd(1,m2); lcdstring(":"); writelcd(1,s1); writelcd(1,s2); } void caidat() { switch(mode) { case 1: tang0=tang1;tang1=tang; giam0=giam1;giam1=giam; if(tang0==0 && tang1==1) { gio=gio+1; 37 if(gio==24) gio=0; } if(giam0==0 && giam1==1) { gio=gio-1; if(gio