Tải bản đầy đủ (.docx) (41 trang)

MẠCH ĐỒNG hồ số HIỂN THỊ THỜI GIAN THỰC TRÊN LCD DÙNG PIC16F877A (có code và sơ đồ mạch)

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (1.35 MB, 41 trang )

ĐỒ ÁN 1

MẠCH ĐỒNG HỒ SỐ HIỂN THỊ THỜI
GIAN THỰC TRÊN LCD DÙNG PIC
16F877A


Đồ án 1
MỤC LỤC

DANH MỤC HÌNH ẢNH

2


Đồ án 1

CHƯƠNG 1.

TỔNG QUAN VỀ MẠCH ĐỒNG HỒ SỐ HIỂN THỊ

THỜI GIAN THƯC TRÊN LCD DÙNG PIC 16F877A
1.1 Giới thiệu
Mạch đồng hồ số hiển thị thời gian thực trên LCD dùng PIC 16F877A cho hiển thị
chính xác thời gian thực do sử dụng IC DS1307. Ngoài ra ta có thể tùy chỉnh thời
gian theo ý muốn bằng các nút nhấn cài đặt, tăng, giảm và ok.
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ài đặt thời gian một lần.
Để chỉnh giờ ta nhấn nút cài đặt một lần và nhấn nút tăng hoặc giảm để chỉnh giờ
theo ý muốn. Sau đó nhấn ok để hoàn tất phần chỉnh giờ. Tương tự vậy ta thực
hiện cho phần chỉnh phút và chỉnh giây. Nhấn nút cài đặt thêm lần nữa để chỉnh


ngày, tháng, năm tương tự như chỉnh giờ phút giây. Nhấn nút cài đặt thêm lần nữa
để hoàn tất phần cài đặt.
1.3 Nguyên lý chung
1.3.1

Giao tiếp I2C

1.3.1.1 Giới thiệu

Vào những năm 1980, Phillips đã phát hiện ra 1 chuẩn giao tiếp 2 dây được
gọi là I2C( Inter-Intergrated Circuit).

Hình 1- 1: BusI2C và các thiết bị ngoại vi

3


Đồ án 1

1.3.1.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 hai hướng,
còn SCL là đường xung đồng hồ và chỉ theo 1 hướng.

Hình 1-2: Kết nối thiết bị vào bus I2C

Hình 1- 2: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ển thuộ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ớ hay ngượ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.1.3 Các chế độ truyền dữ liệu của giao tiếp I2C

+ Standard mode :

Chế độ chuẩn.

+ Fast mode :

Chế độ nhanh.

+ High-Speed mode : Chế độ cao tốc.

4


Đồ án 1
-

Quá trình truyền dữ liệu trong giao tiếp I2C: bao gồm hai

-

quá trình là đọc và ghi dữ liệu

Dấu hiệu Start và Stop là những điều kiện bắt buộc khi

-

một Master muốn thiết lập giao tiếp với 1 Slave.
Dấu hiệu Start : SDA được đưa từ mức 1 sang mức 0 trong

-

khi SCL ở mức 1.
Dấu hiệu Stop : SDA được đưa từ mức 0 sang mức 1 trong
khi SCL ở mức 1.

Hình 1- 3: Quá trình Start / Stop trong I2C

C

Hình 1-4: Quá trình truyền dữ liệu I2C
Hình 1- 5: Truyền từ Master sang Slave (Ghi dữ liệu)

Hình 1-6: Truyền từ Slave sang Master ( Đọc dữ liệu)

5


Đồ án 1
1.1.1.1

1.4 Giới thiệu linh kiện
1.4.1


PIC 16F877A

1.4.1.1 Giới thiệu chung

PIC16F877A có các chân với sự phân chia cấu trúc như sau :
+ Có 5 port xuất/nhập
+ Có 8 kênh chuyển đổi A/D 10-bit
+ Có 2 bộ PWM
+ Có 3 bộ định thời: Timer0, timer1 và timer2
+ Có giao tiếp truyền nối tiếp: chuẩn RS 232, I2C…
+ Có giao tiếp LCD

Hình 1- 7: Hình ảnh PIC 16F877A

6


Đồ án 1

1.4.1.2 Sơ đồ chân và chức năng từng chân PIC 16F877A

Hình 1- 8: Sơ đồ chân PIC 16F877A

• Chân MCLR/Vpp : có 2 chúc năng
 MCLR: là ngõ vào reset tích cực mức thấp
 Vpp: ngõ vào nhận điện áp khi ghi dữ liệu vào bộ nhớ nội







flash
Chân RA0/AN0: có 2 chức năng
 RA0: xuất / nhập số
 AN0: ngõ vào tương tự của kênh 0
