Tải bản đầy đủ (.doc) (46 trang)

thiết kế đồng hồ thời gian thực

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 (939.38 KB, 46 trang )

MỤC LỤC
LỜI NÓI ĐẦU…………………………………………. 1
LỜI CÁM ƠN……………………………………… … 2
CHƯƠNG 1: GIỚI THIỆU VÀ MÔ TẢ…………… 3
1. GIỚI THIỆU……………………………… 3
2. MÔ TẢ……………………………………… 5
CHƯƠNG 2: CƠ SƠ LÝ THUYẾT…………… … 7
1. GIỚI THIỆU VỀ I2C………………………… 7
2. IC THỜI GIAN THỰC RTC (REAL TIME
CLOCK) DS1307……………………………… 8
3. GIỚI THIỆU VỀ ATMEGA 328P-PU……… 14
CHƯƠNG 3: THIẾT KẾ PHẦN CỨNG……………. 20
1. SƠ ĐỒ NGUYÊN LÝ…………………………… 20
2. MẠCH IN……………………………………… 20
CHƯƠNG 4: : LƯU ĐỒ GIẢI THUÂT VÀ PHÂN
MỀM………………………………………. 23
1. LƯU ĐỒ GIẢI THUẬT…………………………. 23
2. PHẦN MỀM…………………………………… 24
LƠI NÓI ĐẦU
1
Với sự ra đời của chip vi điều khiển đã làm cho
công việc thiết kế các ứng dụng số trở nên nhỏ gọn
và mềm dẻo hơn . Chúng có thể ứng dụng trong
nhiều sản phẩm khác nhau . Trong đề tài thiết kế
Đồng hồ thời gian thực em đã ứng dụng các tính
năng sẵn có của Vi Điều Khiển cụ thể là
ATMEGA 328 vào công việc thiết kế phần mềm và
phần cứng để giao tiếp với IC thời gian thực
DS1307 . Sau một thời gian tìm hiểu và thực hiện
đề tài dưới sự hướng dẫn của Thầy Trần Văn
Hoàng em đã hoàn thành đồ án. Do trình độ còn


hạn chế nên chắc chắn đồ án không tránh khỏi
những
sai sót. Nhóm chúng em xin được các thầy sửa
chữa, chỉ bảo để hoàn thiện tốt hơn.



2
CHƯƠNG I :GIỚI THIỆU VÀ MÔ TẢ
1) GIỚI THIỆU ĐỀ TÀI :
 Thiết kế đồng số có thể hiển thị ngày , giờ , thứ , ngày ,
tháng , năm trên LCD 16x2 thông qua giao tiếp với IC
DS1307.
 Đồng hồ có thể tích hợp hiển thị nhiệt độ phòng thông
qua cảm biến nhiệt độ LM35
 Sử dụng 3 nút nhấn để chỉnh thơi gian, ngày tháng.
 1 biến trở đẻ điều khiển sự tương phản của LCD 16x2.
 Hình ảnh một số linh kiên:
1) Vi điều khiển atmega 328P-PU:
2) LCD 16x2 :
3
3) IC thơi gian thực DS1307:
4) Cảm biến nhiêt LM35:
2) MÔ TẢ HỆ THỐNG :
1) Giới thiệu khái quát về hệ thống :
 Input: cảm biến nhiêt, tín hiệu đồng hồ thời gian
thực.
 User interface: LCD 16x2.
2) Sơ đồ khối phần cứng:
4

HIỂN
THỊ
LCD
HIỂN
THỊ
LCD





 Hoạt động chung của hệ thống:
 Khi cấp nguồn cho bộ điều khiển thì khối CPU sẽ cho đồng
hồ hoạt đông và hiển thị lên LCD 16x2 . Khi ngừng cấp
nguồn cho bộ điều khiển thì CPU sẽ ngừng hoạt động.
 Hình chụp khi đồng hồ hoạt động:
5
IC
LM35
IC
LM35
VI
ĐIÊU
KHIỂN
VI
ĐIÊU
KHIỂN
IC
DS1307
IC

DS1307
CHƯƠNG 2:CƠ SỞ LÍ THUYẾT

