ĐỒNG hồ vạn NIÊN DÙNG PIC (có code và layout) ........................................... ĐỒNG hồ vạn NIÊN DÙNG PIC (có code và layout) ........................................... ĐỒNG hồ vạn NIÊN DÙNG PIC (có code và layout) ........................................... ĐỒNG hồ vạn NIÊN DÙNG PIC (có code và layout) ........................................... ĐỒNG hồ vạn NIÊN DÙNG PIC (có code và layout) ...........................................
ĐỒ ÁN Trang 1/26 ĐỒ ÁN ĐỒNG HỒ VẠN NIÊN Đồng Hồ Vạn Niên ĐỒ ÁN Trang 2/26 CHƯƠNG TỔNG QUAN VỀ ĐỒNG HỒ VẠN NIÊN 1.1 Giới thiệu - Ngày nay, với phát triển khoa học công nghệ, đặc biệt ngành điện tử ứng dụng nhiều công nghiệp ứng dụng rộng rãi thiết bị, sản phẩm phục vụ cho nhu cầu sinh hoạt ngày người máy giặt, đồng hồ hẹn giờ…đã giúp cho đời sống ngày đại tiện nghi - Đề tài “Đồng hồ vạn niên” nhằm đáp ứng nhu cầu ham muốn học hỏi thân, góp phần nâng cao giá trị mạch điện tử đời sống người 1.2 Mục đích nghiên cứu Ứng dụng kỹ thuật vi điều khiển, áp dụng kiến thức học vi điều khiển để tạo đồng hồ vạn niên 1.3 Đối tượng nghiên cứu Vi điều khiển PIC, IC thời gian thực, LED đoạn, cảm biến nhiệt độ 1.4 Phạm vi nghiên cứu Đổng hồ thời gian thực hiển thị ngày, tháng, năm (âm lịch, dương lịch) nhiệt độ khoảng từ 20 oC đến 40 oC Đổng hồ thời gian thực sử dụng cho hộ gia đình 1.5 Dự kiến kết Sản phẩm có đồng hồ thời gian thực có khả hiển thị ngày, tháng, năm (âm lịch,dương lịch), giờ, phút đọc nhiệt độ phòng hiển thị lên LED đoạn, cài đặt ngày, tháng, năm (dương lịch), giờ, phút nút nhấn THIẾT KẾ VÀ THI CÔNG 1.6 Sơ đồ khối hệ thống Đồng Hồ Vạn Niên ĐỒ ÁN Trang 3/26 Hình 2-1: Sơ đồ khối hệ thống 1.1.1 Khối nguồn - Chức năng: cung cấp nguồn cho hệ thống - Linh kiện sử dụng LM2596T-5V - LM2596T-5V IC ổn áp với: Điện áp đầu vào lên đến 40 V Điện áp đầu 1.2 V – 37 V Dòng điện đầu A Tần số xung 150 KHz Đồng Hồ Vạn Niên ĐỒ ÁN Trang 4/26 Hình 2-2: LM2596T [1] 1.1.2 Khối thời gian thực - Chức năng: Đếm thời gian thực trả thời gian bao gồm: thứ, ngày, tháng, năm, giờ, phút, giây - Linh kiện sử dụng: DS1307 - Các thông số kỹ thuật: DS1307 chip đồng hồ thời gian thực Hai mode DS1307 Data Read Data Write DS1307 có ghi đầu dùng cho chức “đồng hồ”, với ghi chứa thông tin thời gian đồng hồ bao gồm: thứ, giờ, phút, giây, ngày, tháng, năm Sử dụng nguồn Pin V bên điện Điện áp hoạt động: V Đồng Hồ Vạn Niên ĐỒ ÁN Trang 5/26 Hình 2-3: DS1307 sơ đồ chân[2] Bảng 2-1:Giải thích chân DS1307 X1, X2 đầu vào dao động cho DS1307 Cần dao động thạch anh 32.768 KHz VBAT Cực dương nguồn pin V nuôi chip GND Chân mass chung cho pin V VCC Nguồn cho giao diện I2C thường V dùng chung với vi điều VCC khiển SQW/OUT Ngõ phụ tao xung vuông SCL, SDA bus liệu DS1307, tin truyền ghi truyền qua đường Hình 2-4: Sơ đồ nguyên lý DS1307 Đồng Hồ Vạn Niên ĐỒ ÁN Trang 6/26 Hình 2-5: PCB DS1307 1.1.3 Khối hiển thị - Chức năng: Hiển thị thứ, ngày, tháng, năm, giờ, phút, giây - Linh kiện sử dụng: LED đoạn - Sử dụng module gồm led đoạn đơn 0.56 inch nối chung chân từ a tới h - Kích thước module 2x5 cm Hình 2-6: LED đoạn [3] - Sơ đồ nguyên lý: Đồng Hồ Vạn Niên ĐỒ ÁN Trang 7/26 Hình 2-7: Sơ đồ nguyên lý module LED đoạn - Sơ đồ mạch in: Hình 2-8: PCB LED đoạn 1.1.4 Khối cảm biến nhiệt độ - Chức năng: Đo nhiệt độ gửi tín hiệu dạng tín hiệu tương tự cho khối vi điều khiển Đồng Hồ Vạn Niên ĐỒ ÁN Trang 8/26 Linh kiện sử dụng: LM35 cảm biến nhiệt độ analog gồm chân VCC, GND, OUT Các thông số kỹ thuật: Điện áp đầu vào từ V đến 30 V Sai số 0.5 oC nhiệt độ 25 oC Giới hạn đo từ -55 oC đến 150 oC Dòng tiêu thụ thấp 60 µA Độ nhạy 10 mV/ oC Hình 2-9: LM35 [4] 1.1.5 Khối vi điều khiển - Chức năng: Xử lý toàn hoạt động hệ thống bao gồm: đọc thời gian từ khối thời gian thực hiển thị lên LED đoạn, đọc tín hiệu từ nút nhấn cài đặt thời gian cho khối thời gian thực, đọc nhiệt độ hiển thị LED đoạn - Linh kiện sử dụng: PIC16F877A - Các thơng số kỹ thuật PIC16F877A: port A, B, C, D, E với 40 chân xuất nhập timer: timer 0, timer 1, timer chuyển đổi ADC 10 bit kênh Chuẩn giao tiếp nối tiếp USART Đồng Hồ Vạn Niên ĐỒ ÁN Trang 9/26 CCP (Capture/Compare/PWM) Bộ nhớ Flash 8KB Bộ nhớ liệu 368B Bộ nhớ EEPROM 256B 15 nguồn ngắt (ngắt timer, ngắt USART, ngắt ngồi, ) Hình 2-10: PIC16F877A sơ đồ chân [5] - Sơ đồ nguyên lý: Đồng Hồ Vạn Niên ĐỒ ÁN Trang 10/26 Hình 2-11: Sơ đồ nguyên lý PIC16F877A - Sơ đồ mạch in: Hình 2-12: PCB PIC16F877A 1.1.6 Khối nút nhấn - Chức năng: cài đặt thời gian ngày, tháng, năm, giờ, phút, giây Hình 2-13: Nút nhấn chân [6] Đồng Hồ Vạn Niên ĐỒ ÁN Trang 11/26 1.7 Thiết kế mơ hình Hình 2-14: Hộp chứa mơ hình Hình 2-15: Mơ hình thực tế Đồng Hồ Vạn Niên ĐỒ ÁN Trang 12/26 CHƯƠNG GIẢI THUẬT VÀ ĐIỀU KHIỂN 1.8 Hoạt động hệ thống Mơ hình sử dụng LED đoạn hiển thị thời gian bao gồm: ngày, tháng, năm (dương lịch, âm lịch), giờ, phút, nhiệt độ mơi trường Có thể cài đặt thời gian nút nhấn 1.9 Lưu đồ giải thuật Hình 3-1: Lưu đồ giải thuật chương trình Đồng Hồ Vạn Niên ĐỒ ÁN Trang 13/26 Hình 3-2: Lưu đồ giải thuật chương trình cài đặt thời gian tính tốn âm lịch Trong đó: - Ngày âm = ngày dương + ngày âm ngày dương lịch – Tháng âm = tháng âm ngày dương lịch a: Số ngày âm lịch tháng dương lịch CHƯƠNG 1.10 Tiến trình thực nghiệm Đồng Hồ Vạn Niên THỰC NGHIỆM ĐỒ ÁN Trang 14/26 - Bước 1: Cấp nguồn đo ngõ mạch nguồn - Bước 2: Tiến hành cài đặt thời gian cho đồng hồ thời gian thực - Bước 3: Sau ngày, quan sát thời gian LED đoạn so sánh với đồng hồ khác máy tính, đồng hồ đeo tay - Bước 4: Tiến hành quan sát nhiệt độ so sánh với nhiệt kế chuẩn khác 1.11 - Kết thực nghiệm Bước 1: Sau cấp nguồn, ta đo 5.02 V - Bước 2: Cài đặt thời gian theo đồng hồ chuẩn Hình 4-1: Cài đặt thời gian cho đồng hồ - Bước 3: Quan sát thời gian LED đoạn so sánh với đồng hồ máy tính, thời gian bị lệch phút Đồng Hồ Vạn Niên ĐỒ ÁN Trang 15/26 Hình 4-2: Hiển thị thời gian đồng hồ - Bước 4: Nhiệt độ đồng hồ vạn niên giống với nhiệt kế Hình 4-3: Hiển thị nhiệt độ đồng hồ 1.12 Kết luận thực nghiệm Từ kết thực nghiệm, ta thấy mơ hình lịch vạn niên hoạt động tương đối tốt, đạt yêu cầu ban đầu Đồng Hồ Vạn Niên ĐỒ ÁN Trang 16/26 CHƯƠNG 1.13 - KẾT LUẬN Ưu điểm Mạch chạy tương đối ổn định, gọn nhẹ, đơn giản so với việc sử dụng IC số - Thời gian lưu bị điện - Mạch ứng dụng đời sống 1.14 - Nhược điểm Còn sai số thời gian Sai số 0.069 % Mạch sử dụng nhiều LED đoạn 1.15 Hướng phát triển Thêm tính như: - Báo thức giọng nói, hát - Tự động cập nhật thời gian qua mạng Đồng Hồ Vạn Niên ĐỒ ÁN Trang 17/26 TÀI LIỆU THAM KHẢO Tiếng Việt: [2] Điện Tử Máy Tính, http://www.dientumaytinh.com/ [4] TAE shop, http://tae.vn Tiếng Anh: [1] AliExpress, https://vi.aliexpress.com [3] YEInternational, https://www.yeint.com [5] Ktechnics systems, https://ktechnics.com [6] Amazon, https://www.amazon.co.uk Đồng Hồ Vạn Niên ĐỒ ÁN Trang 18/26 PHỤ LỤC Chương trình vi điều khiển #include #device adc=10 #fuses HS, NOWDT, NOPUT #use delay(clock=20M) #define RTC_SCL PIN_e0 #define RTC_SDA PIN_e1 #include #define xuat_led output_d #define led1 pin_b0 #define led2 pin_b1 #define led3 pin_b2 #define led4 pin_b3 #define led5 pin_a2 #define led6 pin_a3 #define led7 pin_a4 #define led8 pin_a5 #define led9 pin_c0 #define led10 pin_c1 #define led11 pin_c2 #define led12 pin_c3 #define ok_bt !input(pin_b4) #define dec_bt !input(pin_b5) #define inc_bt !input(pin_b6) #define cancel_bt !input(pin_b7) #define offset 10 const unsigned int8 db_2017[3][3]={{12,8,30},{13,9,29},{14,10,30}}; Đồng Hồ Vạn Niên ĐỒ ÁN Trang 19/26 unsigned int8 l1,l2,l3,l4,l5,l6,l7,l8,l9,l10,l11,l12; const unsigned int8 led[]={0b00000011, 0b10011111, 0b00100101, 0b00001101, 0b10011001, 0b01001001, 0b01000001, 0b00011111, 0b00000001, 0b00001001, 255,//10-khoang trang 0b11111101,//11- 0b11100011,//12-L 0b00010001,//13-A 0b01110011,//14-r 0b00010011,//15-N 0b10000011,//16-U 0b10010001,//17-H 0b11100001,//18-t 0b00111001,//19-o 0b01100011,//20-C 0b10000101,//21-d 0b10001001,//22-y 0b01100001,//23-E 0b01110011,//24 0b11000111//25-u }; unsigned int8 ngay_duong, thang_duong, ngay_am, thang_am, nam, gio, phut, giay; unsigned int8 ngaytmp, thangtmp, namtmp, giotmp, phuttmp; unsigned int8 tmp, buoc=0; unsigned int16 n=0; void out_led(int1 dot) { output_low(led1); xuat_led(led[l1]); delay_us(100); xuat_led(255); output_high(led1); output_low(led2); xuat_led(led[l2]); delay_us(100); xuat_led(255); output_high(led2); Đồng Hồ Vạn Niên ĐỒ ÁN Trang 20/26 output_low(led3); xuat_led(led[l3]); delay_us(100); xuat_led(255); output_high(led3); output_low(led4); xuat_led(led[l4]); delay_us(100); xuat_led(255); output_high(led4); output_low(led5); xuat_led(led[l5]); delay_us(100); xuat_led(255); output_high(led5); output_low(led6); xuat_led(led[l6]); delay_us(100); xuat_led(255); output_high(led6); output_low(led7); xuat_led(led[l7]); delay_us(100); xuat_led(255); output_high(led7); output_low(led8); xuat_led(led[l8]); delay_us(100); xuat_led(255); output_high(led8); output_low(led9); xuat_led(led[l9]); delay_us(100); xuat_led(255); output_high(led9); output_low(led10); xuat_led(led[l10]&(0b11111110 | !dot)); delay_us(100); xuat_led(255); output_high(led10); output_low(led11); xuat_led(led[l11]); delay_us(100); xuat_led(255); output_high(led11); output_low(led12); xuat_led(led[l12]); delay_us(100); xuat_led(255); output_high(led12); } void duong_lich() { l1=5;//S l2=0;//0 l3=12;//L l4=13;//A l5=ngay_duong/10; l6=ngay_duong%10;l7=11;//l8=thang_duong/10; l9=thang_duong%10;l10=11;//l11=nam/10; l12=nam%10; } void am_lich() { ngay_am=ngay_duong+db_2017[thang_duong-offset][0]-1; thang_am=db_2017[thang_duong-offset][1]; if(ngay_am>db_2017[thang_duong-offset][2]) { ngay_am=ngay_am-db_2017[thang_duong-offset][2]; thang_am=db_2017[thang_duong-offset][1]+1; } l1=12;//L l2=16;//u Đồng Hồ Vạn Niên ĐỒ ÁN Trang 21/26 l3=15;//n l4=13;//A l5=ngay_am/10; l6=ngay_am%10;l7=11;//l8=thang_am/10; l9=thang_am%10; l10=10; l11=10; l12=10; } void gio_phut() { l1=17;//H l2=0;//0 l3=16;//U l4=14;//r l5=10;l6=10;l7=10;l8=10; l9=gio/10; l10=gio%10; l11=phut/10; l12=phut%10; } void nhiet_do() { float val; unsigned int8 nd; val=read_adc(); val=val/2.046; nd=val; l1=10;l2=10; l3=18;//t l4=19;//o l5=10; l6=nd/10; l7=nd%10; l8=10; l9=19;//o l10=20;//C l11=10; l12=10; } Đồng Hồ Vạn Niên ĐỒ ÁN Trang 22/26 void hien_thi() { if(n==0) { ds1307_get_time(gio,phut,giay); ds1307_get_date(tmp,ngay_duong,thang_duong,nam); ngaytmp=ngay_duong, thangtmp=thang_duong, namtmp=nam; giotmp=gio, phuttmp=phut; } if(n