Chân RA1/NA1:
 RA1: xuất / nhập số
 AN1: ngõ vào tương tự kênh 1
Chân RA2/AN2/VREF-/CVREF:
 RA2: xuất / nhập số
 AN2: ngõ vào tương tự của kênh thứ 2
 VREF-: ngõ vào điện áp chuẩn (thấp) của bộ ADC.
 CVREF: điện áp tham chiếu VREF ngõ ra bộ so sánh
Chân RA3/AN3/VREF+:
 RA3: xuất / nhập số
 AN3: ngõ vào tương tự kênh 3
7


Đồ án 1













 VREE+: ngõ vào điện áp chuẩn (cao) của bộ A/D
Chân RA4/TOCKI/C1OUT:
 RA4: xuất / nhập số - mở khi được cấu tạo là ngõ ra
 TOCKI: ngõ vào xung clock từ bên ngoài cho Timer0
 C1OUT: ngõ ra bộ so sánh 1
Chân RA5/AN4/ SS /C2OUT:
 RA5: xuất / nhập số
 AN4: ngõ vào tương tự kênh 4
 SS: ngõ vào chọn lựa SPI phụ
 C2OUT: ngõ ra bộ so sánh 2
Chân RE0/ RD /AN5:
 RE0: xuất / nhập số
 RD: điều khiển đọc port song song
 AN5: ngõ vào tương tự kênh5
Chân RE1/ WR /AN6:
 RE1: xuất / nhập số
 WR: điều khiển ghi port song song
 AN6: ngõ vào tương tự kênh6
Chân RE2/ CS /AN7:
 RE2: xuất / nhập số
 CS: Chip chọn lựa điều khiển port song song
 AN7: ngõ vào tương tự kênh 7
Chân OSC1/CLKI:
 OSC1: ngõ vào dao động thạch anh hoặc ngõ vào nguồn xung
ở bên ngoài. Ngõ vào có mạch Schmitt Trigger nếu sử dụng


dao động RC
 CLKI: ngõ vào nguồn xung bên ngoài
• Chân OSC2/CLKO:
 OSC2: ngõ ra dao động thạch anh. Kết nối đến thạch anh hoặc
bộ cộng hưởng
 CLKO: ở chế độ RC, ngõ ra của OSC2, bằng ¼ tần số của
OSC1 và chính là tốc độ của chu kì lệnh
• Chân RC0/T1OSO/T1CKI:
 RC0: xuất / nhập số
 T1OSO: ngõ ra của bộ dao động Timer1
 T1CKI: ngõ vào xung Clock từ bên ngoài Timer1
• Chân RC1/T1OSI/CCP2:
 RC1: xuất / nhập số
8


Đồ án 1
 T1OSI: ngõ vào của bộ dao động Timer1
 CCP2: ngõ vào Capture2, ngõ ra Compare2, ngõ ra PWM2
• Chân RC2/CCP1:
 RC2: xuất / nhập số
 CCP1: ngõ vào Capture1, ngõ ra Compare1, ngõ ra PWM1
• Chân RC3/SCK/SCL:
 RC3: xuất / nhập số
 SCK: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ
SPI
 SCL: ngõ vào xung clock nối tiếp đồng bộ/ngõ ra của chế độ
I2C
• Chân RD0/PSP0:
 RD0: xuất / nhập số

 PSP0: dữ liệu port song song
• Các chân RD1/PSP1, RD2/PSP2, RD3/PSP3, RD4/PSP4, RD5/PSP5,











RD6/PSP6, RD7/PSP7 chức năng tương tự chân RD0/PSP0
Chân RB0/INT:
 RB0: xuất / nhập số
 INT: ngõ vào nhận tin hiệu ngắt ngoài
Chân RB1: xuất / nhập số
Chân RB2: xuất nhập số
Chân RB3/PGM:
 RB3: xuất / nhập số
 PGM: chân cho phép lập trình điện áp thấp ICSP
Chân RB4, RB5: xuất / nhập số
Chân RB6/PGC:
 RB6: xuất / nhập số
 PGC: mạch gở rối và xung clock cho lập trình ICSP
Chân RB7/PGD:
 RB7: xuất / nhập số
 PGD: mạch gở rối và dữ liệu cho lập trình ICSP
Chân RC4/SDI/SDA:

 RC4: xuất / nhập số
 SDI: dữ liệu vào SPI
 SDA: xuất nhập dữ liệu I2C
Chân RC5/SDO:
 RC5: xuất / nhập số
 SDO: dữ liệu ra SPI
9