6
1) Giới thiệu giao tiếp I2C:
Giao thức ưu tiên truyền thông nối tiếp được phát triển bởi
Philips Semiconductor và được gọi là bus I2C. Vì nguồn gốc nó
được thiết kế là để điều khiển liên thông IC (Inter-Intergrated
Circuit) nên nó được đặt tên là I2C. Tất cả các chip có tích hợp và
tương thích với I2C đều có thêm một giao diện tích hợp trên Chip
để truyền thông trực tiếp với các thiết bị tương thích I2C khác.
Việc truyền dữ liệu nối tiếp theo hai hướng 8 bit được thực thi theo
3 chế độ sau: f Chuẩn (Standard)—100 Kbits/sec f Nhanh
(Fast)—400 Kbits/sec f Tốc độ cao (High speed)—3.4 Mbits/sec
Đường bus thực hiện truyền thông nối tiếp I2C gồm hai đường là
đường truyền dữ liệu nối tiếp SDA và đường truyền nhịp xung
đồng hồ nối tiếp SCL. Vì cơ chế hoạt động là đồng bộ nên nó cần
có một nhịp xung tín hiệu đồng bộ. Các thiết bị hỗ trợ I2C đều có
một địa chỉ định nghĩa trước, trong đó một số bit địa chỉ là thấp có
thể cấu hình. Đơn vị hoặc thiết bị khởi tạo quá trình truyền thông
là đơn vị Chủ và cũng là đơn vị tạo xung nhịp đồng bộ, điều khiển
cho phép kết thúc quá trình truyền. Nếu đơn vị Chủ muốn truyền
thông với đơn vị khác nó sẽ gửi kèm thông tin địa chỉ của đơn vị
mà nó muốn truyền trong dữ liệu truyền. Đơn vị Tớ đều được gán
và đánh địa chỉ thông qua đó đơn vị Chủ có thể thiết lập truyền
thông và trao đổi dữ liệu. Bus dữ liệu được thiết kế để cho phép
thực hiện nhiều đơn vị Chủ và Tớ ở trên cùng Bus. Quá trình
truyền thông I2C được bắt đầu bằng tín hiệu start tạo ra bởi đơn vị
Chủ. Sau đó đơn vị Chủ sẽ truyền đi dữ liệu 7 bit chứa địa chỉ của
đơn vị Tớ mà nó muốn truyền thông, theo thứ tự là các bit có trọng

số lớn nhất MSB sẽ được truyền trước. Bit thứ tám tiếp theo sẽ
chứa thông tin để xác định đơn vị Tớ sẽ thực hiện vai trò nhận (0)
hay gửi (1) dữ liệu. Tiếp theo sẽ là một bit ACK xác nhận bởi đơn
vị nhận đã nhận được 1 byte trước đó hay không. Đơn vị truyền
7
(gửi) sẽ truyền đi 1 byte dữ liệu bắt đầu bởi MSB. Tại điểm cuối
của byte truyền, đơn vị nhận sẽ tạo ra một bit xác nhận ACK mới.
Khuôn mẫu 9 bit này (gồm 8 bit dữ liệu và 1 bit xác nhận) sẽ được
lặp lại nếu cần truyền tiếp byte nữa. Khi đơn vị Chủ đã trao đổi
xong dữ liệu cần nó sẽ quan sát bit xác nhận ACK cuối cùng rồi
sau đó sẽ tạo ra một tín hiệu dừng STOP để kết thúc quá
trình truyền thông. I2C là một giao diện truyền thông đặc
biệt thích hợp cho các ứng dụng truyền thông giữa các đơn vị
trên cùng một bo mạch với khoảng cách ngắn và tốc độ thấp. Ví dụ
như truyền thông giữa CPU với các khối chức năng trên cùng một
bo mạch như EEPROM, cảm biến, đồng hồ tạo thời gian thực
Hầu hết các thiết bị hỗ trợ I2C hoạt động ở tốc độ 400Kbps, một số
cho phép hoạt động ở tốc độ cao vài Mbps. I2C khá đơn giản để
thực thi kết nối nhiều đơn vị vì nó hỗ trợ cơ chế xác định địa chỉ.
2)IC THỜI GIAN THỰC RTC (REAL TIME
CLOCK) 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 xuất hiện ở
2 gói SOIC và DIP có 8 chân :



8


