có sơ đồ nguyên lý, sơ đồ khối và lưu đồ giải thuật, mạch in và code đầy đủ cho mạch thiết kế mạch đồng hồ điện tử dùng VĐK hiện thị LCD có tùy chỉnh ...............................................................................................................................................................
Trang 1MẠCH ĐỒNG HỒ ĐIỆN TỬ
CHƯƠNG 1: TỔNG QUAN VỀ MẠCH ĐỒNG HỒ ĐIỆN TỬ
1.1 GIỚI THIỆU VỀ ĐỀ TÀI……… 1
1.2 Sơ đồ khối……… 2
Chương 2 Lựa chọn linh kiện và thiết kế mạch………3
2.1 Lựa chọn linh kiện……… 3
2.1.1 Vi điều khiển pic 16f877a……… 3
2.1.2 Màn hình LCD 16*2……… 7
2.1.3 IC thời gian thực……… 9
2.1.4 Các linh kiện khác……… 12
2.2 Thiết kế các khối mạch……… 12
2.2.1 Khối nguồn 5v……… 12
2.2.2 Khối vi điều khiển 16f 877a……… 14
2.2.3 Khối nút nhấn……… 15
2.2.4 Khối thời gian thực DS 1307……… 16
2.2.5 Khối hiện thị LCD……… 17
2.2.6 Khối còi báo……… 18
Chương 3: Thiết kế nguyên lý và thi công mạch……… 19
3.1 Thiết kế mạch nguyên lý……… 19
Trang 23.2 Thiết kế mạch in và thi công mạch……… 19
Chương 4 Lưu đồ giải thuật và kết luận…….22
4.1 Lưu đồ giải thuật……… 22
4.2 Kết luận……… 23
4.3 Ứng đụng phát triển……… 23
Chương 5: Chương Trình……… 24
Trang 3CHƯƠNG 1: TỔNG QUAN VỀ MẠCH ĐỒNG HỒ ĐIỆN TỬ
1.1 GIỚI THIỆU VỀ ĐỀ TÀI
Mạch đồng hồ điện tử sử dụng IC thời gian thực DS1307 hiển thị lên LCD ngày giờ thực
Ưu điểm của mạch là có thể chạy đúng ngày giờ dù đã ngắt nguồn, thêm vào đó là mạch có phần báo thức giúp chúng ta có thể kiểm soát và sử dụng thời gian 1 cách hợp lý và hiệu quả nhất
Mạch sử dụng vi điều khiển PIC16F877A là khối xử lý trung tâm Hiển thị lên LCD thời gian thực với bộ thời gian thực DS1307 Đồng thời có còi báo khi đến thời gian cài đặt, với 4 nút nhấn để thay đổi thời gian
1.2 SƠ ĐỒ KHỐI
KHÔI IC DS1307 ́ KHÔI BAO TH ́ ́ ƯC ́ KHÔI VI X ́ Ư LÝ ̉ KHÔI HIÊN THI LCD ́ ̉ ̣ KHÔI NUT NHÂN ́ ́ ́
Trang 4Hình 1: Sơ đồ khối mạch.
Mô tả các khối:
+ Khối nút nhấn gồm 4 nút nhấn để đặt, hiệu chỉnh và hẹn thời gian
+ Khối hiển thị là LCD
+ Khối vi sử lý là khối dùng vi điều khiển PIC16F877A đ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 điều chỉnh nút nhấn và tìn hiệu của từ con thời gian thực xuất ra khối hiển thị và chuông báo
+ Khối còi báo là một chuông hoặc còi điện để báo hẹn giờ
+ Khối RTC thời gian thực là DS1307
Trang 5CHƯƠNG 2 : LỰA CHỌN LINH KIỆN VÀ THIẾT KẾ MẠCH.
2.1 LỰA CHỌN LINH KIỆN
2.1.1 VI ĐIỀU KHIỂN PIC16F877A
PIC là vi điều khiển do hãng General Intrusment đặt tên viết tắt là “Programable Intellegent Computer”, tạm dịch là “ Máy tính thông minh khả trình”
Đây là vi điều khiển thuộc họ PIC16Fxxx có độ dài 14 bit với tập lệnh gồm 35 lệnh Mỗi lệnh đều được thực thi trong một chu kì xung clock Tốc độ hoạt động tối đa cho phép là 20MHz với một chu kì lệnh là 200ns Bộ nhớ chương trình 8Kx14bit,
bộ nhớ dữ liệu 368×8 byte RAM và bộ nhớ dữ liệu EEPROM với dung lượng 256×8 byte Số PORT I/O là 5 với 33 pin I/O
Trang 6Hình 2: Vi điều khiển PIC16F877ACác đặc tính ngoại vi bao gồm các khối chức năng sau:
– Timer0: Bộ đếm 8 bit với bộ chia tần số 8 bit
– Timer1: Bộ đếm 16 bit với bộ chia tần số, có thể thực hiện chức năng đếm dựa vào xung clock ngoại vi ngay khi vi điều khiển hoạt động ở chế độ sleep
PIC16F877A:
Trang 7Hình 3: Sơ đồ chân của PIC16F877A
Chức năng các chân của vi điều khiển PIC16F877A:
- Chân OSC1/CLK1(13): Ngõ vào kết nối với dao động thạch anh hoặc ngõvào nhận xung clock từ bên ngoài
- Chân OSC2/CLK0(14): Ngõ ra dao động thạch anh hoặc ngõ cấp xungclock
- Chân MCLR /Vpp(1) Có 2 chức năng:
MCLR : Ngõ vào reset tích cực ở mức thấp
Vpp: Ngõ vào nhận điện áp lập trình khi lập trình cho pic
- Chân RA0/AN0(2), RA1/AN1(3), RA2/AN2 có 2 chức năng:
RA0, 1, 2: Ngõ vào xuất/nhập số
AN0, 1, 2: Ngõ vào tương tự của kênh 0, 1, 2
- Chân RA2/AN2/VREF-/VREF+(4): xuất nhập số/ ngõ vào tương tự kênhthứ 2/ ngõ vào điện áp chuẩn thấp bộ AD/ ngõ vào điện áp chuẩn cao bộ AD
- Chân RA3/AN3/VREF+(5): xuất nhập số/ ngõ vào kênh tương tự 3/ ngõ vàođiện áp chuẩn(cao) của bộ AD
- Chân RA4/TOCK1/C1OUT(6): xuất nhập số/ ngõ vào xung clock bên ngoài
Trang 8- Chân RB6/PGC(39): xuất nhập số/ mạch gỡ rối và xung clock lập trình ICSP.
- Chân RB7/PGD(40): xuất nhập số/ mạch gỡ rối và dữ liệu lập trình ICSP
- Chân RC0/T1OCO/T1CKI(15): xuất nhập số/ ngõ vào dao động Timer1/ngõ vào xung clock bên ngoài Timer1
- Chân RC1/T1OSI/CCP2(16): xuất nhập số/ ngõ vào bộ dao động Timer1/ngõ vào capture2, ngõ ra compare2, ngõ ra PWM2
- Chân RC2/CCP1(17): xuất nhập số/ ngõ vào Capture1, ngõ ra Compare1,ngõ ra PWN1
- Chân RC3/SCK/SCL(18): xuất nhập số/ ngõ vào xung clock nối tiếp đồng
bộ, ngõ ra chế độ SPI/ ngõ vào xung clock đồng bộ, ngõ ra chế độ I2C
- Chân RC4/SDI/SDA(23): xuất nhập số/ dữ liệu vào SPI/ xuất nhập I2C
- Chân RC5/SDO(24): xuất nhập số/ dữ liệu ra SPI
- Chân RC6/TX/CK(25): xuất nhập số/ truyền bất đồng bộ USART/ xungđồng bộ USART
- Chân RC7/RX/DT(26): xuất nhập số/ nhận bất đồng bộ USART
- Chân RD0¸ 7/PSP0¸ 7(19¸ 30): xuất nhập số/ dữ liệu port song song
- Chân RE0/ RD /AN5(8): xuất nhập số/ điều khiển port song song/ ngõ vàotương tự kênh 5
- Chân RE1/ WR /AN6(9): xuất nhập số/ điều khiển ghi port song song/ ngõvào tương tự kênh 6
- Chân RE2/ CS /AN7(10): xuất nhập số/ chân chọn lựa điều khiển port
Trang 9song song/ ngõ vào tương tự kênh 7.
- Chân VDD(11, 32) và VSS(12, 31): là chân nguồn của Pic
- 40 chân trên được chia thành 5 PORT, 2 chân cấp nguồn, 2 chân GND, 2 chânthạch anh và một chân dùng để RESET vi điều khiển
- 5 port của PIC16F877A bao gồm :
Trang 10Hình 4: Sơ đồ khối PIC16F877A 2.1.2 Màn hình LCD16x2
Trang 11Hiện nay trên thị trường có rất nhiều loại màn hình LCD, tùy vào nhu cầu sử dụng vào yêu cầu của mỗi người mà ta chọn loại LCD cho phù hợp Ở mạch đồng hồ điện tử ta chon LCD16x2.
Sau đây là hình ảnh thực tế của LCD16x2:
Hình 5: Màn hình LCD16x2
LCD16x2 đã được tích hợp sẵn các chân để người dùng có thể dễ dàng sử dụng, sau đây là sơ đồ các chân của LCD:
Hình 6: Sơ đồ các chân của LCD16x2
Chức năng từng chân của LCD16x2
Trang 12Chân 1 : VCC Chân nối đất cho LCD, khi thiết kế mạch ta nối chân này với GND của mạch điều khiển.
Chân 2 : VDD Chân cấp nguồn cho LCD, khi thiết kế mạch ta nối chân này với VCC = 5v của mạch điều khiển
Chân 3 : VEE Điều chỉnh độ tương phản của LCD
Chân 4 : RS Chân chọn thanh ghi (Register select)
Chân 5 : RW Chân chọn chế độ đọc/ghi (Read/Write) Nối chân RW với logic “0”
để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD ở chế độ đọc
Chân 6 : E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân E
DB0-Ở chế độ ghi: Dữ liệu ở bus sẽ được LCD chuyển vào(chấp nhận) thanh ghi bên trong nó khi phát hiện một xung (high-to-low transition) của tín hiệu chân E
Ở chế độ đọc: Dữ liệu sẽ được LCD xuất ra DB0-DB7 khi phát hiện cạnh lên to-high transition) ở chân E và được LCD giữ ở bus đến khi nào chân E xuống mức thấp
(low-Chân 7 – 14 : DB0 - DB7 có 2 chế độ sử dụng 8 đường bus này :
Chế độ 8 bit : Dữ liệu được truyền trên cả 8 đường từ DB0-DB7, với bit MSB là bit DB7
Chế độ 4 bit : Dữ liệu được truyền trên 4 đường từ DB4 tới DB7, bit MSB là DB7.Chân 15 : A Nguồn dương cho đèn nền
Chân 16 : K GND cho đèn nền
2.1.3 IC THỜI GIAN THỰC DS1307
Trang 13DS1307 là chip thời gian thực hay RTC (Read time clock) Chip này có 7 thanh ghi
8 bit mỗi thanh ghi này chứa : Thứ , ngày, tháng, năm, giờ , phút, giây Đây là một
IC tích hợp cho thời gian bởi vì tính chính xác về thời gian tuyệt đối cho thời gian : Thứ, ngày,tháng, năm, giờ, phút, giây DS1307 là chế tạo bởi Dallas Ngoài
ra DS1307 còn chứa 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống các thanh ghi này có thể dùng như là RAM DS1307 được đọc thông qua chuẩn truyền thông I2C nên do đó để đọc được và ghi từ DS1307 thông qua chuẩn truyền thông này Nên cấu tạo bên ngoài nó rất đơn giản
Hình 7: IC thời gian thực DS1307.
Trang 14+ Vcc là nguồn cho giao tiếp I2C Điện áp cung cấp là 5V chuẩn và được dùng chung với vi xử lý Nếu mà Vcc không có mà Vbat có thì DS1307 vẫn hoạt động bình thường nhưng mà không ghi và đọc được dữ liệu.
+ GND là nguồn Mass chung cho cả Vcc và Vbat
+ SQW/OUT là một ngõ ra phụ tạo xung dao động (xung vuông) Chân này tôi nghĩ không ảnh hưởng đến thời gian thực nên chúng ta không sử dụng chân này trong thời gian thực và bỏ trống chân này!
+ SCL và SDA là hai bus dữ liệu của DS1307 Thông tin truyền và ghi đều được truyền qua 2 đường truyền này theo chuẩn I2C
Hình 9: Sơ đồ nguyên lý của IC DS1307
2.1.4 CÁC LINH KIỆN KHÁC
Trang 15Ngoài những linh kiện chính ở trên, mạch cần them những linh kiện khác sau đây:-Còi báo 5v.
-Biến trở 10 kOhm
-LM7805
-Tụ 104pF,33pF,10uF,100uF
-Điện trở 330 Ohm, 10 kOhm
-Nút nhấn 2 chân
Trang 16Hình 10: Khối nguồn 5V
Hình 11: Sơ đồ các chân của LM7805.
Thông số kỹ thuật của LM7805:
- Công suất cực đại:2W Dòng cực đại 1A
- Một số điểm lưu ý khác:
- Áp lối ra có thể đạt giá trị nào đó trong khoảng 4.8 5.2 V Nếu đo được áp là 4.85V thì không nên nói là IC bị hỏng 7805 là ic ổn áp 5V cho ra điện áp 5VDC, 78xx là loại dòng IC dùng để ổn định điện áp dương đầu ra với điều kiện đầu vào luôn luôn lớn hơn đầu ra 3V
2.2.2 KHỐI VI ĐIỀU KHIỂN PIC16F877A
Trang 17Sử dụng vi xử lý PIC16F877A Với thạch anh giao động 20Mhz để tạo xung nhịp cho PIC Nút nhấn K1 reset chip Tụ C6 10u làm tụ Reset tự động cho vi xử lý khi mới cấp nguồn R7 10k là trở kéo cho chân Reset.
Sử dụng các chân RB0-RB3 làm ngõ vào của 4 nút điều chỉnh Các chân RD4-RD7 kết nối đến DATA của LCD ở chế độ 4 bit, Chân RB6 làm chân RS chân RB7 làm chân E điều khiển cho LCD 2 chân RC3 (SCL) và RC4 (SDA) được hỗ trợ chuẩn giao tiếp I2C dùng để giao tiếp với DS1307 Chân RE0 được dùng để kích hoạt còi báo Nguồn cấp chính từ khối nguồn 5V
Hình 12: Khối vi điều khiển 2.2.3 KHỐI NÚT NHẤN
Sử dụng các nút nhấn một tiếp điểm để tạo mức thay đổi logic giúp vi điều khiển có thể hiểu đươc khi ta tác động nhấn nút Các điện trở R4 R5 R6 R8 là các điện trở
Trang 18kéo lên để xác định mức cao khi không nhấn nút Các nút nhân K2,K3,K4,K5 khi được nhấn sẽ kéo dẫn điện xuống mức 0 Với K2 dùng để chọn chỉnh thời gian, K3 dùng để tang giá trị , K4 dùng để giảm giá trị, K5 dùng để chọn chỉnh báo thức Các nút này có thể đễ dàng thay đổi chức năng cho nhau bằng cách sửa lại trong chương trình.
Hình 13: Khối nút nhấn.
2.2.4 KHỐI THỜI GIAN THƯC DS1307
Sử dụng IC thời gian thực DS1307 với giao tiếp chuẩn I2C Thạnh anh 32,768Hz giúp tạo giao động chuẩn thời gian cho ic thời gian thực U2 Pin 3V3 dùng để cấp nguồn cho IC thời gian thực vẫn chạy đúng giờ ngay cả khi mất điện Các điện trở kéo kên R1 và R2 có giá trị 4.7k để đáp ứng đúng theo chuẩn I2C Thời gian sẽ được chạy tự động trong U2 Các giá trị sẽ được vi điều khiển truy cập đọc và ghi thông qua giao thức chuẩn I2C với 2 dây
Trang 19Hình 14: Khối thời gian thực.
2.2.5 KHỐI HIỂN THỊ LCD.
Màn hình LCD 16X2 ở chế độ 4 bít kết nối và được điều khiển bơi vi xử lý Các chân 15 và 16 được cấp nguồn và cấp mass để sáng nên cho LCD Biến trở 10K được dùng để chỉnh độ tương phản của màn hình Màn hình giúp hiển thị các ký tự
cơ bản trong bảng mã ASCII với 2 dòng và 16 cột
Trang 20Hình 15: Khối hiển thị LCD.
2.2.6 KHỐI CÒI BÁO
Sử dụng còi báo LS1 buzzer để phát ra âm thanh, được cấp nguồn điều khiển bởi Q1 C1815 Q1 dùng để nâng dòng điều khiển lên đến 1A, điền trở R3 là điện trở phân cực cho Q1 Khi Q1 dược kích đẫn sẽ cấp nguồn cho còi báo Vi điều khiển sẽ phải cấp tín hiệu điều khiển mức cao thồng qua điện trở phân cự R3 để kích Q1 dẫn.Dòng của Q1 C1815 có thể lên đến 50mA; Hệ số khuêch đại là 120
Vậy để C1815 dẫn bảo hòa thì Ib=Icmax/beta ; =50/120=0.41mA
Điện trở Rb được tín Rb=Vbe/Ib ; =(5-0.7)/4.2=10k
Trang 21Hình 16: Khối còi báo thứcCHƯƠNG 3: THIẾT KẾ MẠCH NGUYÊN LÝ VÀ
THI CÔNG MẠCH.
3.1 THIẾT KẾ MẠCH NGUYÊN LÝ
Sau khi thiết kế hoàn chỉnh các khối , ta tiến hành sắp xếp các khối lại với nhau được mạch nguyên lý như hình sau:
Hình 17: Mạch nguyên lý đồng hồ điện tử
3.2 THIẾT KẾ MẠCH IN VÀ THI CÔNG MẠCH
Sau khi mô phỏng mạch nguyên lý thành công, ta tiến hành vẽ mạch in bằng phần mềm proteus như sau:
Trang 22Hình 18: Sơ đồ mạch in
Sau khi vẽ mạch in ta tiến hành thi công sản phẩm:
- Chuẩn bị các linh kiện cần thiết
- Chuẩn bị 1 Board đồng, bột sắt, cưa, bút lông,chì hàn,mỏ hàn…
-Tiến hành đo cắt board đồng vừa với mạch in, ủi mạch và ngâm mạch
-Khoan và tiến hành lắp các linh kiện lên board Chú ý khi lắp các linh kiện nên cẩn thận để đúng chiều như ở sơ đồ nguyên lý
- Hàn các linh kiện vào
Trang 23Hình ảnh sau khi thi công:
Hinh 19: Mạch đồng hồ điện tử sau khi thi công
Trang 24CHƯƠNG 4: LƯU ĐỒ GIẢI THUẬT VÀ KẾT LUẬN
BẮT ĐẦU KHỞI TẠO LCD HIỂN THỊ MÀN HÌNH GIỚI THIỆU TẠO THỜI GIAN TRỄ GIỚI THIỆU
NHẤN CHỈNH THỜI GIAN
Đ S ĐỌC THỜI GIAN TỪ RTC CHUYỂN ĐỔI GIÁ TRỊ THỜI GIANHIỂN THỊ THỜI GIAN LÊN LCD
GIÂY THAY ĐỔI Đ S
SO SÁNH THỜI GIAN ĐỂ BẬT BÁO THỨC
CHỈNH THỜI GIANNHẤN CHỈNH THỜI GIAN
Đ S CHỈNH BÁO THỨC ĐANG BÁO THỨC
S S
ĐTẮT BÁO THỨC
Trang 254.1 LƯU ĐỒ GIẢI THUẬT
4.2 KẾT LUẬN
Ưu điểm:
-Mạch đồng hồ điện tử sử dụng IC thời gian thực DS1307 hiển thị lên LCD đơn giản, dễ sử dụng
-Hiển thị chính xác thời gian thực kể cả khi mất nguồn
-Có thể đặt báo thức tùy vào người sử dụng
Nhược điểm:
-Còn thô sơ, không tiện lợi khi mang theo, độ bền thấp
-Vì màn hình LCD16x2 nhỏ nên không thể treo lên cao vì khó nhìn thấy
Trang 26CHƯƠNG 5: CHƯƠNG TRÌNH
#include <16F877A.h> // dinh kem file dinh nghia PIC su dung
#FUSES hs // su dung giao dong thach anh ngoài
#use delay(clock=20000000) // khai bao tan so thach anh cho hàm delay
#use i2c(master,fast,sda = pin_c4,scl = pin_c3) // su dung giao tiep i2c cho DS1307
#include <LCD 4 bit.c> // Dinh kem file giao tiep LCD che do 4 BIT
#define k1 pin_B0 // nut nhan set thoi gian
#define k2 pin_B1 // nut nhan tang
#define k3 pin_B2 // nut nhan giam
#define k4 pin_B3 // nut nhan set bao thuc
#define coi pin_e0//ngo ra kich cho chuong bao thuc
int8 c_g,dv_g,c_p,dv_p,c_h,dv_h,thu,c_d,dv_d,c_t,dv_t,c_n,dv_n; // khai bao ca bien chua gia tri thap phan cua cac don vi thoi gian
Trang 27int8 mang_tg_rtc[7]; // mang chua giu lieu thoi gian cua rtc
int8 h1=0,p1=0,g1=0; // khai bao cac bien chua thoi gian bao thuc
int8 dang_bao_thuc=0;
void convert_bcd(); // chuen doi so 2 bcd thanh 2 so thap phan rieng le bao gom chuc va don vi rieng cua cac gia tri thoi gian
void ReadRTC(int8 * buff); // doc cac gia tri thoi gian tu RTC vao mang
void WriteRTC(int8 * buff); // ghi mang chua gia tri thoi gian vao RTC
void chinh_gio(); // khai bao ham chinh thoi gian
void chinh_bt(); // khai bao ham chinh thoi gian bao thuc
//========================================
void hienthi() // hien thi thoi gian thuc binh thuong
{
LCD_putcmd(0x80); // lenh dua con tro den hang 1 cot 1 LCD
printf(LCD_putchar,"TIME:"); // Hien thi chuoi len LCD
LCD_putchar(c_h + 0x30); // doi ma thap phan sang ASCII va xuat hien thi len LCD
LCD_putchar(dv_h + 0x30); // doi ma thap phan sang ASCII va xuat hien thi len LCD
printf(LCD_putchar,":");
Trang 28LCD_putchar(c_p + 0x30); // doi ma thap phan sang ASCII va xuat hien thi len LCD
LCD_putchar(dv_p + 0x30); // doi ma thap phan sang ASCII va xuat hien thi len LCD
LCD_putcmd(0xC0);// lenh dua con tro den hang 2 cot 1 LCD
printf(LCD_putchar,"DATE:");//hien thi hang 2 cua man hinh lcd chua ngay thang nam
LCD_putchar(c_d + 0x30); // doi ma thap phan sang ASCII va xuat hien thi len LCD
LCD_putchar(dv_d + 0x30); // doi ma thap phan sang ASCII va xuat hien thi len LCD