Đồ án 1
• Chân RC6/TX/CK:
 RC6: xuất / nhập số
 TX: truyền bất đồng bộ USART
 CK: xung đồng bộ USART
• Chân RC7/RX/DT:
 RC7: xuất / nhập số
 RX: nhận dữ liệu bất đồng bộ USART
 DT: dữ liệu đồng bộ USART
• Chân Vdd và chân Vss: là các chân nguồn của PIC

1.4.2

DS1307

1.4.2.1 Giới thiệu về DS1307

DS1307 là chip đồng hồ thời gian thực (RTC : Real-ime 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ờ. .. 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.
1.1.1.2 Sơ đồ chân

Hình 1- 9: Sơ đồ chân DS1307

Các chân DS1307 được mô tả như sau:
X1vàX2 là 2ngõ 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.
10


Đồ án 1
1.4.2.2 Bộ nhớ DS1307

Hình 1- 10: Tổ chức bộ nhớ của DS1307

1.4.2.3 Các thanh ghi của Ds1307

Hình 1- 11: Tổ chức thanh ghi của DS1307

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.
Thanh ghi thứ ( DAY) có địa chỉ 0x03. Thanh ghi thứ mang giá trị từ 1 đến
7 tương ứng từ thứ 2 đến chủ nhật trong 1 tuần. Các thanh ghi ngày
(DATE), tháng ( MONTH), năm ( YEAR) có có cấu trúc tương tự.

11


Đồ án 1
1.4.3

LCD

Hình 1- 12: Hình ảnh LCD thực tế

Hình 1- 13: Sơ đồ chân LCD

12


Đồ án 1

Hình 1- 14: Bộ nhớ CGROM của LCD

1.4.4

Tụ điện


Hình 1- 15: Hình ảnh các loại tụ

13


Đồ án 1
1.4.5

IC ổn áp 7805

Hình 1- 16: Sơ đồ chân Ic ổn áp 7805

7805 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 2V.
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.
1.4.6

Pin CMOS 3V

Hình 1- 17: Pin COMS 3V

1.4.7

LED

Hình 1- 18: LED


14


Đồ án 1
1.4.8

Điện trở
Điện trở là sự cản trở dòng điện của một vật dẫn điện, nếu một vật
dẫn điện tốt thì điện trở nhỏ, vật dẫn điện kém thì điện trở lớn, vật
cách điện thì điện trở là vô cùng lớn.

Hình 1- 19: Điện trở

1.4.9

Thạch anh
Thạch anh là bộ dao động khá ổn định để tạo ra tần số dao động cho
vi điều khiển. Có rất nhiều loại khác nhau , mỗi loại tạo ra 1 xung
nhịp khác nhau

Hình 1- 20: Thạch anh

15


Đồ án 1
CHƯƠNG 2.

THIẾT KẾ MẠCH


2.1 Sơ đồ hệ thống

Hình 2- 21: Sơ đồ hệ thống

2.2 Sơ đồ nguyên lý
2.2.1

Khối nguồn

Hình 2- 22: Sơ đồ nguyên lý khối nguồn

16


Đồ án 1

2.2.2

Khối điều khiển và hiển thị

Hình 2- 23: Sơ đồ nguyên lý khối vi điều khiển và hiển thị

2.3 Mạch Layout (PCB)
2.3.1

Layout mạch nguồn

Hình 2- 24: Layout mạch nguồn

17



Đồ án 1
2.3.2

Layout mạch chính

Hình 2- 25: Layout mạch chính

2.4 Mạch thực tế

Hình 2-26: Mạch thực tế

18


Đồ án 1
CHƯƠNG 3.

GIẢI THUẬT

3.1 Lưu đồ giải thuật

Hình 3- 27: Nạp dữ liệu thời gian

19


Đồ án 1
3.1.1


Cài đặt giờ

Hình 3- 28: Cài đặt giờ

20


Đồ án 1
3.1.2

Cài đặt phút

Hình 3- 29: Cài đặt phút

21


Đồ án 1
3.1.3

Cài đặt giây

Hình 3- 30: Cài đặt giây

3.2 Code chương trình
#define _DS1307_H_
22



Đồ án 1
#use i2c(MASTER, SDA=PIN_C4, SCL=PIN_C3,force_hw) //cau hinh giao
thuc truyen nhan I2C
//che do master voi chan PIN_C4 la chan truyen nhan du lieu, chan PIN_C3 la
chan tao xung nhip
//I2C la giao thuc truyen nhan dung chuan 2 day duoc phat trien boi Phillips
//thong tin cu the cac ban co the xem tai lieu tham khao kem theo
//----------------------------------------------------------------------------// Dinh nghia dia chi DS1307
#define Device_Address_DS1307_EEPROM 0xD0//dia chi mac dinh
// Dinh nghia che do thoi gian(sang hay chieu, 24h)
#define AM_Time
0
#define PM_Time
1
#define TwentyFourHoursMode 2
// Dinh nghia ngay
#define Monday 2
#define Tuesday 3
#define Wednesday 4
#define Thursday 5
#define Friday 6
#define Saturday 7
#define Sunday
1
//----------------------------------------------------------------------------//khai bao bien toan cuc
unsigned char pRTCArray[4];//mang chu du lieu doc duoc DS1307
unsigned char Temp;
void _Init_I2C(void);//ham khoi tao khoi I2C - ngat truyen nhan du lieu
void _Send_Data(int8 data, int8 slave_addr);//ham gui du lieu theo giao thuc
I2C

int8 _Receive_Data(int8 slave_addr);//ham nhan du lieu theo giao thuc I2C
//Ghi mot byte len DS1307
//Address: Dia chi slave can ghi
//DataByte: Du lieu se duoc ghi
void Write_Byte_To_DS1307_RTC(unsigned char Address, unsigned char
DataByte);
//Doc 1 byte DS1307
//Address: Dia chi slave de doc data
unsigned char Read_Byte_From_DS1307_RTC(unsigned char Address);
23


Đồ án 1
//Ghi mot chuoi data len DS1307
//Address: Dia chi slave de ghi data
// pData: Chuoi du lieu data se duoc ghi
//NoOfBytes: So byte data se duoc ghi
void Write_Bytes_To_DS1307_RTC(unsigned char Address,unsigned char*
pData,unsigned char NoOfBytes);
//Doc 1 chuoi data tu DS1307
//Address: Dia chi slave muon doc data
//pData: Chuoi du lieu se duoc doc tu DS1307
//NoOfBytes: So byte data se duoc doc
void Read_Bytes_From_DS1307_RTC(unsigned char Address, unsigned char*
pData, unsigned int NoOfBytes);
//Ham cai dat thoi gian(gio-phut-giay)
//Mode: Che do AM/PM/24H
//Hours: Gio
//Mins: Phut
//Secs: Giay

void Set_DS1307_RTC_Time(unsigned char Mode, unsigned char Hours,
unsigned char Mins, unsigned char Secs);
//Ham doc thoi gian(gio-phut-giay)
//Ham se tra ve mot chuoi data
unsigned char* Get_DS1307_RTC_Time(void);
//Ham cai dat thoi gian(ngay-thang-nam)
//Month: Thang
//Year: Nam
//Day: Ngay
void Set_DS1307_RTC_Date(unsigned char Date, unsigned char Month,
unsigned char Year, unsigned char Day);
//Ham doc thoi gian(Ngay-Thang-Nam)
//Ham se tra ve mot chuoi data
unsigned char* Get_DS1307_RTC_Date(void);
void DisplayTimeToLCD( unsigned char* pTimeArray );

//Hien thi thoi

gian(gio-phut-giay)
void DisplayDateOnLCD( unsigned char* pDateArray );

//Hien thi thoi

gian(ngay-thang-nam)
void _Init_I2C(void)
{
24


Đồ án 1

enable_interrupts(GLOBAL);//ngat toan cuc - cho phep tat ca cac ngat xay ra
neu no duoc kich hoat
enable_interrupts(INT_SSP);//kich hoat ngat i2c
}
void _Send_Data(int8 data, int8 slave_addr)
{
i2c_start();//khoi tao lenh khi no o che do master
i2c_write(slave_addr);//gui di dia chi slave muon giao tiep
i2c_write(data);//gui du lieu
i2c_stop();//phat lenh dung giao dich khi no o che do master
}
int8 _Receive_Data(int8 slave_addr)
{
int8 value_re;
i2c_start();//khoi tao lenh khi no o che do master
i2c_write(slave_addr+1);//gui di dia chi slave muon giao tiep
value_re=i2c_read(0);//doc du lieu
i2c_stop();//phat lenh dung giao dich khi no o che do master
return value_re;//phan hoi du lieu vua nhan duoc ve
}
/
***************************************************************
**************************/
void Write_Byte_To_DS1307_RTC(unsigned char Address, unsigned char
DataByte)
{
i2c_start();//khoi tao lenh khi no o che do master
while(i2c_write(Device_Address_DS1307_EEPROM + 0) == 1)//Kiem tra
xem slave co ban ron gi khong
{

i2c_start();
}
i2c_write(Address);//gui 1 byte dia chi toi slave
i2c_write(DataByte);//gui 1 byte du lieu
i2c_stop();//phat lenh dung giao dich khi no o che do master
}
25


×