Hai gói cấu tạo chip DS1307
9

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.768KHz làm
nguồn tạo dao động cho chip.
• VBAT: 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.
• Vcc: nguồn cho giao diện I2C, thường là 5V và dùng chung với
vi điều khiển. Chú ý là nếu Vcc không được cấp nguồn nhưng
VBAT được cấp thì DS1307 vẫn đang hoạt động (nhưng không
ghi và đọc được).
• SQW/OUT: một ngõ phụ tạo xung vuông (Square Wave /
Output Driver), tần số của xung được tạo có thể được lập trình.
Như vậy chân này hầu như không liên quan đến chức năng của
DS1307 là đồng hồ thời gian thực, chúng ta sẽ bỏ trống chân
này khi nối mạch.
• SCL và SDA là 2 đường giao xung nhịp và dữ liệu của giao
diện I2C.
• Có thể kết nối DS1307 bằng một mạch điện đơn giản như trong
hình 2.
10
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. Phần
này chúng ta tìm hiểu cấu trúc các thanh ghi trước và cách truy xuất
chúng sẽ tìm hiểu trong phần 2, điều khiển DS1307 bằng AVR.
Như tôi đã 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ừ 0x00 đến 0x3F theo hệ hexadecimal).
Tuy nhiên, thực chất chỉ có 8 thanh ghi đầu là dùng cho chức năng
“đồng hồ” (tôi sẽ gọi là RTC) 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), 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á từ 7
thanh ghi là đọc thời gian thực mà chip tạo ra. Ví dụ, lúc khởi động
chương trình, chúng ta ghi vào thanh ghi “giây” giá trị 42, sau đó 12s
chúng ta đọc thanh ghi này, chúng ta thu được giá trị 54. Thanh ghi thứ
11
8 (CONTROL) là thanh ghi điều khiển xung ngõ ra SQW/OUT (chân 6).
Tuy nhiên, do chúng ta không dùng chân SQW/OUT nên có thề bỏ qua
thanh ghi thứ 8. Tổ chức bộ nhớ của DS1307 được trình bày trong hình
3.
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 (không có giây 60)
nên chỉ cần 3 bit (các bit SECONDS 6:4) là có thể mã hóa được (số 5
=101, 3 bit). Bit cao nhất, bit 7, trong thanh ghi này là 1 điều khiển có
12

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ỉ 01H, 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 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 DS1307. Thanh ghi này có địa chỉ 02H. Trước hết 4-bits 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ờ (gọi là mode) là 12h (1h
đến 12h) và 24h (1h đến 24h) giờ, bit6 (hình 4) xác lập hệ thống giờ.
Nếu bit6=0 thì hệ thống 24h được chọn, khi đó 2 bit cao 5 và 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 (=10, nhị phân) nên 2 bit 5 và
4 là đủ để mã hóa. Nếu bit6=1 thì hệ thống 12h được chọn, với trường
hợp này chỉ có bit 4 dùng mã hóa chữ số hàng chục của giờ, bit 5
(màu orange trong hình 4) chỉ buổi trong ngày, AM hoặc PM. Bit5 =0
là AM và bit5=1 là PM. Bit 7 luôn bằng 0.
Thanh ghi thứ (DAY – ngày trong tuần): nằm ở địa chỉ 03H.
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 thanh ghi còn lại có cấu trúc tương tự, DATE chứa ngày
trong tháng (1 đến 31), MONTH chứa tháng (1 đến 12) vàYEAR
chứa năm (00 đến 99). Chú ý, 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
(ví dụ 20xx). Ngoài các thanh ghi trong bộ nhớ, DS1307 còn có một
thanh ghi khác nằm riêng gọi là con trỏ địa chỉ hay thanh ghi địa chỉ
(Address Register). Giá trị của thanh ghi này là địa chỉ của thanh ghi
trong bộ nhớ mà người dùng muốn truy cập
13

3) GIỚI THIỆU VỀ ATMEGA 328P-PU:
 Giới thiệu khái quát:
 Vi điều khiên Atmega328P-PU có các tính năng như
sau:
 Vi điều khiển 8 bit , có tính năng sử dụng cao ,
công suất thấp.
 Có 131 tập lênh theo kiến trúc RISC, chủ yếu
thực hiên trong 1 chu kỳ máy.
 32x8 thanh ghi đa dụng.
 512 bytes EEPROM
 1K byte Internal SRAM
14
 Nhiều ngõ vào ra (I/O port )2 hướng (bi-
rectional)
 2 bộ timer counter 8 bit với Separate và
Compare Modes
 1 Timer/Counter 16-bit với Separate Prescaler,
Compare Mode và
-Capture Mode.
-4 kênh PWM.
-8 kênh chuyển đổi ADC 10-bit
-8 kênh chuyển đổi ADC 10-bit
-Giao diện nối tiếp USART( tương thích chuẩn nối
tiếp RS-232)
-Giao diện nối tiếp Two-wire Serial( tương thích
chuẩn I2C )
-Bộ Watchdog Timer có khả năng lập trình được
với bộ dao động
…………


15
 Sơ đồ chân của Atmega328:
16
• VCC : Điện áp cung cáp 5v
• GND: Ground
• Port B (PB0 : 7) XTAL1/XTAL2/TOSC1/TOSC2
Port B is an 8-bit bi-directional I/O port with internal pull-up
resistors (selected for each bit). The Port B output buffers
have symmetrical drive characteristics with both high sink
and source capability.As inputs, Port B pins that are
externally pulled low will source current if the pull-up
resistors are activated. The Port B pins are tri-stated when a
reset condition becomes active, even if the clock is not
running.
Depending on the clock selection fuse settings, PB6 can be
used as input to the inverting Oscil- lator amplifier and input
to the internal clock operating circuit.
Depending on the clock selection fuse settings, PB7 can be
used as output from the inverting Oscillator amplifier.
If the Internal Calibrated RC Oscillator is used as chip clock
source , PB7 6 is used as TOSC2 1 input for the
Asynchronous Timer/Counter2 if the AS2 bit in ASSR is set
• Port C ( PC0:5)
Port C is a 7-bit bi-directional I/O port with internal pull-up
resistors (selected for each bit). The PC5 0 output buffers
have symmetrical rive characteristics with both high sink and
source capability. As inputs, Port C pins that are externally
pulled low will source current if the pull-up resistors are
activated. The Port C pins are tri-stated when a reset condition
becomes active, even if the clock is not running.

