ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ) ĐỒNG hồ số sử DỤNG vdk (code và mạch in đầy đủ)
Trang 1ĐỒNG HỒ SỐ SỬ DỤNG
VI ĐIỀU KHIỂN
i
Trang 2DANH MỤC CÁC BẢNG BIỂU IV DANH MỤC CÁC TỪ VIẾT TẮT V
TỔNG QUAN VỀ ĐỒNG HỒ SỐ SỬ DỤNG VI ĐIỀU KHIỂN 1
GIỚI THIỆU LINH KIỆN CHÍNH 2
THIẾT KẾ HỆ THỐNG VÀ ĐÁNH GIÁ THỰC NGHIỆM 7
KẾT LUẬN 12
TÀI LIỆU THAM KHẢO 13
PHỤ LỤC A 14
ii
Trang 3BẢNG 2-1:GIẢI THÍCH CÁC CHÂN CỦA DS1307 3
BẢNG 2-2: BẢY THANH GHI ĐẦU CỦA DS1307 3
HÌNH 2-2: I2C [5] 3
HÌNH 2-3: KEYPAD VÀ SƠ ĐỒ NGUYÊN LÝ CỦA KEYPAD [2] 4
HÌNH 2-4: MÀN HÌNH LCD VÀ CÁC CHÂN GIAO TIẾP [3] 4
BẢNG 2-3: CHỨC NĂNG CÁC CHÂN CỦA LCD 4
HÌNH 2-5: ATMEGA328P VÀ SƠ ĐỒ CHÂN [4] 6
HÌNH 3-1: SƠ ĐỒ KHỐI HỆ THỐNG 7
HÌNH 3-2: SƠ ĐỒ NGUYÊN LÝ KHỐI MẠCH NGUỒN 7
HÌNH 3-3: PCB CỦA MẠCH NGUỒN 8
HÌNH 3-4: SƠ ĐỒ NGUYÊN LÝ CỦA DS1307 8
HÌNH 3-5: PCB DS1307 9
HÌNH 3-6: SƠ ĐỒ NGUYÊN LÝ CỦA VI ĐIỀU KHIỂN ATMEGA328P 9
HÌNH 3-7: PCB VI ĐIỀU KHIỂN 10
HÌNH 3-8: SƠ ĐỒ GIẢI THUẬT 10
HÌNH 3-9: MÔ HÌNH KIỂM TRA HIỂN THỊ THỜI GIAN THỰC 11
iii
Trang 4SOURCE NOT FOUND
BẢNG 2-2: BẢY THANH GHI ĐẦU CỦA DS1307 ERROR: REFERENCE SOURCE NOT FOUND
BẢNG 2-3: CHỨC NĂNG CÁC CHÂN CỦA LCD ERROR: REFERENCE SOURCE NOT FOUND
iv
Trang 5COL Columm
E Enable
EEPROM
GND Gesta Normannorum Ducum
I2C Inter-Integrated Circuit
IC Integrated Circuit
LCD Liquid Crystal Display
LED Light-Emitting Diode
PWM Pulse Width Modulation
VEE Voltage Emitor emitor
VSS Voltage for substrate and source
v
Trang 6TỔNG QUAN VỀ ĐỒNG HỒ SỐ SỬ DỤNG VI ĐIỀU KHIỂN
1.1 Giới thiệu
Ngày nay, cùng với sự phát triển của khoa học công nghệ và nhu cầu của con ngườikhông ngừng tăng cao, các thiết bị cũng như máy móc đòi hỏi cùng phải cải tiếntheo hướng hiện đại hơn, tích hợp nhiều chức năng hơn để phù hợp với nhu cầu củacon người và bắt kịp xu thế của thế giới
Một thiết bị rất gần gũi với con người chính là chiếc đồng hồ, với chiếc đồng hồdùng kim giờ, kim phút để chỉ thời gian có thể sẽ gây khó khăn cho một số người sửdụng Đồng hố số sẽ giải quyết được khó khăn ấy khi thời gian được hiển thị bằngcác chữ số rất dễ dàng cho chúng ta nhận biết thời gian
Với việc áp dụng những kiến thức đã học mạch đồng hồ số được thiết kế nhằm giảiquyết vấn đề trên
1.2 Hướng nghiên cứu
So với việc thiết kế đồng hồ số dùng IC số thì sử dụng vi điều khiển để thiết kếđồng hồ số sẽ dễ dàng hơn rất nhiều, đỡ mất thời gian hàn linh kiện và sử dụng quánhiều IC trong một mạch
Trang 7GIỚI THIỆU LINH KIỆN CHÍNH
1.3 DS1307-IC thời gian thực
Hình 2-1: DS1307 và sơ đồ chân [1]
- DS1307 là chip thời gian thực hay RTC, là IC tích hợp thời gian thực nghĩa là thời
gian tuyệt đối mà con người đang sử dụng tính bằng giờ, phút, giây Hai mode củaDS1307 là Data Read và Data Write
- DS1307 có 8 thanh ghi đầu dùng cho chức năng “đồng hồ”, với 7 thanh ghi đầutiên chứa thông tin về thời gian của đồng hồ bao gồm: thứ, giờ, phút, giây, ngày,tháng, năm
- Các thông số kỹ thuật của DS1307:
Điện áp hoạt động: 5 V
Sử dụng nguồn Pin 3 V bên ngoài khi mất điện
Giao tiếp theo chuẩn I2C
Có 56 Byte RAM trống để người dùng tùy ý sử dụng
Có thể xuất ra được xung có tần số 1 Hz, 8.192 KHz, 32.768 KHz
Trang 8Bảng 2-1:Giải thích các chân của 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 của 1 nguồn pin 3 V nuôi chip
GND Chân mass chung cho pin 3 V và VCC
VCC
Nguồn cho giao diện I2C thường là 5V và dùng chung với vi điều khiển
SQW/OUT Ngõ phụ tao xung vuông
SCL, SDA 2 bus dữ liệu của DS1307, tin truyền và ghi được truyền qua 2 đường
này
Bảng 2-2: Bảy thanh ghi đầu của DS1307
BIT 7 BIT 6 BIT 5 BIT 4 BIT 3 BIT 2 BIT 1 BIT 0
Trang 9- Bus I2C được sử dụng làm bus giao tiếp ngoại vi cho rất nhiều loại IC khác nhaunhư: vi điều khiển 8051, IC điều khiển LCD
- Một giao tiếp I2C gồm có hai dây: Serial Data (SDA) và Serial Clock (SCL).Trong đó SDA là đường truyền dữ liệu hai hướng, còn SCL là đường truyền xungđồng hồ và chỉ theo một hướng chỉ do Master phát đi (thông thường ở 100 KHz và
400 KHz Mức cao nhất là 1 MHz và 3.4 MHz)
1.5 Keypad 4x4
Hình 2-3: Keypad và sơ đồ nguyên lý của keypad [2]
- Keypad là một thiết bị nhập cho phép người dùng nhập các chữ số, chữ cái hoặc
ký hiệu vào bộ điều khiển.Gọi là keypad 4x4 vì keypad này có 16 nút nhấn được kếtnối thành 4 hàng, 4 cột
- Trong đề tài này, ta dùng keypad này để nhập dữ liệu báo thức cho đồng hồ
1.6 Màn hình LCD 16x2
Hình 2-4: Màn hình LCD và các chân giao tiếp [3]
BẢNG 2-3: Chức năng các chân của LCD
Trang 10Chân Ký hiệu Mô tả
1 Vss 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
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=5 V của mạch điều khiển
3 VEE Điều chỉnh độ tương phản của LCD
4 RS Chân chọn thanh ghi (Register select)
5 R/W Chân chọn chế độ đọc/ghi (Read/Write) Nối chân R/W với logic
“0” để LCD hoạt động ở chế độ ghi, hoặc nối với logic “1” để LCD
ở chế độ đọc
6 E Chân cho phép (Enable) Sau khi các tín hiệu được đặt lên bus
DB0-DB7, các lệnh chỉ được chấp nhận khi có 1 xung cho phép của chân
E
7 14 DB0
-DB7 Tám đường của bus dữ liệu dùng để trao đổi thông tin với MPU.
15 - Nguồn dương cho đèn nền
- Trong đề tài này, ta sử dụng loại LCD 16x2 gồm có 2 hàng, mỗi hàng chứa tối đa
16 ký tự, sử dụng cách giao tiếp song song và mode 8 bit để hiển thị thời gian (giờ,phút, giây, ngày, tháng, năm)
Trang 111.7 Vi điều khiển ATmega328P
Hình 2-5: ATmega328P và sơ đồ chân [4]
- Các thông số cơ bản của Atmega328P:
Số timer: 3 timer gồm 2 timer 8-bit và 1 timer 16-bit
Số kênh xung PWM: 6 kênh (1 timer 2 kênh)
Trang 12Hình 3-2: Sơ đồ nguyên lý khối mạch nguồn
Nguyên lý hoạt động: Khi cấp điện áp xoay chiều có giá trị 9-15 VAC cho mạch hoặc điện áp 9 VDC, điện áp qua cầu diode để chỉnh lưu điện áp xoay chiều thành
Trang 13điện áp một chiều DC, qua tụ lọc C5 làm điện áp đầu vào giảm độ gợn sóng và trở nên phẳng LM7805 là IC ổn áp có, chịu được điện áp 7-20 VDC tác dụng chuyển điện áp đầu vào thành điện áp ổn định 5 VDC ở đầu ra Tụ C3, C4 có tác dụng làm điện áp đầu ra trỏ nên phẳng và giảm độ gợn sóng Cuối cùng là LED dùng để báo
có nguồn trong mạch
Hình 3-3: PCB của mạch nguồn
1.10.2 Mạch DS1307
Hình 3-4: Sơ đồ nguyên lý của DS1307
- Nguyên lý hoạt động: Khi cấp nguồn 5 V, thạch anh dao động và tạo ra tần số 32,
768 KHz và DS1307 hoạt động Pin 3 V có thể ghi nhớ thời gian ngay cả khi khôngđược cấp nguồn
Trang 14Hình 3-5: PCB DS1307
1.10.3 Mạch vi điều khiển Atmega328P
Hình 3-6: Sơ đồ nguyên lý của vi điều khiển Atmega328P
Trang 15Hình 3-7: PCB vi điều khiển
1.11 Sơ đồ giải thuật
Hình 3-8: Sơ đồ giải thuật
1.12 Nguyên lý hoạt động:
Sau khi cấp nguồn cho vi điều khiển, vi điều khiển sẽ đọc thời gian thực từ DS1307thông qua kết nối I2C với LCD, thời gian sẽ được hiển thị qua LCD Để hẹn giờ,dùng keypad nhập thời gian hẹn giờ sau đó lưu lại, sau đó sẽ so sánh nếu thời gianhiện tại bằng thời gian hẹn giờ thì sẽ báo qua speaker
Trang 161.13 Phần cứng
Hình 3-9: Mô hình kiểm tra hiển thị thời gian thực
Trang 17KẾT LUẬN
1.14 Kết luận
Hoàn thành đề tài được giao, thiết kế mạch hoàn chỉnh
Ưu điểm, khuyết điểm:
Trang 18TÀI LIỆU THAM KHẢO
Tiếng Việt:
[1] ĐIỆN TỬ MÁY TÍNH, http://www.dientumaytinh.com/
[2] Arduino Việt Nam, http://arduino.vn/
[3] Điễn đàn vi điều khiển, http://mcu.banlinhkien.vn/
Tiếng Anh:
[4] Digole Digital Solutions, http://www.digole.com/
[5] MODTRONIX, http://modtronix.com/
Trang 19pinMode(13, OUTPUT); //xuất giá trị
RtcDateTime compiled = RtcDateTime( DATE , TIME );
Trang 20// never assume the Rtc was last configured by you, so
// just clear them to your needed state
//Rtc.Enable32kHzPin(false);
//Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone);
Rtc.SetSquareWavePin(DS1307SquareWaveOut_Low);
}
Trang 212 Chương trình xuất thời gian ra LCD
pinMode(13, OUTPUT); //xuất giá trị
RtcDateTime compiled = RtcDateTime( DATE , TIME );
Trang 22Rtc.SetDateTime(compiled);
}
// never assume the Rtc was last configured by you, so
// just clear them to your needed state
//Rtc.Enable32kHzPin(false);
//Rtc.SetSquareWavePin(DS3231SquareWavePin_ModeNone); Rtc.SetSquareWavePin(DS1307SquareWaveOut_Low);
const byte ROWS = 4; //four rows
const byte COLS = 4; //four columns
Trang 23int set_hc, set_hdv, set_mc, set_mdv;
int menu1 = 0, alarm_setting = 0;
boolean alarm_off, al_en;
void loop ()
{
RtcDateTime now = Rtc.GetDateTime();
printDateTime(now);
int cur_h = now.Hour();
int cur_m = now.Minute();
set_hc = int(hc) - 48;
set_hdv = int(hdv) - 48;
set_mc = int(mc) - 48;
set_mdv = int(mdv) - 48;;
int alarm_h = set_hc * 10 + set_hdv;
int alarm_m = set_mc * 10 + set_mdv;
Trang 24char Key = Key_Pad.getKey();
Trang 25if (!hdv && hc) hdv = Key_Pad.getKey(); // nếu hc chưa có giá trị thì gán hc
= giá trị nhập từ bàn phím,nếu hc đã có giá trị thì bỏ qua câu lệnh
if (!mc && hdv && hc) mc = Key_Pad.getKey();
if (!mdv && mc && hdv && hc) mdv = Key_Pad.getKey();
int a, b, c, d;
if ((int(hc) - 48) < 0) a = 0;
else a = int(hc) - 48;
Trang 26// Turn Alarm On/Off
if ( (alarm_h == cur_h) && (alarm_m == cur_m)) {
if ((Key != 'E') && al_en )
{
Trang 27else alarm_off = true;
if (alarm_off) digitalWrite(buzzer, LOW); else digitalWrite(buzzer, HIGH);
}