MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................ MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................ MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................ MẠCH ĐỒNG hồ DÙNG VI xử lý AT89C51 ................................................
Trang 1Hình 2- 1: Sơ đồ hệ thống
Hình 2- 2: Khối nguồn
Hình 2- 3: Khối nguồn hoàn chỉnh
Hình 2- 4: Khối vi điều khiển
Hình 2- 5: Khối hiển thị
Hình 2- 6: Khối hiển thị hoàn chỉnh
Hình 2- 7: Sơ đồ mạch điều khiển
Hình 2- 8: Khối điều khiển hoàn chỉnh.
Hình 2- 9: DS1307
Hình 2- 10: Mạch nguyên lý khối điều khiển
Hình 2- 11: Mạch nguyên lý khối hiện thị
Hình 2- 12: PCB mạch nguồn
Hình 2- 13: PCB mạch 6 led hiển thị
Hình 2- 14: PCB Mạch điều khiển trung tâm
Trang 5ở đây luôn hiển thị chính xác như thời gian thực mà chúng ta đang sử dụng kể cảkhi mất nguồn chính.
1.2 Mô tả chức năng hoạt động của mạch
Thời gian sẽ tự động lưu vào bộ nhớ ta chỉ cần cài đặt thời gian một lần.
Đề chỉnh Giờ ta nhấn nút Cài Đặt lần thứ nhất, nhấn nút Tăng để chỉnh giờ lên, nhấn nút Giảm để giảm giờ xuống, sau đó nhấn nút Ok
để hoàn tất phần cài đặt giờ.
Tiếp đến để chỉnh Phút, nhấn nút Tăng để chỉnh phút lên, nhấn nút Giảm để giảm phút xuống, sau đó nhấn nút Ok để hoàn tất phần cài đặt phút.
Tiếp đến để chỉnh Giây, nhấn nút Tăng để chỉnh giây lên, nhấn nút Giảm để giảm giây xuống, sau đó nhấn nút Ok để hoàn tất phần cài đặt giây.
Nhấn nút Cài Đặt lần thứ hai , để quá trình cài đặt thời gian hoàn tất.
Để cài đặt báo thức , ta nhấn nút Báo Thức.
Tiếp đến nhấn nút Tăng để chỉnh giờ lên, nhấn nút Giảm để giảm giờ xuống, nhấn nút Ok để hoàn tất phần cài đặt giờ báo thức.
Trang 6Tiếp đến nhấn nút Tăng để chỉnh phút lên, nhấn nút Giảm để giảm phút xuống, sau đó nhấn nút Ok để hoàn tất phần cài đặt phút báo thức.
Tiếp đến nhấn nút Cài Đặt để chọn lựa chế độ hoạt động của báo thức , nhấn Tăng hoặc Giảm để chọn ON “ đồng ý báo thức” OFF “ hủy báo thức” , sau đó nhấn nút Ok để hoàn tất quá trình cài đặt báo thức.
Để tắt chuông báo thức.
Nhấn giữ nút Báo Thức trong 3s , để tắt chuông báo thức.
Nhấn nút Cài Đặt , sau đó nhấn nút Tăng hoặc Giảm để lựa chọn chế
độ ON/OFF của báo thức, ta chọn OFF
Nhấn nút Ok để hoàn tất quá trình tắt báo thức.
1.3 Nguyên lý chung
1.3.1 Nguyên Lý Quét LED 7 Thanh
Để hiển thị 1 led 7 thanh, ta cần 8 chân để gởi dữ liệu cho nó Dựa trên hiện tượnglưu ảnh nên khi ta đóng và mở các led với tần số cao sẽ làm cho ta thấy như ledkhông bị tắt mà sẽ thấy led sáng liên tục
Với phương pháp quét led 7 thanh ta mắc trực tiếp các chân A,B,C,D,E,F,G,DPcủa các led 7 thanh lại với nhau và điều khiển thông qua các chân nguồn
Trang 7Hình 1- 1:Sơ đồ quét LED
1.3.2 Giao tiếp I2C
1.3.2.1 Giới thiệu
Vào những năm 1980 Phillips đã phát triển ra một chuẩn giao tiếp nối tiếp 2 dâyđược gọi là I2C (Inter-Intergrated Circuit)
Trang 8Hình 1- 2:Bus I2C và các thiết bị ngoại vi
1.3.2.2 Đặc Điểm Giao Tiếp I2C
Một giao tiếp I2C gồm có 2 dây: SDA (Serial Data) và SCL (Serial Clock) SDA làđường truyền dữ liệu 2 hướng, còn SCL là đường xung đồng hồ và chỉ theo 1hướng
Hình 1- 3:Kết nối thiết bị vào bus I2C
Trong một giao tiếp I2C thì hoạt động truyền hay nhận còn tùy thuộc vào thiết bị
đó là Master( thiết bị chủ ) hay Slave (thiết bị tớ) Trong đó quyền điều khiểnthuộc về thiết bị chủ Thiết bị chủ có vai trò tạo xung clock cho toàn hệ thống vàquản lí địa chỉ của thiết bị tớ
Dựa vào hình có thể thấy dữ liệu có thể truyền từ thiết bị chủ sang thiết bị tớ hayngược lại, nhưng xung clock chỉ truyền theo 1 hướng từ thiết bị chủ sang thiết bịtớ
1.3.2.3 Các Chế Độ Truyền Dữ Liệu Của I2C:
Standard mode : Chế độ chuẩn
Fast mode : Chế độ nhanh
High-Speed mode : Chế độ cao tốc
Trang 9Quá trình truyền dữ liệu trong giao tiếp I2C: bao gồm hai quá trình là đọc và ghi
Hình 1- 4: Quá trình Start / Stop trong I2C
Hình 1- 5: Quá trình truyền dữ liệu I2C
Trang 10Hình 1- 6: Truyền từ Master sang Slave (Ghi dữ liệu)
Hình 1- 7: Truyền từ Slave sang Master (Đọc dữ liệu)
Hình 1- 8: Quá trình đọc dữ liệu
1.4 Giới thiệu về linh kiện
1.4.1 IC vi điều khiển AT89C51
1.4.1.1 Giới thiệu chung IC vi điều khiển AT89C51
Intel công bố chip 8051 là bộ điều khiển đầu tiên của họ vi điều khiển MCS-51.Hiện nay Intel không còn cung cấp các loại vi điều khiển họ MCS-51 thay vào đó
là hãng Atmel sản xuất cung cấp các chip vi điều khiển có tính năng tương tự nhưchip vi điều khiển của Intel Mã 8051 của Intel chuyển thành 8951 của Atmel IC
vi điều khiển AT89C51 gồm:
Dung lượng ROM 4KbyteDung lượng RAM 128 byte
4 port xuất nhập (I/O port ) 8 bit
Trang 111 bộ định thời 16 bitMạch giao tiếp truyền dữ liệu nối tiếp
Có thể mở rộng không gian nhớ chương trình ngoài 64Kbyte
Có thể mở rộng không gian nhớ dữ liệu ngoài 64 KByte
Bộ xử lý bit ( thao tác trên các bit riêng rẽ)
210 bit có thể truy xuất đến từng bit
Hình 1- 9: Sơ đồ khối IC vi xử lý AT89C51
Interrupt control : điều khiển ngắt
Other registers : các thanh ghi khác
128 bytes RAM : RA.M 128 byte
Timer 2, 1, 0 : bộ định thời 2, 1, 0
CPU : đơn vị diều khiển trung tâm
Oscillator : mạch dao động
Bus control : điều khiển bus
I/O ports : các po.rt xuất/nhập
Serial port : port nối tiếp
Address/data : địa chỉ/dữ liệu
Trang 121.4.1.2 Sơ đồ chân và chức năng từng chân IC vi điều khiển AT89C51
Hình 1- 10: Sơ đồ chân IC vi xử lý AT89C51
Chân VCC: Chân số 40 là VCC cấp điện áp nguồn cho vi điều khiển Nguồn điện
cấp là +5V
Chân GND: Chân số 20 nối GND.
Port 0 (P0): Port 0 gồm 8 chân ( từ chân 32 đến 39 ) có hai chức năng xuất /
nhập : Các chân này dùng để nhận tín hiệu từ bên ngoài để xử lý hoặc dùng đểxuất tín hiệu ra bên ngoài Port 0 còn làm nhiệm vụ lấy dữ liệu từ ROM hoặcRAM ngoại, đồng thời Port 0 còn dùng để định địa chỉ của bộ nhớ ngoài
Port 1 (P1): Gồm 8 chân ( từ chân 1 đến chân 8) chỉ có chức năng làm đường xuất
nhập
Port 2 (P2): Gồm 8 chân ( từ chân 21 đến chân 28) có 2 chức năng: Chức năng
xuất/nhập ; Chức năng là bus địa chỉ cao
Port 3(P3): Gồm 8 chân (từ chân 10 đến chân 17) có chức năng xuất/nhập và với
mỗi chân có một chức năng riêng thứ hai trong bảng sau :
Trang 13Bit Tên Chức năng
P3.0 RxD Ngõ vào nhận dữ liệu nối tiếp
P3.1 TxD Ngõ xuất dữ liệu nối tiếp
P3.2 INT0 Ngõ vào ngắt cứng thứ 0
P3.3 INT1 Ngõ vào ngắt cứng thứ 1
P3.4 T0 Ngõ vào của Timer/Counter thứ 0
P3.5 T1 Ngõ vào của Timer/Counter thứ 1
P3.6 WR Ngõ điều khiển ghi dữ liệu lên bộ nhớ ngoài
P3.7 RD Ngõ điều khiển đọc dữ liệu từ bộ nhớ ngoài
Bảng 1- 1: Chức năng Port 3
Chân RESET (RST): ở chân số 9 dùng để thiết lập trạng thái ban đầu cho vi điều
khiển
Chân XTAL1 và XTAL2: hai chân này ở vị trí chân số 18 và 19 Được sử dụng
đề nhận nguồn xung clock từ bên ngoài để hoạt động
1.4.2 Đồng hồ thời gian thực DS1307
1.4.2.1 Giới thiệu
DS1307 là chip đồng hồ thời gian thực (RTC : Real-ime clock), khái niệm thờigian 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ờ 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ó 1thanh ghi điều khiển ngõ ra phụ và 56 thanh ghi trống có thể dùng như RAM
1.4.2.2 Sơ đồ chân DS1307
Trang 14Các chân DS1307 được mô tả như sau:
X1 và X2 là 2 ngõ kết nối với thạch anh 32.768KHz -> tạo dao động cho chip
VBAT kết nối với cực dương của pin dự phòng ở đây ta dùng Pin CMOS 3V
GND nối đất
VCC nối với nguồn chính 5VDC.SQW/OUT ngõ xuất xung vuông
SCL chân nhận xung clock đồng bộ khi két nối bus I2C
SDA chân dữ liệu khi kết nối với I2C
1.4.2.3 Bộ nhớ DS1307
IC DS1307 có 56 Bytes RAM và 8 Bytes của thanh ghi RTC (00-07H)
Bảy thanh ghi đầu tiên chứa thông tin về thời gian của đồng hồ
Nội dung của các thanh ghi được lưu dưới dạng mã BCD
Hình 1- 12: Tổ chức bộ nhớ của DS1307
1.4.2.4 Các thanh ghi của DS1307
Việc lấy thời gian chỉ đơn giản là đọc dữ liệu từ các thanh ghi thích hợp
Trang 15Bảng 1- 2: Tổ chức các thanh ghi thời gian
Thanh ghi giây (SECONDS) có địa chỉ là 0x00
Thanh ghi phút (MINUTES) có địa chỉ là 0x01
Thanh ghi giờ ( HOURS) có địa chỉ 0x02 Thanh ghi giờ có 2 chế độ hoạt động là hiển thị chế độ 12h (Từ 1h đến 12h) và hiển thị chế độ 24h (Từ 1h đến 24h) giờ Bit thứ 6 của thanh ghi giờ quyết định chế độ 12 hay 24 Nếu bit6 = 0 chế độ 24h hoạt động, bit6 = 1 chế độ 12h hoạt động
Trang 161.4.3.3 Sơ đồ chân LED
Hình 1- 13: Sơ đồ chân led 7 thanh 3x4
Chân 1 và chân 5 là hai chân chung
1.4.3.4 Bàng mã hiển thị LED 7 thanh từ 0 đến 9
Bảng 1- 3: Bảng mã loại Anode chung
Trang 171.4.4 IC ổng áp 7805
7805 là loại IC dùng để ổn định điện áp dương đầu ra, với điều kiện đầu vào luônluôn > đầu ra 2V
Hình 1- 14: IC 7805
Cấu tạo IC 78xx gồm có 3 chân :
Chân 1 (Vin): Chân nguồn đầu vào, điện áp cấp vào chân từ 7V đến 20V Chân 2 (GND): Chân nối đất
Chân 3 (Vout): Chân nguồn đầu ra, điện áp ngõ ra ổn định là 5V
Điện áp ra tương ứng với dòng là 1.5A
1.4.5 Transistor
1.4.5.1 Giới thiệu
Transistor là một loại linh kiện bán dẫn chủ động thường được sử dụng như mộtphần tử khuyếch đại hoặc một khóa điện tử
Trang 18Hình 1- 15: Các dạng Transistor
1.4.5.2 Cấu Tạo
Transistor gồm 3 lớp bán dẫn loại P và loại N ghép lại với nhau Do đó có 2 loạitransistor là NPN và PNP tương ứng với 2 cách sắp xếp 3 lớp bán dẫn như sau:
Hình 1- 16: Sơ đồ chân Transistor
Như hình vẽ, transistor có 3 cực, cực giữa gọi là cực gốc B (Base); cực thu hay cực góp (Collector) viết tắt là C và E (Emitter) được gọi là cực phát tương ứng với 3 lớp bán dẫn Sự phân hóa thành 3 cực này là do đặc tính vật lí của 3 lớp bán dẫn là khác nhau
Trang 191.4.7.2 Cấu Tạo
Bên trong tụ điện là 2 bản cực kim loại được đặt cách điện với nhau, môi trườnggiữa 2 bản tụ này được gọi là điện môi (môi trường không dẫn điện) Điện môi cóthể là: không khí, giấy, mica, dầu nhờn, nhựa, cao su, gốm, thuỷ tinh Tùy theolớp cách điện ở giữa hai bản cực là gì thì tụ có tên gọi tương ứng
1.4.7.3 Phân Loại Tụ Điện
Tụ điện có hai loại: tụ phân cực và tụ không phần cực
Tụ điện phân cực: thường là tụ hóa, tụ hóa là tụ phân cực âm dương có trị số lớn
và giá trị từ 0.47uF đến khoảng 4.700uF, tụ hóa thường được sử dụng trong cácmạch có tần số thấp hoặc dùng để lọc nguồn, tụ hóa luôn luôn có hình trụ
Ký hiệu:
Trang 20Hình 1- 18: Tụ điện hóa
Tụ không phân cực: thường là tụ gốm, tụ giấy, tụ mica Các loại tụ này thường
không phân biệt âm dương và thường thì có điện dung nhỏ từ vài 0.47uF trở xuống Các tụ này thường dược sử dụng trong các mạch điện có tần số cao hay mạch lọc nhiễu
Có rất nhiều loại điện trở, như:
Trang 22CHƯƠNG 2 THIẾT KẾ VÀ THI CÔNG HOÀN THIỆN MẠCH
Trang 23Tác dụng của tụ điện: Dùng để lọc phẳng các tín hiệu điện.
Hình 2- 3: Khối nguồn hoàn chỉnh
Trang 242.2.2 Khối Vi Điều Khiển
Hình 2- 4: Khối vi điều khiển
Dùng vi điều khiển IC AT89C51 nhận dữ liệu thời gian từ IC thời gian thựcDS1307 thông qua 2 chân SCL và SDA thông qua giao tiếp I2C, sau đó lựa chọnchế độ hiển thị thông qua khối điều khiển ( các nút nhấn ) và hiển thị giá trị lênLED 7 thanh thông qua Port 0 & Port 2
Trang 252.2.3 Khối Hiển Thị
Hình 2- 5: Khối hiển thị
Khối hiển thị dùng 6 LED 7 thanh loại Anode chung để hiển thị thời gian Giờ/Phút/ Giây
Khi hiển thị thời gian:
LED1 & LED2: hiển thị Giờ
LED3 & LED4: hiển thị Phút
LED5 & LED6: hiển thị Giây
4 LED đơn luôn sáng để năn cách Giờ/ Phút/ Giây
Các LED được cấp nguồn từ VCC thông qua Transistor PNP (A1015), vì dòng từchân vi điều khiển không đủ để cấp cho led 7 thanh
Khi ngõ ra của vi điều khiển ở mức 0 kích cho chân B của Transistor làm cho Transistor hoạt động dòng đi từ chân E (VCC) chạy sang C (chân nguồn của Led 7
Trang 26thanh loại Anode chung).
Hình 2- 6: Khối hiển thị hoàn chỉnh
Trang 272.2.4 Khối Điều Khiển
Hình 2- 7: Sơ đồ mạch điều khiển
Trang 28Hình 2- 8: Khối điều khiển hoàn chỉnh.
2.2.5 DS 1307
Hình 2- 9: DS1307
DS 1307 được dùng để cung cấp dữ liệu thời gian cho vi điều khiển, 2 chân SCL
và SDA được dùng để tạo 2 bus dữ liệu theo chuẩn I2C để truyền dữ liệu và nhận
dữ liệu điều khiển từ vi điều khiển AT89C51 ở Port 1
DS 1307 cần một nguồn nuôi 3V, ở đây sử dụng Pin CMOS 3V Để cho DS 1307 lưu giữ thời gian khi nguồn chính 5VDC không hoạt động
Trang 292.3 Thiết kế mạch nguyên lý
Hình 2- 10: Mạch nguyên lý khối điều khiển
Hình 2- 11: Mạch nguyên lý khối hiện thị
Trang 322.6 Mạch hoàn chỉnh
Hình 2- 15: Đồng hồ đã hoàn thiện
Trang 33CHƯƠNG 3 GIẢI THUẬT VÀ ĐIỀU KHIỂN
3.1 Lưu Đồ Giải Thuật
Hình 3- 1: Nạp dữ liệu thời gian vào DS
Ở lần đầu tiên cấp nguồn cho mạch ta phải tiến hành nạp dữ liệu thời gian vàođồng hồ thời gian thực DS 1307
Trang 343.1.1 Cài Đặt Thời Gian
3.1.1.1 Chỉnh Giờ
Hình 3- 2: Cài đặt giờ
Trang 353.1.1.2 Chỉnh Phút
Hình 3- 3: Cài đặt phút
Trang 363.1.1.3 Chỉnh Giây
Hình 3- 4: Cài đặt giây
Trang 373.1.2 Cài Đặt Báo Thức
3.1.2.1 Báo Thức Giờ
Hình 3- 5:Cài đặt báo thức giá trị giờ
Trang 383.1.2.2 Báo Thức Phút
Hình 3- 6: Cài đặt báo thức giá trị phút
3.2 Code chương trình
#include <REGX51.H>
Trang 39// Cac lenh dinh nghia so thu tu led ///
// Khai bao ma led 7 //
unsigned char so[]={0xC0,0xF9,0xA4,0xB0,0x99,0x92,0x82,0xF8,0x80,0x90,0xFF};/* -*/
Trang 40char gioBaoThuc,phutBaoThuc,baoThuc; // Khai baobien thuc hien bao thuc thoi gian
// - Tao do tre Delay //
void delay_ms(unsigned int t)
Trang 41delay_ms(1); // delay 1 khoang thoi gian ngan
Trang 42void I2C_KetThuc()
{
SDA=0; // cho SDA xuong 0 de chuan bi dua len 1
SDA=1; // SDA duoc dua len muc 1 Qua trinh Stophoan tat
}
/* -*/
/* Mô ta :
Viet du lieu trong chuan I2C
Nhiem vu : VDK truyen du lieu vao slaver ( o day la DS1307)
Tham bien truyen vao : dat
Tra ve : 0 hoac 1 ( khong nhat thiet phai tra ve, muc dich la lay bit ack de kiem tra quatrinh truyen du lieu da ok chua)
bang cach goi ham va nhap vao 1 byte du lieu can truyen ta se truyen duoc duoc dulieu do vao slaver
*/
bit I2C_Viet(unsigned char dat) // khai bao ham truyen du lieu va biendat
{
unsigned char i; // khai bao bien i
for(i=1;i<=8;i++) //vong lap for lap 8 lan tuong duong 8bit ( 1 byte)
Trang 43dat = dat <<1; // dich trai 1 lanSCL = 1;
SCL = 0; // tao 1 xung clock tren chan SCL
de dich gia tri 1 hoac 0 tren chan SDA vao slaver
}
SDA = 1;
chuan bi doc bit ack
}
/* giai thich dong 100 > 116
De co the truyen 1 byte ( vi du 0xBA) vao slaver ta tien hanh tach 1 byte do ra thành 8bit do do can co vong lap for 8 lan ( moi lan truyen 1 bit)
Dau tien i=1
truyen bit thu nhat : ta co 0xBA = 1 0 1 1 1 0 1 0 Bit dau tien la bit so 1 ( bentay trai, truyen tu trai sang phai)
TA có : 0xBA & 0x80 = 10111010 & 10000000 =
10000000
Doket qua nhan dc la 10000000 khac 0 ma outbit chi nhan 2 gia tri 1 hoac 0 , Cho nenoutbit = 1
Nhuvay, ta da truyen dc bit dau tien la 1 vao I2C
Sau
do dich 0xBA sang 1 : 0xBA <<1 = 01110100
Trang 44Cu nhu vay 8 lan byte 0xBA se duoc truyen sang slaver
/* -end I2C Viet -*/
SCL = 1; // cho SCL len =1 , slaver se gui
1 bit vao chan SDA
inbit = SDA; // lay gia tri cua chan SDA gán vao inbitdat = dat << 1; // dich byte data sang trái 1 landat = dat | inbit; // muc dich la gán giá tri cua bit inbitvao byte dat
SCL = 0; // cho SLC xuong muc 0 sansang cho lan doc bit tiep thep
Trang 45I2C_Viet(0xd0); //0xd0 la dia chi cua ds1307
I2C_Viet(add); // gia tri can ghi
I2C_Viet(((dat/10)<<4)|(dat%10)); // do du lieu trong ds la BCD nen tacan chuyen ca gia tri sang BCD ( day cau lenh chuyen du lieu sang BCD)
I2C_KetThuc(); // ket thuc qua trinh truyen du lieu
unsigned char dat;
I2C_Viet(0xd0); // dau tien gui lenh ghi du lieu(ghi diachi can lay du lieu trong DS1307)
Trang 46I2C_BatDau(); // bat dau doc du lieu
I2C_Viet(0xd1); // gui ma lenh doc du lieu tu diachi(add)
dat = I2C_Doc(0); // doc xong thi luu gia tri da doc dc vao datI2C_KetThuc(); // ket thuc qua trinh doc du lieu
dat = (dat & 0x0f) + (dat>>4)*10; // du lieu doc ra o dang BCD nenchuyen sang he 10
return(dat); // tra ve gia tri da doc duoc