• PC6/RESET
17
If the RSTDISBL Fuse is programmed, PC6 is used as an I/O
pin. Note that the electrical char- acteristics of PC6 differ
from those of the other pins of Port C .
If the RSTDISBL Fuse is unprogrammed, PC6 is used as a
Reset input. A low level on this pin for longer than the
minimum pulse length will generate a Reset, even if the clock
is not running . Shorter pulses are not guaran- teed to generate
a Reset.
• Port D (PD7:0)
Port D is an 8-bit bi-directional I/O port with internal resistors
(selected for each bit). The Port D output buffers have
symmetrical drive characteristics with both high sink and
source capability. As inputs, Port D pins that are externally
pulled low will source current if the pull-up resistors are
activated. The Port D pins are tri-stated when a reset condition
becomes active, even if the clock is not running.
• AVCC
AVCC is the supply voltage pin for the A/D Converter,
PC3:0, and ADC7:6. It should be externally connected to
VCC, even if the ADC is not used.
If the ADC is used, it should be connected to VCC through a
low-pass filter. Note that PC6 4 use digital supply voltage,
VCC.
• AREF
AVCC is the supply voltage pin for the A/D Converter,
PC3:0, and ADC7:6. It should be externally connected to
VCC, even if the ADC is not used. If the ADC is used, it
should be connected to VCC through a low-pass filter. Note

that PC6 4 use digital supply voltage, VCC.
• AREF
AREF is the analog reference pin for the A/D Converter.
18
• ADC7:6 (TQFP and QFN/MLF Package Only)
In the TQFP and QFN/MLF package, ADC7:6 serve as
analog inputs to the A/D converter. These pins are powered
from the analog supply and serve as 10-bit ADC channels.
CHƯƠNG 3: THIẾT KẾ PHẦN CỨNG
19
1) SƠ ĐỒ NGUYÊN LÝ:
2)MẠCH IN:
Sau khi thiêt kế sơ đồ nguyên lí ta chuyển sang sơ đồ mạch in.
20


Sơ đồ bố trí linh kiện
21


S ơ đồ đi dây
22
CHƯƠNG 4: LƯU ĐỒ GIẢI THUÂT VÀ
PHÂN MỀM
1) LƯU ĐỒ GIẢI THUẬT:


S
S
Đ Đ

Đ
S
23
START
Ghi dữ lieu vao
DS1307
Đọc dữ liệu từ DS1307
va hiển thị lên LCD
Nut2=0 Nut=0
Nut1=0
Chinh ( )
Chuyển đổi mode
12h và 24h
Nut2=0
Chỉnh thời gian()
Chỉnh ngày( )
2) PHẦN MỀM:
#include "Wire.h"
#define DS1307_ADDRESS 0x68
byte zero = 0x00; //workaround for issue #527
int nut = 10;
int nut1 = 9;
int nut2 = 8;
int a,b,c,k,m,f,i,second, minute,
hour,bien,weekDay,monthDay,month,year;
byte h,t,g,l,p,
luu,nam,nho,bien1,bien2,bien3,bien4,bien5,bien6;
int n,j;
int v;
float temperature;

int dem=0;
char*
thu[]={"MON","TUE","WED","THU","FRI","SAT","SU
N"};
char thang[]={1,3,5,7,8,10,12};
#include <LiquidCrystal.h>
// initialize the library with the numbers of the interface
pins
LiquidCrystal lcd(12, 11, 5, 4, 3,2);
void setup(){
pinMode(10, INPUT);
pinMode(9, INPUT);
pinMode(8, INPUT);
Wire.begin();
24


setDateTime(); //MUST CONFIGURE IN FUNCTION
lcd.begin(16, 2);
}
void loop(){

for(int tinh =0; tinh<6 ; tinh++){
printDate();
lcd.noCursor();
delay(200);
}
nhietdo();
}
void nhietdo(){



float temperature =
(5.0*analogRead(A0)*100.0/1024.0);
lcd.setCursor(12, 0);
lcd.print(temperature);



}
void setDateTime(){
n=1;
second = 55; //0-59
25

×