NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
……………………………………………………………………………………………
Gio viên hưng dẫn
Nguyn Thị Nhung
Hưng yên, ngày …. tháng……. năm 201
1
NHẬN XÉT, ĐÁNH GIÁ CỦA GIÁO VIÊN PHẢN BIỆN
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
…………………………………………………………………………………………
Chữ ký của giáo viên phản biện
Hưng yên, ngày …. tháng……. năm 201
2
LỜI CẢM ƠN
Đầu tiên em xin gửi lời cảm ơn đến Ban Giám Hiệu trường Đại Học Sư Phạm Kỹ
Thuật Hưng Yên đã cho em một môi trường học tập tốt, cũng như tạo điều kiện thuận
lợi để chúng em có thể phát huy được khả năng của mình.
Qua thời gian nghiên cứu và thực hiện, đến nay đồ án tốt nghiệp với đề tài:
“Thiết kế, chế tạo đồng hồ số vạn niên ” do giảng viên Nguyễn Thị Nhung hướng
dẫn đã được hoàn thiện. Trong suốt thời gian nghiên cứu, chúng em đã gặp không ít
khó khăn và đã nhận được nhiều sự giúp đỡ nhiệt thành và quý báu của cô, chúng em
bày tỏ lòng biết ơn sâu sắc tới Giảng Viên Nguyễn Thị Nhung đã tin tưởng giao đồ
án, chỉ đạo và tận tình hướng dẫn chúng em trong suốt quá trình thực hiện đồ án tốt
nghiệp này.
Chúng em xin được bày tỏ lòng cảm ơn chân thành tới các quý Thầy/Cô giáo
trong khoa Điện - Điện tử trường Đại Học Sư Phạm Kỹ Thuật Hưng Yên đã tận tình
chỉ dạy và truyền đạt những kiến thức quý báu để chúng em có thể hoàn thành đồ án
này, đồng thời đó cũng là một hành trang đáng quý đề chúng em có thể tiếp bước
trên con đường sự nghiệp sau này.
Để hoàn thành đồ án tốt nghiệp này cũng có sự đóng góp không nhỏ của các bạn
sinh viên lớp ĐTK7, chúng tôi xin cảm ơn các bạn rất nhiều.
Chúng em xin chân hành cảm ơn!
3
LỜI NÓI ĐẦU
Trong thời đại hiện nay, với tốc độ phát triển nhanh chóng của các ngành công
nghiệp hiện đại như : cơ khí, động lực….Thì ngành điện - điện tử cũng đóng một vai
trò rất quan trọng. Ngành điện tử đã xâm nhập vào cuộc sống con người khá sớm, từ
những thiết bị đơn giản như: đèn chiếu sáng, radio,…. Đến những máy móc phức tạp
và ứng dụng công nghệ cao như: hệ thống rada, hệ thống camera, robot,…. Tất cả
đều được ứng dụng rộng rãi và góp phần hiệu quả giải phóng sức lao động chân tay
của con người, đưa con người hướng tới một thế giới công nghệ ngày càng hiện đại
và tinh vi hơn.
Ngành điện tử đã ảnh hưởng không nhỏ đến cuộc sống của con người. Vì thế
con người không ngừng nổ lực, phát huy, nghiên cứu cho ra đời những thiết bị không
những phục vụ cho cuộc sống hằng ngày mà còn hỗ trợ cho nhiều lĩnh vực khác. Đặc
biệt hiện nay trong lĩnh vực vi xử lý, những ứng dụng của nó đã mang lại hiệu quả
rất thiết thực trong cuộc sống như : quang báo điện tử, lịch vạn niên, điều khiển tốc
độ động cơ, hệ thống đếm sản phẩm….Là sinh viên chuyên nghành điện tử công
nghiệp, để vận dụng những kiến thức chuyên ngành đã học tăng cường vốn hiểu biết
của bản thân về lĩnh vực mình quan tâm chúng em đã quyết định chọn đề tài “Thiết
kế, chế tạo đồng hồ số vạn niên” để làm đồ án tốt nghiệp của mình. Để qua đó thể
hiện được một phần mô hình ứng dụng kiến thức đã học vào phục vụ cuộc sống, gia
đình, xã hội…
Bằng những kiến thức đã đạt được trong quá trình học tập tại nhà trường và
những tìm hiểu nghiên cứu bên ngoài cùng với sự nỗ lực của bản thân, mỗi sinh viên
trong nhóm của chúng em đã cố gắng hết sức mình để hoàn thành những ý tưởng
thiết kế cũng như yêu cầu đặt ra của đề tài tốt nghiệp. So với thời gian học tập tại
trường thì đó là thành quả của quá trình học tập cùng với những thành công ban đầu
trước khi tốt nghiệp ra trường. Nhóm chúng em đã cố gắng nỗ lực hết mình trong
suốt thời gian thực hiện đề tài này nhưng với lượng kiến thức và thời gian cho phép
nên đồ án còn nhiều thiếu sót. Nhóm chúng em mong nhận được nhiều sự đóng góp ý
4
kiến của quý thầy cô và các bạn về đề tài này cũng như hướng mở rộng, phát triển để
đề tài hoàn thiện hơn .
MỤC LỤC
5
DANH MỤC HÌNH VẼ
6
DANH MỤC BẢNG BIỂU
7
DANH MỤC TỪ VIẾT TẮT
IC : Integrated Circuit
RAM : Random Access Memory
ROM : Read Only Memory
EPROM : Erasable Programmable read Only Memory
PSEN : Program Store Enable
ALE : Address Latch Enable
EA : External Access
RST : Reset
I/O port : Input/Output port
SFR : Secial Function Regiter
PSW : Proram Status Word
BCD : Binary Code Decimal
IP : Interrup Priority
Bit P : Bit Parity
IE : Interrupt Enable
OE : Output Enable
PC : Personal Computer
RTC : Real Time Clock
CH : Clock Halt
SQWE : Square Wave Enable
RS : Rate Select
I2C : Inter – Integrated Cỉcuit
SDA : Serial Data
SCL : Serial Clock
SLA : Slave Address
8
CHƯƠNG I : CƠ SỞ LÝ THUYẾT
1 .1. GIỚI THIỆU VỀ VI ĐIỀU KHIỂN 89S52
1.1.1. Tổng quan về 89S52
AT89xxx là họ IC vi điều khiển do hãng Atmel sản xuất. Các sản phẩm
AT89xxx rất thích hợp cho những ứng dụng điều khiển, thực tế. Việc xử lý trên byte
và các phép toán số học ở cấu trúc dữ liệu nhỏ được thực hiện bằng nhiều chế độ
truy xuất dữ liệu nhanh trên RAM nội. Tập lệnh cung cấp một bảng tiện dụng của
những lệnh số học 8 bit gồm cả lệnh nhân và lệnh chia. Nó cung cấp những hỗ trợ
mở rộng trên chip dùng cho những biến một bit như là kiểu dữ liệu riêng biệt cho
phép quản lý và kiểm tra bit trực tiếp trong hệ thống điều khiển. AT89S52 cung cấp
những đặc tính chuẩn như: 8 KByte bộ nhớ chỉ đọc có thể xóa và lập trình nhanh
(EPROM), 128 byte RAM, 32 đường I/O, 3 TIMER/COUNTER 16 Bit, 5 vectơ ngắt
có cấu trúc 2 mức ngắt, một Port nối tiếp bán song công, 1 mạch dao động tạo xung
Clock và bộ dao động ON-CHIP. Các đặc điểm của chip AT89S52 được tóm tắt như
sau:
• 8 KByte bộ nhớ có thể lập trình nhanh, có khả năng tới 1000 chu kỳ ghi/xoá
• Tần số hoạt động từ: 0Hz đến 24 MHz
• 3 mức khóa bộ nhớ lập trình
• 3 bộ Timer/counter 16 Bit
• 128 Byte RAM nội.
• 4 Port xuất /nhập I/O 8 bit.
• Giao tiếp nối tiếp.
• 64 KB vùng nhớ mã ngoài
• 64 KB vùng nhớ dữ liệu ngoại.
• 4µs cho hoạt động nhân hoặc chia
9
Sơ đồ khối của AT89S52
Hình 1.1: Sơ đồ khối AT89S52
10
1.1.2. Mô tả chân 89S52
Hình 1.2: Sơ đồ chân 89S52
Chức năng của cc chân 89S52 :
Port 0
: từ chân 39 đến chân 32 (P0.0 - P0.7). Port có 2 chức năng : Trong các
thiết kế cỡ nhỏ không dùng bộ nhớ mở rộng nó có chức năng như các đường IO, đối
với thiết kế lớn có bộ nhớ mở rộng nó được kết hợp giữa bus địa chỉ và dữ liệu.
Port 1
: từ chân 1 đến chân 8 (P1.0 - P1.7). Port 1 là port IO dùng cho giao tiếp
với thiết bị bên ngoài nếu cần, các chức năng khác : T
2
, T
2
EX, MOSI, MISO, SCK.
Trong đó:
T2 và T2EX dùng cho Timer/Counter
Bit
MOSI, MISO, SCK dùng để truyền dữ liệu theo chuẩn SPI đồng thời có
chức năng kết nối với mạch nạp chương trình.
Port 2
: từ chân 21 đến chân 28 (P2.0-P2.7). Port 2 là một port có tác dụng kép
dùng như các đường xuất/nhập hoặc là byte cao của bus địa chỉ đối với các thiết bị
dùng bộ nhớ mở rộng.
Port3
: Từ chân 10 đến chân 17 (P3.0-P3.7).Port 3 là port có tác dụng kép. Các
chân của port này có nhiều chức năng, có công dụng chuyển đổi có liên hệ đến các
đặc tính đặc biệt của 89S52 như ở bảng sau:
11
Bit Tên Chức năng chuyển đổi
P3.0
P3.1
P3.2
P3.3
P3.4
P3.5
P3.6
P3.7
RXD
TXD
INT0
INT1
T0
T1
WR
RD
Ngõ vào dữ liệu nối tiếp
Ngõ xuất dữ liệu nối tiếp
Ngõ vào ngắt cứng thứ 0
Ngõ vào ngắt cứng thứ 1
Ngõ vào TIMER/COUNTER THỨ 0
Ngõ vào TIMER/COUNTER THỨ 1
Tín hiệu ghi dữ liệu nên bộ nhớ ngoài
Tín hiệu đọc bộ nhớ dữ liệu ngoài.
Bảng 1.1: Các chức năng chuyển đổi của cổng P3
PSEN (Program store enable):
PSEN là tín hiệu ngõ ra có tác dụng cho phép đọc bộ nhớ chương trình mở rộng
và thường được nối đến chân OE của EPROM cho phép đọc các byte mã lệnh. PSEN
ở mức thấp trong thời gian 89S52 lấy lệnh. Các mã lệnh của chương trình đọc từ
EPROM qua bus giữ liệu, được chốt vào thanh ghi lệnh bên trong 89S52 để giải mã
lệnh. Khi 89S52 thi hành chương trình trong ROM nội. PSEN ở mức cao.
ALE (Address Latch Enable):
Khi 89S52 truy xuất bộ nhớ bên ngoài, Port 0 có chức năng là bus địa chỉ và dữ
liệu do đó phải tách các đường dữ liệu và địa chỉ. Tín hiệu ra ALE ở chân thứ 30
dùng làm tín hiệu điều khiển để giải đa hợp các đường địa chỉ và dữ liệu khi kết nối
chúng với IC chốt.
Tín hiệu ở chân ALE là một xung trong khoảng thời gian port 0 đóng vai trò là
địa chỉ thấp nên chốt địa chỉ hoàn toàn tự động.
EA (External Access):
Tín hiệu vào EA (chân 31). Nếu ở mức 1, 89S52 thi hành chương trình từ ROM
nội. Nếu ở mức 0, 89S52 thi hành chương trình từ bộ nhớ mở rộng. Chân EA được
lấy làm chân cấp nguồn 21V khi lập trình cho Eprom trong 89S52.
RST (Reset):
Khi ngõ vào tín hiệu này đưa lên mức cao ít nhất 2 chu kỳ máy, các thanh ghi
bên trong được nạp những giá trị thích hợp để khởi động hệ thống. Khi cấp điện
mạch phải tự động Reset.
XTAL1, XTAL2:
Bộ tạo dao động được tích hợp bên trong 89S52.Khi sử dụng 89S52, người ta chỉ
cần nối thêm thạch anh và các tụ. Tần số thạch anh tùy thuộc vào mục đích của người
sử dụng giá trị tụ thường được chọn là 33p
12
1.1.3. Tổ chức bộ nhớ bên trong 89S52
Bộ nhớ trong 89S52 bao gồm ROM và RAM. RAM trong 89S52 bao gồm nhiều
thành phần: Phần lưu trữ đa dụng, phần lưu trữ địa chỉ hóa từng bit, các bank thanh
ghi và các thanh ghi chức năng đặc biệt. AT89S52 có bộ nhớ được tổ chức theo cấu
trúc Harvard: Có những vùng bộ nhớ riêng biệt cho chương trình và dữ liệu. Chương
trình và dữ liệu có thể chứa bên trong 89S52 nhưng 89S52 vẫn có thể kết nối với
64K byte bộ nhớ chương trình và 64K byte dữ liệu bên ngoài.
Bảng 1.2: Tổ chức bộ nhớ bên trong của 89S52
RAM bên trong AT89S52 được phân chia như sau:
● Các bank thanh ghi có địa chỉ từ 00H đến 1FH.
● RAM địa chỉ hóa từng bit có địa chỉ từ 20H đến 2FH.
13
● RAM đa dụng từ 30H đến 7FH.
● Các thanh ghi chức năng đặc biệt từ 80H đến FFH
a. RAM đa dụng
RAM đa dụng có địa chỉ từ 30h – 7Fh có thể truy xuất mỗi lần 8 bit bằng cách
dùng chế độ định địa chỉ trực tiếp hay gián tiếp. Các vùng địa chỉ thấp từ 00h – 2Fh
cũng có thể sử dụng cho mục đích như trên, ngoài các chức năng đặc biệt được đề
cập ở phần sau.
b. RAM có thể định địa chỉ bit
Vùng địa chỉ từ 20h -2Fh gồm 16 byte có thể thực hiện như vùng RAM đa
dụng (truy xuất mỗi lần 8 bit) hay thực hiện truy xuất mỗi lần 1 bit bằng các lệnh xử
lý bit.
c. Cc bank thanh ghi
Vùng địa chỉ 00h – 1Fh được chia thành 4 bank thanh ghi: bank 0 từ 00h –07h,
bank 1 từ 08h – 0Fh, bank 2 từ 10h – 17h và bank 3 từ 18h – 1Fh. Các bank thanh
ghi này được đại diện bằng các thanh ghi từ R0 đến R7. Sau khi khởi động thì hệ
thống bank 0 được chọn sử dụng. Do có 4 bank thanh ghi nên tại một thời điểm chỉ
có một bank thanh ghi được truy xuất bởi các thanh ghi R0 đến R7. Việc thay đổi
bank thanh ghi được thực hiện thông qua thanh ghi từ trạng thái chương trình (PSW).
d. Cc thanh ghi có chức năng đặc biệt
Các thanh ghi trong 89S52 được định dạng như một phần của RAM trên chip vì
vậy mỗi thanh ghi sẽ có một địa chỉ (ngoại trừ thanh ghi bộ đếm chương trình và
thanh ghi lệnh vì các thanh ghi này hiếm khi bị tác động trực tiếp). Cũng như R0 đến
R7, 89S52 có 21 thanh ghi có chức năng đặc biệt (SFR: Special Function Register) ở
vùng trên của RAM nội từ địa chỉ 80H đến 0FFH.
Sau đây là một vài thanh ghi đặc biệt thường được sử dụng :
٭ Thanh ghi trạng thi chương trình (PSW: Program Status Word)
14
Bảng 1.3: Thanh ghi trạng thái chương trình
Chức năng từng bit trạng thái chương trình
- Cờ Carry CY (Carry Flag):
Cờ nhớ thường được dùng cho các lệnh toán học: C = 1 nếu phép toán cộng có sự
tràn hoặc phép trừ có mượn và ngược lại C = 0 nếu phép toán cộng không tràn và
phép trừ không có mượn.
- Cờ Carry phụ AC (Auxiliary Carry Flag):
Khi cộng những giá trị BCD (Binary Code Decimal), cờ nhớ phụ AC được set nếu
kết quả 4 bit thấp nằm trong phạm vi điều khiển 0AH – 0FH. Ngược lại AC = 0
- Cờ 0 (Flag 0):
Cờ 0 (F0) là 1 bit cờ đa dụng dùng cho các ứng dụng của người dùng.
- Những bit chọn bank thanh ghi truy xuất:
RS1 và RS0 quyết định dãy thanh ghi tích cực. Chúng được xóa sau khi reset hệ
thống và được thay đổi bởi phần mềm khi cần thiết.
Tùy theo RS1,RS0 sẽ được chọn Bank tích cực tương ứng.
Bảng 1.4: Bảng Bank thanh ghi
15
- Cờ tràn OV (Over Flag):
Cờ tràn được set sau một hoạt động cộng hoặc trừ nếu có sự tràn toán học.
- Bit Parity (P):
Bit tự động được set hay clear ở mỗi chu kỳ máy để lập Parity chẵn với thanh ghi
A. Sự đếm các bit trong một thanh ghi A cộng với bit Parity luôn chẵn. Ví dụ A chứa
10101101B thì bit P set lên một để tổng số bit 1 trong A và P tạo thành số chẵn. Bit
Parity thường được dùng trong sự kết hợp với những thủ tục của Port nối tiếp để tạo
ra bit Parity trước khi phát đi hoặc kiểm tra bit Parity sau khi thu.
● Thanh ghi TIMER
Vi điều khiển 89S52 có 3 timer 16 bit, mỗi timer có 4 cách làm việc. Người ta sử
dụng các timer để:
- Định khoảng thời gian.
- Đếm sự kiện
- Tạo tốc độ baud cho port nối tiếp trong 89S52
Trong các ứng dụng định khoảng thời gian, người ta lập trình timer ở những
khoảng đều đặn và đặt cờ tràn timer. Cờ được dùng để đồng bộ hóa chương trình để
thực hiện một tác động như kiểm tra trạng thái của các ngõ vào hoặc gửi sự kiện ra
các ngõ ra. Các ứng dụng khác có thể sử dụng việc tạo xung nhịp đều đặn của timer
để đo thời gian trôi qua giữa hai sự kiện (ví dụ đo độ rộng xung).
● Thanh ghi ngắt (INTERRUPT)
Một ngắt là sự xảy ra một điều kiện, một sự kiện mà nó gây ra treo tạm thời
chương trình chính trong khi điều kiện đó được phục vụ bởi một chương trình khác.
Các ngắt đóng một vai trò quan trọng trong thiết kế và cài đặt các ứng dụng vi điều
khiển. Chúng cho phép hệ thống đáp ứng bất đồng bộ với một sự kiện và giải quyết
sự kiện đó trong khi một chương trình khác đang thực thi.
- Tổ chức ngắt của 89S52:
Có 5 nguồn ngắt ở 89S52: 2 ngắt ngoài, 3 ngắt từ timer và 1 ngắt port nối tiếp.
Tất cả các ngắt theo mặc nhiên đều bị cấm sau khi reset hệ thống và được cho phép
từng cái một bằng phần mềm. Mức độ ưu tiên của các ngắt được lưu trong thanh ghi
IP (Interrupt Priority) hay nói cách khác thanh ghi IP cho phép chọn mức ưu tiên cho
các ngắt (giá trị thanh ghi IP khi reset là 00h)
16
Bit Kí
hiệu
Địa chỉ
bit
Mô tả
IP.7 _ _ Không được mô tả
IP.6 _ _ Không được mô tả
IP.5 ET20 BDH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại timer 2
IP.4 ES BCH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại cổng nối tiếp
IP.3 ET1 BBH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại timer 1
IP.2 EX1 BAH Chọn mức ưu tiên cao (=1) hay thấp (=0) tại ngắt ngoài 1
IP.1 ET0 B9H Chọn mức ưu tiên cao (=1) hay thấp (=0) tại timer 0
IP.0 EX0 B8H Chọn mức ưu tiên cao (=1) hay thấp (=0) tại ngắt ngoài 0
Bảng 1.5: Bảng thanh ghi IP
- Nếu 2 ngắt xảy ra đồng thời thì ngắt nào có mức ưu tiên cao hơn sẽ được phục vụ
trước.
- Nếu 2 ngắt xảy ra đồng thời có cùng mức ưu tiên thì thứ tự ưu tiên được thực hiện
từ cao đến thấp như sau : ngắt ngoài 0 – timer 0 – ngắt ngoài 1 –timer 1 – cổng nối
tiếp – timer 2.
- Nếu chương trình của một ngắt có mức ưu tiên thấp đang chạy mà có một ngắt xảy
ra với mức ưu tiên cao hơn thì chương trình này tạm dừng để chạy một chương trình
khác có mức ưu tiên cao hơn.
- Cho phép và cấm ngắt:
Mỗi nguồn ngắt được cho phép hoặc cấm ngắt qua một thanh ghi chức năng đặc biệt
có định địa chỉ bit IE ( Interrupt Enable : cho phép ngắt ) ở địa chỉ
Bit Kí hiệu Địa chỉ bit Mô tả
IE.7 EA AFH Cho phép / Cấm toàn bộ
IE.6 _ AEH Không được mô tả
IE.5 ET2 ADH Cho phép ngắt từ timer 2
IE.4 ES ACH Cho phép ngắt port nối tiếp
IE.3 ET1 ABH Cho phép ngắt từ timer 1
IE.2 EX1 AAH Cho phép ngắt ngoài 1
IE.1 ET0 A9H Cho phép ngắt từ timer 0
IE.0 EX0 A8H Cho phép ngắt ngoài 0
Bảng 1.6: Bảng thanh ghi IE
- Cc cờ ngắt:
Khi điều kiện ngắt xảy ra thì ứng với từng loại ngắt mà loại cờ đó được đặt lên mức
cao để xác nhận ngắt
17
Ngắt Cờ Thanh ghi SFR và vị trí bit
Bên ngoài 0 IE0 TCON.1
Bên ngoài 1 IE1 TCON.3
Timer 1 TF1 TCON.7
Timer 0 TF0 TCON.5
Port nối tiếp T1 SCON.1
Port nối tiếp R1 SCON.0
Bảng 1.7: Các cờ ngắt
- Cc vectơ ngắt:
Khi chấp nhận ngắt, giá trị được nạp vào PC gọi là vector ngắt. Nó là địa chỉ bắt đầu
của ISR cho nguồn tạo ngắt, các vector ngắt được cho ở bảng sau :
Ngắt Cờ Địa chỉ vectơ
Reset hệ thống RST 0000H
Bên ngoài 0 IE0 0003H
Timer 0 TF0 000BH
Bên ngoài 1 IE1 0013H
Timer 1 TF1 001BH
Port nối tiếp TI và RI 0023H
Timer 2 002BH
Bảng 1.8: Các vectơ ngắt
Vector reset hệ thống (RST ở địa chỉ 0000H) được để trong bảng này vì theo nghĩa
này, nó giống ngắt: Nó ngắt chương trình chính và nạp cho PC giá trị mới.
18
1.2. TỔNG QUAN VỀ IC DS1307( IC ĐỊNH THỜI GIAN THỰC)
1.2.1. Sơ đồ chân DS1307
DS1307 là chip đồng hồ thời gian thực (RTC : Real-time clock), khái niệm
thời gian thực ở đây được dùng với ý nghĩa thời gian tuyệt đối mà con người đang sử
dụng, tính bằng giây, phút, giờ…DS1307 là một sản phẩm của Dallas Semiconductor
(một công ty thuộc Maxim Integrated Products). Chip này có 7 thanh 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 ra DS1307
còn có 1 thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống có thể dùng như
RAM. DS1307 được đọc và ghi thông qua giao diện nối tiếp I2C nên cấu tạo bên
ngoài rất đơn giản. DS1307 xuất hiện ở 2 gói SOIC và DIP có 8 chân như trong hình
sau.
Hình 1.3: Hình dạng cấu tạo của chip DS1307
Các chân của DS1307 được mô tả như sau :
- X1 và X2: là 2 ngõ kết nối với 1 thạch anh 32.768 KHz làm nguồn tạo dao
động cho chip
- V
BAT
: cực dương của một nguồn pin 3V nuôi chip
- GND: chân mass chung cho cả pin 3V và Vcc
- V
CC
: nguồn cho giao diện I2C, thường là 5V và dùng chung với vi điều khiển.
Chú ý : nếu Vcc không được cấp nguồn nhưng V
BAT
được cấp thì DS1307 vẫn đang
hoạt động (nhưng không ghi và đọc được).
- SQW/OUT: Đây là chân tạo ngõ ra xung vuông của DS1307 có 4 chế độ 1Hz,
4.096 HZ, 8.192 Hz, 32.768 Hz các chế độ này đuợc quy định bởi các bit của thanh
ghi Control Register (địa chỉ 0x07).
- SCL và SDA là đường giữ xung nhịp và đường dữ liệu của giao diện I2C .
19
20
1.2.2. Cấu tạo bên trong DS1307
Hình 1.4: Sơ đồ khối bên trong của DS1307
Cấu tạo bên trong DS1307 bao gồm một số thành phần như mạch nguồn, mạch
dao động, mạch điều khiển logic, mạch giao điện I2C, con trỏ địa chỉ và các thanh
ghi (hay RAM). Do đa số các thành phần bên trong DS1307 là thành phần “cứng”
nên chúng ta không có quá nhiều việc khi sử dụng DS1307. Sử dụng DS1307 chủ
yếu là ghi và đọc các thanh ghi của chip này. Vì thế cần hiểu rõ 2 vấn đề cơ bản đó là
cấu trúc các thanh ghi và cách truy xuất các thanh ghi này thông qua giao diện I2C
Như đã trình bày, bộ nhớ DS1307 có tất cả 64 thanh ghi 8−bit được đánh địa chỉ
từ 0 đến 63 (từ 0x00h đến 0x3Fh). Tuy nhiên, thực chất chỉ có 8 thanh ghi đầu là
dùng cho chức năng “đồng hồ”, còn lại 56 thanh ghi bỏ trống có thể được dùng chứa
biến tạm như RAM nếu muốn. Bảy thanh ghi đầu tiên chứa thông tin về thời gian của
đồng hồ bao gồm: giây (SECONDS), phút (MINUETS), giờ (HOURS), thứ (DAY),
21
ngày (DATE), tháng (MONTH) và năm (YEAR). Việc ghi giá trị vào 7 thanh ghi này
tương đương với việc “cài đặt” thời gian khởi động cho RTC. Việc đọc giá trị từ 7
thanh ghi là quá trình đọc thời gian thực mà RTC tạo ra.
Hình 1.5: Tổ chức bộ nhớ trong của DS1307
Vì 8 thanh ghi đầu tiên là quan trọng nhất trong hoạt động của DS1307, chúng
ta sẽ khảo sát các thanh ghi này một cách chi tiết. Trước hết hãy quan sát tổ chức
theo từng bit của các thanh ghi này trong hình sau:
Bảng 1.9 : Tổ chức theo từng bit của bộ nhớ
22
Chú ý là tất cả các giá trị thời gian lưu trong các thanh ghi theo dạng BCD (Binary-
Coded Decimal).
Thanh ghi giây (SECONDS): thanh ghi này là thanh ghi đầu tiên trong bộ nhớ
của DS1307, địa chỉ của nó là 0x00. Bốn bit thấp của thanh ghi này chứa mã BCD 4-
bit của chữ số hàng đơn vị của giá trị giây. Do giá trị cao nhất của chữ số hàng chục
là 5 nên chỉ cần 3 là đủ. Bit cao nhất (bit thứ 7) trong thanh ghi này là 1 bit điều
khiển có tên CH (Clock halt – treo đồng hồ), nếu bit này được set bằng 1 bộ dao
động trong chip bị vô hiệu hóa, đồng hồ không hoạt động. Vì vậy, nhất thiết phải
reset bit này xuống 0 ngay từ đầu.
Thanh ghi phút (MINUTES): có địa chỉ 0x01h, chứa giá trị phút của đồng hồ.
Tương tự thanh ghi SECONDS, chỉ có 7 bit của thanh ghi này được dùng lưu mã
BCD của phút, bit thứ 7 luôn luôn bằng 0.
Thanh ghi giờ (HOURS): có thể nói đây là thanh ghi phức tạp nhất trong chip
DS1307. Thanh ghi này có địa chỉ 0x02h. Trước hết 4 bit thấp của thanh ghi này
được dùng cho chữ số hàng đơn vị của giờ. Do DS1307 hỗ trợ 2 loại hệ thống hiển
thị giờ là: 12h và 24h giờ, vì vậy bit thứ 6 được dùng để xác lập hệ thống giờ. Nếu
bit thứ 6 = 0 thì hệ thống 24h được chọn, khi đó 2 bit thứ 5 và thứ 4 dùng mã hóa
chữ số hàng chục của giá trị giờ. Do giá trị lớn nhất của chữ số hàng chục trong
trường hợp này là 2 nên cần 2 bit để mã hóa. Nếu bit thứ 6 = 1 thì hệ thống 12h được
chọn. Với trường hợp này chỉ có 1 bit thứ 4 dùng mã hóa chữ số hàng chục của giờ,
bit thứ 5 chỉ buổi trong ngày (AM hoặc PM). Bit thứ 5 = 0 là AM và bit thứ 5 = 1 là
PM. Bit thứ 7 luôn bằng 0.
Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chỉ 0x03h. Thanh ghi DAY
chỉ mang giá trị từ 1 đến 7 tương ứng từ Chủ nhật đến thứ 7 trong 1 tuần. Vì thế, chỉ
có 3 bit thấp trong thanh ghi này có nghĩa. Các bit còn lại luôn bằng 0.
Thanh ghi ngày (DATE – ngày trong tháng): nằm ở địa chỉ 0x04h. Thanh ghi
DATE mang giá trị từ 1 đến 31, chỉ có 5 bit đầu tiên là có nghĩa. Các bit còn lại luôn
bằng 0.
Thanh ghi tháng (MONTH): nằm ở địa chỉ 0x05h. Thanh ghi MONTH mang giá
trị từ 1 đến 12, chỉ có 4 bit đầu tiên là có nghĩa. Các bit còn lại bằng 0.
Thanh ghi năm (YEAR): nằm ở địa chỉ 0x06h. Thanh ghi YEAR mang giá trị từ
0 đến 99. Chip DS1307 chỉ dùng cho 100 năm, nên giá trị năm chỉ có 2 chữ số, phần
đầu của năm do người dùng tự thêm vào.
23
Thanh ghi điều khiển (CONTROL REGISTER): có địa chỉ là 0x07h, thanh ghi
CONTROL REGISTER được dùng để điều khiển tần số xung vuông ở ngõ ra.
SQW/OUT. Giá trị các bít trong thanh ghi CONTROL REGISTER được biểu
diễn như sau:
Bit
7
Bit 6 Bit 5 Bit 4 Bit 3 Bit 2 Bit 1 Bit 0
OU
T
0 0 RQW
E
0 0 RS1 RS0
Bit 7_Output Control (OUT): dùng để kiểm soát mức logic tại SQW/OUT.
Bit 4_Square-Wave Enable (SQWE): bit này được set lên bằng 1 để tạo dao
động ở đầu ra.
Bits 1 and 0_ Rate Select (RS[1:0]): 2 bit này dùng điều khiển tần số dao động
ở ngõ ra SQW/OUT, với 4 tần số được chọn như sau:
RS1 RS0 SQW/OUT OUTPUT SQWE OUT
0 0 1 Hz 1 X
0 1 4.096 Khz 1 X
1 0 8.192 Khz 1 X
1 1 32.768 Khz 1 X
X X 0 0 0
X X 1 0 1
Bảng 1.10: Bảng tần số dao động của ngõ ra SQW/OUT
1.2.3. Khái quát giao diện I2C
I2C là viết tắt của từ Inter - Integrated Circuit là một chuẩn truyền thông nối
tiếp đồng bộ do hãng điện tử Philips Semiconductor sáng lập và xây dựng thành
chuẩn năm 1990.
Các khái niệm cơ bản trong giao diện I2C:
Master (chip chủ): là chip khởi động quá trình truyền nhận, phát đi địa chỉ của
thiết bị cần giao tiếp và tạo xung giữ nhịp trên đường SCL.
Slave (chip tớ): là chip có một địa chỉ cố định, được gọi bởi Master và phục vụ
yêu cầu từ Master.
24
SDA (Serial Data): là đường dữ liệu nối tiếp, tất cả các thông tin về địa chỉ
hay dữ liệu đều được truyền trên đường này theo thứ tự từng bit một. Chú ý là
trong chuẩn I2C, bit có trọng số lớn nhất (MSB) được truyền đi trước nhất.
SCL (Serial Clock): là đường xung giữ nhịp nối tiếp. I2C là chuẩn truyền
thông nối tiếp đồng bộ, cần có 1 đường tạo xung giữ nhịp cho quá trình
truyền/nhận, cứ mỗi xung trên đường giữ nhịp SCL, một bit dữ liệu trên đường
SDA sẽ được lấy mẫu (sample). Dữ liệu nối tiếp trên đường SDA được lấy
mẫu khi đường SCL ở mức cao trong một chu kỳ giữ nhịp, vì thế đường SDA
không được đổi trạng thái khi SCL ở mức cao (trừ điều kiện START và
STOP). Chân SDA có thể được đổi trạng thái khi SCL ở mức thấp.
Một giao tiếp I2C gồm có 2 dây: Serial Data (SDA) và Serial Clock (SCL).
SDA là đường truyền dữ liệu theo 2 hướng (từ master đến slave và ngược lại), còn
SCL là đường truyền xung đồng hồ chỉ truyền theo một hướng (từ master
đến slave).
Hình 1.6: Đường truyền dữ liệu của I2C
Trong một giao diện I2C thì có một thiết bị là chủ (master) và một thiết bị là
tớ (slave). Tại sao lại có sự phân biệt này? Đó là vì trên một giao diện I2C thì
quyền điều khiển thuộc về thiết bị chủ. Thiết bị chủ nắm vai trò tạo xung đồng bộ
cho toàn hệ thống, khi giữa 2 thiết bị chủ/tớ giao tiếp thì thiết bị chủ có nhiệm vụ
tạo ra xung đồng bộ và quản lý đến thiết bị tớ trong suốt quá trình giao tiếp. Thiết
bị chủ giữ vai trò chủ động, còn thiết bị tớ giữ vai trò bị động trong quá trình giao
tiếp.
Một giao diện I2C có thể hoạt động ở nhiều chế độ khác nhau:
Một chủ một tớ (one master – one slave)
Một chủ nhiều tớ (one master – multi slave)
Nhiều chủ nhiều tớ (Multi master – multi slave)
Vài điều kiện cần biết khi thiết lập một giao tiếp I2C:
25