Đối với loại Anode chung, một LED sẽ được bật sáng nếu mức logic đưa vào chân điều khiển đoạn LED đó là mức logic 0.. Đối với loại Cathode chung, một LED sẽ được bật sáng nếu mức logic đ
Trang 1Báo cáo quá trình thiết kế và thi công Đồng hồ thời gian thực RTC
Trang 2- Cấu tạo và chức năng các linh kiện sử dụng cho RTC
- Giải thuật và chương trình ứng dụng viết cho RTC
Các file đính kèm: File chương trình, sơ đồ nguyên lí và sơ đồ mạch in của RTC
- Sử dụng IC ghi dịch 74HC595 để tăng số lượng chân điều khiển cho vi điều khiển
- Sử dụng vi điều khiển PIC16F877A cho các thao tác truy cập thời gian thực, hiển thị giờ và chỉnh giờ Thực chất việc sử dụng PIC16F877A cho ứng dụng này là phí phạm,
vì ứng dụng không yêu cầu thêm một chức năng phụ nào của vi điều khiển ngoài chức năng I/O
RTC Version 1.0 là bản “nháp” và bao gồm các chức năng cụ thể sau:
- Hiển thị giờ, phút, giây, ngày, tháng, năm Không hiển thị thứ (quên mất tiêu ☺ )
- Điều chỉnh được giờ, phút, giây
Trang 32 Sơ đồ nguyên lí mạch RTC
Để thuận tiện cho việc bố trí góc nhìn, thiết kế mẫu mã sản phẩm và mục đích sử dụng, ứng dụng RTC sẽ bao gồm 3 mạch: mạch điều khiển, mạch hiển thị và mạch cho các nút bấm
2.1 Sơ đồ nguyên lí mạch điều khiển
Mạch điều khiển bao gồm các thành phần điều khiển chính như:
- Vi điều khiển PIC16F877A và các bộ phận hỗ trợ (thạch anh, reset, nạp chương trình dùng Tiny Bootloader, các Jumper cho các chân còn dư)
- IC thời gian thực DS12C887 và các thành phận hỗ trợ (điện trở kéo lên cho chân IRQ, reset)
- IC ghi dịch 74HC595
- Các khóa điện tử dùng Transistor A1015 phục vụ cho việc quét LED
- Các Bus điều khiển và Bus dữ liệu nối sang các Board hiển thị và Board nút bấm
- Nguồn cung cấp cho toàn bộ các Board Điện áp đưa vào nguồn là điện áp 9V lấy từ Adapter loại 9V/500mA
Sau đây là sơ đồ nguyên lí cụ thể cho Board điều khiển:
Trang 4Hình 1: Sơ đồ nguyên lí Board điều khiển
Trang 52.2 Sơ đồ nguyên lí Board hiển thị
Board hiển thị bao gồm các LED 7 đoạn Sơ đồ nguyên lí cụ thể như sau:
Hình 2: Sơ đồ nguyên lí Board hiển thị
Các giá trị giờ, phút, giây, ngày, tháng dùng 2 LED để hiển thị Giá trị năm dùng 4 LED
để hiển thị Tổng cộng ta cần sử dụng 14 LED
2.3 Sơ đồ nguyên lí Board nút bấm
Board nút bấm gồm 3 nút dùng để chỉnh giờ Sơ đồ nguyên lí như sau:
0
SW3 ALARMSET
R27 R
R29 R
SW4 INC
J2
CON6
1 2 3 4 5 6
0
R28 R
0
SW2 TIMESET
0
Hình 3: Sơ đồ nguyên lí Board nút bấm
3 Cấu tạo và chức năng các linh kiện sử dụng trong RTC
Phần này sẽ đi sâu vào cấu tạo bên trong của các linh kiện sử dụng cho RTC và cách điều khiển chúng sử dụng vi điều khiển PIC
Trang 63.1 LED 7 đoạn
3.1.1 Cấu tạo của LED 7 đoạn
LED 7 đoạn là một công cụ thông dụng được dùng để hiển thị các thông số dưới dạng các số từ 0 đến 9 Mặc dù công cụ LCD giúp ta thể hiện các thông số một cách linh động hơn nhưng LED 7 đoạn vẫn được sử dụng nhiều trong công nghiệp do các ưu thế của nó như: ít chịu ảnh hưởng của nhiệt độ, dễ tạo sự chú ý và góc nhìn rộng
LED 7 đoạn bao gồm 7 đoạn LED được đánh dấu là các kí tự a, b, c, d, e, f, g và một dấu chấm thập phân kí hiệu là dp Ta có thể xem LED 7 đoạn là một tổ hợp gồm 8 LED 8 LED này có một đầu (Anode hoặc Cathode) được nối chung và được bố trí theo một qui tắc nhất định dùng để hiển thị các chữ số thập phân
Có hai loại LED 7 đoạn, đó là loại Anode chung (cực Anode của các LED được nối chung với nhau) và loại Cathode chung (cực Cathode của các LED được nối chung với nhau) Tùy theo từng loại LED mà ta có các phương pháp điều khiển các LED trong tổ hợp
đó sáng tắt một cách thích hợp Đối với loại Anode chung, một LED sẽ được bật sáng nếu mức logic đưa vào chân điều khiển đoạn LED đó là mức logic 0 Đối với loại Cathode chung, một LED sẽ được bật sáng nếu mức logic đưa vào chân điều khiển đoạn LED đó là mức logic 1
Hình 4: LED 7 đoạn
Hình vẽ trên là một LED 7 đoạn loại Cathode chung Thực ra cấu trúc các chân của LED
7 đoạn có thể thay đổi chứ không cố định Một phương pháp để xác định chính xác các chân điều khiển của LED 7 đoạn là kiểm tra từng chân của LED đó
Dựa vào hình vẽ ta có thể hiểu được một phần nào phương pháp hiển thị của một LED
7 đoạn Ví dụ, muốn hiển thị số “6”, ta sẽ điều khiển các đoạn LED a, c, d, e, g, f sáng lên Việc điều khiển sáng tắt được thực hiện bằng cách đưa dữ liệu thích hợp vào các chân a-g
và dp (tạm gọi là các chân dữ liệu) của LED 7 đoạn Đó là cách hiển thị theo từng LED Tuy nhiên, trong thực tế, để tiết kiệm số chân cần thiết để điều khiển cùng một lúc nhiều LED 7 đoạn, các chân dữ liệu của các LED sẽ được nối song song với nhau, các chân anode chung
Trang 7(hoặc cathode chung) được dùng để cho phép LED đó sáng hay tắt (tạm gọi là các chân điều khiển) Phương pháp hiển thị sẽ dựa trên nguyên lí lưu ảnh của mắt
3.1.2 Xây dựng module hiển thị trên LED 7 đoạn
Module ứng dụng sau đây được xây dựng dùng để hiển thị 2 chữ số thập phân trên 2 LED 7 đoạn sử dụng loại LED 7 đoạn Anode chung
Trước hết ta sẽ tiến hành kết nối phần cứng giữa vi điều khiển và LED 7 đoạn để từ đó xác định được dữ liệu cần đưa vào LED 7 đoạn để hiển thị một chữ số thập phân nào đó Thứ tự kết nối các chân như sau:
- Chân dp nối vào chân RD7
- Chân g nối vào chân RD6
- Chân f nối vào chân RD5
- Chân e nối vào chân RD4
- Chân d nối vào chân RD3
- Chân c nối vào chân RD2
- Chân b nối vào chân RD1
- Chân a nối vào chân RD0
Muốn điều khiển một đoạn LED nào đó sáng lên, ta đưa vào chân điều khiển LED đó
về mức logic 0 Với cách nối chân như vậy, ta có bảng dữ liệu tương ứng với các chữ số cần hiển thị trên LED 7 đoạn như sau:
Chữ
số
RB7 (dp)
RB6 (g)
RB5 (f)
RB4 (e)
RB3 (d)
RB2 (c)
RB1 (b)
RB0 (a)
Mã HEX
Trang 8Dựa vào bảng dữ liệu trên, muốn hiển thị một chữ số lên LED 7 đoạn, ta chỉ việc đưa
mã HEX tương ứng với chữ số đó ra PORT D của vi điều khiển Bảng mã trên không cố định mà có thể thay đổi tùy thuộc vào cấu trúc phần cứng của mạch điều khiển Tùy theo cách kết nối mà ta có thể xây dựng bảng mã tương ứng
Để điều khiển việc cho phép một LED nào đó tắt hoặc sáng Ta nối các chân RB0 và RB1 với các chân điều khiển của LED thông qua các “công tắc” “Công tắc” này là các Transistor
và có cấu trúc mạch như hình 5 Khi chân điều khiển ở mức logic 1, transistor ngưng dẫn
và không có dòng vào LED 7 đoạn Khi chân diều khiển ở mức logic 0, transistor dẫn bão hòa và xuất hiện dòng điện đi qua các LED
Ta sẽ sử dụng chân RB0 để điều khiển LED hàng đơn vị và chân RB1 để điều khiển LED hàng chục
Trang 9A1015 SW1
A
330 330 330
G D
330 NTC3
PIC16F877A
1 2 3 4 5 6 7 8 9 10
11
12 13
14
15 16 17 18
19 20 21 22
23 24 25 26
27 28 29 30
31 32
33 34 35 36 37 38 39 40
MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+
RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7
VDD
VSS OSC1/CLKI
OSC2/CLKO
RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL
RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3
RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT
RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7
VSS VDD
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
Trang 11Tương tự ta có thể mở rộng số lượng LED bằng cách nối song song tất cả chúng lại với nhau và áp dụng giải thuật trên để hiển thị
Trang 12- Cho phép điều khiển linh họat và ổn định hơn: giữa các thanh ghi dịch và ngõ ra
có một “chốt” Điều này cho phép thay đổi linh hoạt dữ liệu trong các thanh ghi dịch và ổn định trạng thái logic ngõ ra
3.2.1 Cấu tạo của 74HC595
74HC595 là IC ghi dịch nối tiếp sang song với 8 ngõ ra QH:QA và bộ chốt dữ liệu 8 bit
Dữ liệu được đưa vào các thanh ghi dịch bên trong IC thông qua 1 chân SER (chân 14) và các chân điều khiển RCK (chân 12, điều khiển chốt dữ liệu), chân SCK (chân 11, điều khiển quá trình dịch dữ liệu), chân (chân 10, dùng để tác động lên quá trình xóa dữ liệu) chân Q’H (chân 9, chân đưa dữ liệu nối tiếp ra ngoài dùng để ghép nhiều IC lại với nhau)
Hình 7: Sơ đồ chân là bảng sự thật của 74HC595
Trang 13Hình 8: Sơ đồ khối 74HC595
Ta có thể điều khiển được một hoặc nhiều IC 74HC595 ghép với nhau thông qua 4 chân
ra của vi điều khiển Tuy nhiên nhược điểm của nó là thời gian truy xuất các ngõ ra chậm
Trang 14hơn so với việ truy xuất trực tiếp, vì dữ liệu phải được đưa từng bỉt vào IC trước khi cho xuất ra ngoài
Hình sau thể hiện cách nối nhiều IC ghi dịch lại với nhau Các chân điều khiển (RCK, SCK và ) được nối chung lại với nhau, chân dữ liệu nối tiếp ngõ ra (chân 9) của IC này được nối với chân dữ liệu nối tiếp ngõ vào của IC tiếp theo Ta có thể mở rộng số lương IC ghép với nhau theo cách tương tự mà số lượng chân điều khiển vẫn không đổi
0
74HC595 8
Hình 9: Nối nhiều IC 74HC595 với nhau
3.2.2 Xây dựng module điều khiển IC 74HC595
Cách điều khiển IC được thể hiện thông qua bảng sự thật ở hình 7 Trước tiên đưa 1 bit
dữ liệu vào chân SDI, sau đó tạo ra một xung dương ở chân SCK để dịch bit dữ liệu đó vào Trạng thái logic của chân SDI khi kích xung dương quyết định mức logic của bit được dịch vào Quá trình này được lặp đi lặp lại liên tục cho đến khi toàn bộ dữ liệu được dịch vào trong IC IC tiếp theo sẽ tiếp tục dịch dữ liệu vào từ chân SDO của của IC trước đó Khi quá trình dịch dữ liệu hoàn tất, ta tạo một xung dương ở chân RCK để đưa dữ liệu ra ngoài các chân ngõ ra QH:QA
Ứng dụng sau được dùng để đưa một byte dữ liệu ra IC ghi dịch 74HC595 Kết quả được kiểm định thông qua các LED được nối vào các chân QH:QA của IC
Các chân điều khiển sẽ được nối vào các chân RB3:RB0 của PORT B Cụ thể như sau:
- Chân RB0 nối với chân SDI
- Chân RB1 nối với chân SCK
Trang 15- Chân RB3 nối với chân RCK
Các thứ tự này không bắt buộc phải tuân thủ một cách tuyệt đối
Sau đây là sơ đồ nguyên lí mạch ứng dụng:
15 1 2 3 4 5 6 7 9 13
GND
RCK SRCLR SRCK SER
QA QB QC QD QE QF QG QH QHP G
PIC16F877A
1 2 3 4 5 6 7 8 9 10
11
12 13
14
15 16 17 18
19 20 21 22
23 24 25 26
27 28 29 30
31 32
33 34 35 36 37 38 39 40
MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+
RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7
VDD
VSS OSC1/CLKI
OSC2/CLKO
RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL
RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3
RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT
RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7
VSS VDD
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
SCK RCK
330
SDI CLR
Hình 10: Sơ đồ nguyên lí mạch ứng dụng điều khiển IC 74HC595
Sau đây là chương trình viết cho ứng dụng:
; đã gửi ra
; -
;Khai báo phần cứng
Trang 16; -
; -
; Khởi tạo IC 74HC595
; -
; -
; Đoạn chương trình xuất dữ liệu ra 74HC595
; -
Trang 17; -
; Chương trình con “serout”
; Dùng để đưa dữ liệu vào các thanh ghi dịch của IC 74HC595
; -
serout
cao (do chân tác động cạnh thấp) Nếu không các ngõ ra sẽ luôn ở trạng thái logic 0 (bị xóa)
Trong trường hợp nối nhiều IC lại với nhau ta chỉ việc lần lựot đưa dữ liệu vào thanh ghi “sendreg” và gọi chương trình con “serout” cho đến khi tất cả các dữ liệu được gửi ra hết
Trang 183.3 IC thời gian thực DS12C887
Đây là IC thời gian thực được sản xuất bởi hãng Dallas với một vài đặc tính sơ lược sau:
- Chứa các giá trị thời gian giây, phút, giờ, thứ, ngày, tháng, năm với thời gian hoạt động đúng đến năm 2100
- Bộ đếm hoạt động với thời gian 10 năm nếu không có nguồn điện ngoài cung cấp
- Các hệ thống bên trong bao gồm hệ thống thời gian thực, nguồn nội bằng Lithium
và bộ tạo dao động với bộ chia tần số đính kèm cho phép lập trình được Ngoài ra còn hỗ trợ các ngắt phục vụ cho quá trình xử lí thông tin của hệ thống bên ngoài
- Cho phép hai dạng dữ liệu BCD và Binary
- Cho phép chế độ hiển thị giờ 24 giờ hoặc 12 giờ (với AM và PM)
- Cho phép lựa chọn các chế độ giao tiếp BUS của Intel hoặc Motorola
- Bộ nhớ RAM 128 byte Trong đó gồm 15 byte chứa các giá trị thời gian và điều khiển, 113 byte còn lại được phép tùy ý sử dụng
- Các cờ ngắt hỗ trợ bao gồm: ngắt toàn cục, ngẳt báo giờ, ngắt báo hiệu cho phép/ không cho phép truy xuất giá trị thời gian thực
Sau đây là phần cấu tạo và xây dựng module điều khiển IC DS12C887
13 14 15 16 17 18 19 20 21 22 23
12
24
MOT NC NC AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
CS AS R/W NC DS RESET IRQ NC NC NC SQW
GND
VCC
Hình 11: Sơ đồ chân DS12C887 DS12C887 gồm 24 chân và có thể được chia làm 3 nhóm như sau:
Trang 19- Nhóm chân DATA: bao gồm các chân AD7:AD0 Đây là các chân mà DS12C887 dùng để đưa dữ liệu ra hay nhận dữ liệu vào
- Nhóm chân điều khiển giao tiếp BUS: bao gồm các chân MOT, AS, DS, R/W với các chức năng phụ thuộc vào việc lựa chọn chế độ giao tiếp BUS theo chuẩn của Intel (MOT =1) hay Motorola (MOT = 0)
- Nhóm chân chức năng: bao gồm các chân RESET (dùng để reset IC), IRQ (chân tác dộng của các ngắt trong DS12C887) và chân SQW (chân tạo sóng vuông ngõ ra)
- Ngoài ra còn có các chân dùng để cấp nguồn cho IC và các chân không cần thiết (NC)
Các thanh ghi chức năng:
SECOND
ALARM
MINUTES
ALARM
Ngoại trừ các thanh ghi “REGISTER A, B, C, D” dùng để điều khiển, các thanh ghi còn lại đều đựoc dùng để truy xuất dữ liệu
Sau đây là chức năng của từng bit trong các thanh ghi điều khiển
Trang 20THANH GHI REGISTER A
gian thực Bit này chỉ đọc UIP = 1: dữ liệu chưa sẵn sàng để truy xuất
UIP = 0: dữ liệu đã sẵn sàng cho quá trình truy xuất
DV2-DV0
Lựa chọn trạng thái hoạt động của IC Chỉ có giá trị 010 là cho phép IC hoạt động theo chế độ thời gian thực
Bit 3-0 RS3-RS0 Xác định tỉ số chia tần số của bộ tạo dao động
THANH GHI REGISTER B
SET = 1: không cập nhật thời gian vào các thanh ghi
PF Thời gian định kì được quyết định bởi các bit RS3-RS0 PIE =1: cho phép
PIE = 0: không cho phép
AIE = 1 : cho phép AIE = 0 : không cho phép
và cho phép cờ ngắt UF
UIE = 1 : cho phép UIE = 0 : không cho phép
được quyết định bởi các bit RS3:RS0
SQWE = 0 : không cho phép, chân SQW luôn ở mức 0
DM = 1 : dang dữ liệu là Binary
DM = 0 : dạng dữ liệu là BCD
24/12 = 1 : dạng 24 giờ 24/12 = 0 : dạng 12 giờ
THANH GHI REGISTER C
IRQF = 1 : có ngắt xảy ra IRQF = 0 : không có ngắt xảy ra
định kì
Trang 21AF = 0 : ngắt hẹn giờ chưa xảy ra
UF = 1 : quá trình cập nhật hoàn tẩt
UF = 0 : quá trình cập nhật chưa hoàn tất
THANH GHI REGISTER D
VRT = 0, nguồn nội bằng Lithium đã bị cạn và dữ liệu trong RAM là không xác định
Các thông tin khác có liên quan sẽ được tìm thấy trong datasheet của nhà sản xuất
3.3.2 Xây dựng module điều khiển IC DS12C887
Các thao tác cần thiết để làm việc với DS12C887 sẽ là thao tác đọc và ghi các giá trị trên
bộ nhớ của IC thông qua quá trình giao tiếp BUS
DS12C887 hỗ trợ hai chuẩn giao tiếp của Intel và Motorola Chuẩn giao tiếp được lựa chọn bằng chân MOT MOT = 1 sẽ cho phép chế độ giao tiếp thep chuẩn của Motorola MOT = 0 cho phép chế độ giao tiếp theo chuẩn của Intel
Ta chọn chuẩn của Intel (nối chân MOT xuống mass)
Ứng dụng sau dùng để kiểm tra các thao tác đọc ghi lên RAM của DS12C887 Sơ đồ nguyên lí của mạch ứng dụng như sau :
Trang 22NTC1
PIC16F877A
1 2 3 4 5 6 7 8 9 10
11
12 13
14
15 16 17 18
19 20 21 22
23 24 25 26
27 28 29 30
31 32
33 34 35 36 37 38 39 40
MCLR/VPP RA0/AN0 RA1/AN1 RA2/AN2/VREF-/CVREF RA3/AN3/VREF+
RA4/TOCKI/C1OUT RA5/AN4/SS/C2OUT RE0/RD/AN5 RE1/WR/AN6 RE2/CS/AN7
VDD
VSS OSC1/CLKI
OSC2/CLKO
RC0/T1OSO/T1CKI RC1/T1OSI/CCP2 RC2/CCP1 RC3/SCK/SCL
RD0/PSP0 RD1/PSP1 RD2/PSP2 RD3/PSP3
RC4/SDI/SDA RC5/SD0 RC6/TX/CK RC7/RX/DT
RD4/PSP4 RD5/PSP5 RD6/PSP6 RD7/PSP7
VSS VDD
RB0/INT RB1 RB2 RB3/PGM RB4 RB5 RB6/PGC RB7/PGD
3
4 5 6 7 8 9 10 11
13
14 15
16
17
18 19
20
21 22
23
12 24
MOT NC
NC
AD0 AD1 AD2 AD3 AD4 AD5 AD6 AD7
CS
AS R/W
NC
DS
RESET IRQ
NC
NC NC
Hình 12: Sơ đồ nguyên lí mạch ứng dụng điều khiển DS12C887
Yêu cầu của ứng dụng là ghi một giá trị nào đó lên một thanh ghi trong RAM của
DS12C887, sau đó đọc ra và kiểm tra kết quả bằng việc xuất ra các LED ở PORT B
Dựa vào giản đồ xung được cung cấp bởi datasheet của nhà sản xuất, muốn ghi một giá trị lên RAM của DS12C887 theo chuẩn giao tiếp của Intel ta lần lượt tiến hành các bước sau:
- Bước 1: Đưa chân DS và RW lên mức logic 1
- Bước 2: Xuất địa chỉ cần ghi lên RAM ra các chân data của DS12C887
- Bước 3: Tạo cạnh xuống tại chân AS
- Bước 4: Đưa dữ liệu cần ghi lên RAM ra các chân data của DS12C887
- Bước 5: Đưa chân RW về mức logic 0
- Bước 6: Tạo cạnh lên tại chân AS
Do các chân dữ liệu của DS12C887 được nối với PORT D nên khi cần đưa giá trị địa chỉ hay dữ liệu vào các chân data của DS12C887, ta chỉ cần xuất các giá trị địa chỉ hoặc dữ liệu
đó ra PORT D của vi điều khiển
Muốn đọc một giá trị từ một thanh ghi trong RAM của DS12C887 ta tiến hành lần lượt các bước như sau: