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

Điều khiển tưới nước theo nhiệt độ và thời gian sử dụng DS1307, LM35 hiển thị LCD

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

1

Bài tập lớn vi xử lý trong đo lường và điều khiển
BỘ CÔNG THƯƠNG
CỘNG HÒA XÃ HỘI CHỦ NGHĨA VIỆT NAM
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP HÀ NỘI
Độc Lập - Tự Do - Hạnh - Phúc

----------------------

-------------------

ĐỒ ÁN MÔN HỌC
Đề bài : Điều khiển tưới nước theo nhiệt độ và thời gian sử dụng DS1307,
LM35 hiển thị LCD
Môn học : Vi xử lý trong Đo lường và Điều khiển
Nhóm 5
STT
1

Tên sinh viên
Lê Duy Thái

MSSV
1141240004

Lớp
TĐH 1

Khoá
K11



2

Chu Văn Thái

1141240069

TĐH 2

K11

3

Đào Quang Linh

1141240002

TĐH 1

K11

4

Dương Xuân Quân

1141240007

TĐH 1

K11


5

Lê Ngọc Duy

1141240012

TĐH 1

K11

ĐỀ TÀI :
Xây dựng ứng dụng tưới nước tự động theo nhiệt độ và có hẹn giờ.
 Khi nhiệt độ cao thì tới nước . Đo nhiệt độ sử dụng LM35 hiện thị lên
LCD.
 Hẹn thời gian tưới nước. Thời gian thực hiển thị lên LCD. Việc chỉnh
giờ có thể thực hiện bằng các nút bấm điều chỉnh.

1|Page


2

Bài tập lớn vi xử lý trong đo lường và điều khiển

Mục lục
Mục lục

....................................................................................................2


CHƯƠNG 1: Tổng quan về Vi xử lý trong Đo lường và Điều khiển...............4
1.1. Cấu trúc của 8051...........................................................................................................4
1.2. Các ngoại vi của 8051.....................................................................................................7
1.2.1. Nguồn cho 8051 hoạt động..........................................................................................7
1.2.2. Mạch dao động và Reset..............................................................................................7
1.2.3. Các ngoại vi của 8051..................................................................................................8

CHƯƠNG 2: Tổng quan về mạch điều khiển tưới nước theo nhiệt độ và thời
gian sử dụng DS1307, LM35 hiển thị LCD......................................................9
2.1. Mạch đo nhiệt độ sử dụng LM35 và ADC0804..............................................................9
2.1.1. Nguyên lý một số linh kiện phục vụ cho công việc đo lường.....................................9
2.1.2. Bộ chuyển đối ADC0804...........................................................................................11
2.1.3. Nguyên lý đo và chuyển đổi tương tự/số của ADC...................................................14
2.1.4. Cách ghép nối............................................................................................................15
2.2. Mạch thời gian thực DS1307........................................................................................16
2.2.1. Cấu trúc sơ đồ chân DS1307.....................................................................................16
2.2.2. Giới thiệu giao tiếp I2C.............................................................................................17
2.2.3. Ghép nối DS1307 với vi điều khiển..........................................................................21
2.3. Khối hiển thị LCD........................................................................................................22
2.3.1. Các bước điều khiển LCD.........................................................................................22

CHƯƠNG 3: Xây dựng ứng dụng trên cơ sở 8051.........................................24
3.1. Lưu đồ thuật toán..........................................................................................................24
3.1.1. Thuật toán khởi động động cơ “ khoiđongdc()”: theo chế độ thời gian....................25
3.1.2. Thuật toán Theo chế độ nhiệt độ...............................................................................26
3.1.3. Thuật toán điều khiển bằng tay..................................................................................27
3.2. Chương trình điều khiển...............................................................................................28
3.3. Kết quả mô phỏng, thiết kế mạch nguyên lý và Thực nghiệm trên mạch thực............40
3.3.1. Mạch mô phỏng dùng proteus...................................................................................40
3.3.2. Sơ đồ mạch in............................................................................................................41


CHƯƠNG 4: KẾT LUẬN...............................................................................42

2|Page


3

Bài tập lớn vi xử lý trong đo lường và điều khiển

CHƯƠNG 1: Tổng quan về Vi xử lý trong Đo
lường và Điều khiển
1.1. Cấu trúc của 8051

Hình 1.1 : Cấu trúc 8051

 OSC: Bộ phát xung nhịp đồng bộ cho hệ thống, max: 24Mhz -> quyết
định tốc độ xử lý của 8051 (liên quan đến thời gian/lệnh, Timer,
Interrupt sau này), ngày nay 128 Mhz (ARM)
 ROM: Bộ nhớ chương trình 4K (lưu các mã lệnh của chương trình),
ngày nay lên tới 128K: AVR 128, 1M: STM32F4 -> không cần quá
quan tâm).
 RAM: Bộ nhớ dữ liệu 128 byte (lưu trữ dữ liệu tạm thời, thanh ghi đặc
biệt), ngày nay lên tới 4K: AVR 128, 192K: STM32F4
 Timer/Counter: Bộ đếm thời gian/bộ đếm xung.
 Interrupt Control: khối điều khiển ngắt
 BUS Control: khối điều khiển các Bus địa chỉ (Address Bus), Bus dữ
liệu (Address Data), Bus điều khiển (Control Bus).
 I/O Port: Cổng vào/ra (P0, P1, P2, P3: 8 bit ~ 8 chân).
 Serial port: Cổng truyền thông nối tiếp


3|Page


4

Bài tập lớn vi xử lý trong đo lường và điều khiển

Sơ đồ khối và ý nghĩa các chân của 8051:

Hình 1.2 : Sơ đồ chân 8051

Vi điều khiển 8051 có 4 cổng vào\ra là: P0, P1, P2 và P3 .
 P 0 (32-39): Port 0 là port xuất nhập 8-bit hai chiều.
 P 1(1-8): Port 1 là port xuất nhập 8-bit hai chiều.
 P 2 là port xuất nhập 8-bit hai chiều.
 P 3 là Port xuất nhập 8-bit hai chiều. Port 3 cũng còn làm các chức năng
khác của AT89C51. Các chức năng này được liệt kê như sau:
-

P3.0
P3.1

RxD Ngõ vào Port nối tiếp
TxD Ngõ ra Port nối tiếp
4|Page


5


Bài tập lớn vi xử lý trong đo lường và điều khiển

-

P3.2
P3.3
P3.4
P3.5
P3.6
P3.7

Ngõ vào ngắt ngoài 0
Ngõ vào ngắt ngoài 1
T0 Ngõ vào bên ngoài của bộ định thời 1
T1 Ngõ vào bên ngoài của bộ định thời 0
Điều khiển ghi bộ nhớ dữ liệu ngoài
Điều khiển đọc bộ nhớ dữ liệu ngoài

Các chân khác của 8051:
Vcc (chân 40): Chân cung cấp điện (5V)
 GND (chân 20): Chân nối đất (0V)
 Ngõ vào reset (chân 9) Mức cao trên chân này trong 2 chu kỳ máy trong
khi bộ dao động đang hoat động sẽ reset 8051
 Mạch reset tác động bằng tay và tự động reset khi khởi động máy
 X1 và X2 (chân 18,19) là hai ngõ vào được cấu hình để dùng như một
bộ dao động trên chip
 EA (chân 31): External Access
- EA nối mass chỉ định rằng code lưu trên bộ nhớ ngoài
- PSEN & ALE dùng cho ROM ngoài
- Với 8051, 8031, 8032 thì /EA nối Vcc

- “/”: chỉ định tác động mức thấp
 PSEN (chân 29): Program Store Enable
Output, cho phép truy xuất bộ nhớ chương trình ngoài
Nối tới chân /OE của ROM/EPROM
Khi thực thi chương trình ở ROM nội, /PSEN được giữ ở mức 1
 ALE (pin 30):Address Latch Enable
- Là chân output cho phép chốt địa chỉ để giải đa hợp
(demultiplexing) bus dữ liệu và bus địa chỉ
- ALE xuất tín hiệu để chốt địa chỉ (byte thấp địa chỉ 16-bit) vào 1
thanh ghi ngoài trong suốt nửa đầu của chu kỳ bộ nhớ
(memory cycle). Trong nửa chu kỳ bộ nhớ còn lại, P0 sẽ xuất/nhập
dữ liệu
- ALE có f=1/6fclock
- Có 1 ngoại lệ: trong thời gian thực thi lệnh MOVX, một xung ALE
bị bỏ qua

5|Page


6

Bài tập lớn vi xử lý trong đo lường và điều khiển

1.2. Các ngoại vi của 8051
1.2.1. Nguồn cho 8051 hoạt động

1.2.2. Mạch dao động và Reset

Chú ý :
 Chân 31 (EA/VPP) của VĐK 8051: Khi thiết kế mạch vi điều khiển

không sử dụng bộ nhớ ngoài để chứa chương trình (code) thực thi, cần
nối chân (EA/VPP) này lên nguồn dương (5V). Đây là chân chọn bộ
nhớ lưu giữ chương trình thực thi của vi điều khiển. Khi nối lên +5V là
đã chọn thực thi chương trình từ bộ nhớ flash bên trong VĐK.
 Trở treo cho PORT P0: Đối với VĐK 8051, khi sử dụng chân của port
P0 để điều khiển thì phải sử dụng trở treo cho các chân port P0.
Thường sử dụng trở băng 10k cho 8 chân của port P0.
 Đưa ra các chân mạch nạp: Đây không phải là điều kiện để mạch
hoạt động, nhưng thiết kế mạch nên vẽ thêm các chân mạch nạp để
6|Page


7

Bài tập lớn vi xử lý trong đo lường và điều khiển

trong quá trình test code sẽ nạp trực tiếp onboard (chỉ dùng được với
dòng 89S có hỗ trợ chuẩn nạp ISP) sẽ tiện lợi hơn rất nhiều là khi các
bạn cứ phải tháo chip ra vào, dễ làm gãy chân chip.

Hình 1.3 : IC AT89s52

1.2.3. Các ngoại vi của 8051
 Bàn phím Hex
 Quét màn hình LED 7G
 Chốt màn hình LED 7G
 Giao tiếp với màn hình LCD
 Ghép nối với ADC 0804
 Ghép nối với DAC 0808
 Điều khiển động cơ bước

 Ma trận LED
 Các cảm biến

7|Page


8

Bài tập lớn vi xử lý trong đo lường và điều khiển

CHƯƠNG 2: Tổng quan về mạch điều khiển tưới
nước theo nhiệt độ và thời gian sử dụng DS1307,
LM35 hiển thị LCD
2.1. Mạch đo nhiệt độ sử dụng LM35 và ADC0804
Nhiệt độ
môi trường

MẠCH ĐIỆN

Khối hiển thị

Khối điều khiển

Hình 2.4 : Sơ đồ khối mô đo nhiệt độ

2.1.1. Nguyên lý một số linh kiện phục vụ cho công việc đo lường.
2.1.1.1.Cảm biến nhiệt độ LM35

Hình 2.5 : LM35


IC đo nhiệt độ là một mạch tích hợp nhận tín hiệu nhiệt đo chuyển
thành tín hiệu điện dưới dạng dòng điện hay điện áp. Dựa vào đặc tính rất
nhạy của các bán dẫn với nhiệt độ tạo ra điện áp hoặc dòng điện, tỉ lệ thuận
với nhiệt độ tuyệt đối. Đo tín hiệu điện ta biết được giá trị của nhiệt độ cần
đo. Sự tác động của nhiệt độ tạo ra điện tích tự do và các lổ trống trong chất
8|Page


9

Bài tập lớn vi xử lý trong đo lường và điều khiển

bán dẫn. Bằng sự phá vỡ các phân tử, bứt các electron thành dạng tự do di
chuyển qua vùng cấu trúc mạng tinh thể tạo sự xuất hiện các lỗ trống. Làm
cho tỉ lệ điện tử tự do và lổ trống tăng lên theo qui luật hàm mũ với nhiệt độ.

Hình 2.6: Sơ đồ chân LM35

2.1.1.2.Các đặc điểm và tính chất quan trọng của LM35
 LM35 là 1 bộ cảm biến tích hợp nó có thể được dùng để đo nhiệt độ với
tín hiệu đầu ra tỉ lệ với nhiệt độ Celsius
 LM35 cho phép đo nhiệt độ chính xác hơn nhiều so với nhiệt trở, cặp
nhiệt điện ….
 Là bộ cảm biến được chỉ định và không phải là đối tượng của quá trình
Oxy hoá …
 LM35 tạo ra một điện áp cao mà không cần khuếch đại.
 Hệ số thang chia độ là 0,01V/1 0C (tức độ biến thiên theo nhiệt độ). Nó
không yêu cầu sự kiểm tra bên ngoài hay sắp xếp và duy trì độ chính xác
bằng tại nhiệt độ phòng (25 oC) và trên dãy nhiệt độ từ .
 Đặc tính quan trọng khác của LM35DZ là nó chịu đựng dòng tối thiểu

60μA từ nguồn cung cấp của nó. Đặc biệt khi ta nung bộ cảm biến dẫn
đến nhiệt độ tăng lên trong môi trường chân không ít hơn 0,1
 Đặc tính điện với dải đo từ 0 đến 150 độ C
 Theo thông số nhà sản xuất LM35DZ, quan hệ giữa nhiệt độ và điện áp
ngõ ra như sau:
 Dòng điện đầu ra khoảng 10mA.
2.1.1.3.Dải nhiệt độ và sự thay đổi trở kháng theo nhiệt độ của LM35
Các bộ biến đổi (Transducer) chuyển đổi các đại lượng vật lý ví dụ
như nhiệt độ, cường độ ánh sáng, lưu tốc và tốc độ thành các tín hiệu điện phụ
thuộc vào bộ biến đổi mà đầu ra có thể là tín hiệu dạng điện áp, dòng, trở
kháng hay dung kháng. Ví dụ, nhiệt độ được biến đổi thành về các tín hiệu
điện sử dụng một bộ biến đổi gọi là Thermistor (bộ cảm biến nhiệt), một bộ
cảm biến nhiệt đáp ứng sự thay đổi nhiệt độ bằng cách thay đổi trở kháng
nhưng đáp ứng của nó không tuyến tính.
9|Page


10

Bài tập lớn vi xử lý trong đo lường và điều khiển

Trở kháng của bộ cảm biến nhiệt theo nhiệt độ.
Nhiệt độ (0C)
0
25
50
75
100

Trở kháng của cảm biến (k)

29.490
10.000
3.893
1.700
0.817

Hướng dẫn chọn loạt các cảm biến nhiệt họ LM35.
Mã sản phẩm
LM35A
LM35
LM35CA
LM35C
LM35D

Dải nhiệt độ
-55 C to + 150 C
-55 C to + 150 C
-40 C to + 110 C
-40 C to + 110 C
0 C to + 100 C

Độ chính xác
+ 1.0 C
+ 1.5 C
+ 1.0 C
+ 1.5 C
+ 2.0 C

Đầu ra
10 mV/F

10 mV/F
10 mV/F
10 mV/F
10 mV/F

2.1.2. Bộ chuyển đối ADC0804
Chíp ADC 0804 là bộ chuyển đổi tương tự sang số trong họ các loạt
ADC 0800 từ hãng National Semiconductor. Nó cũng được nhiều hãng khác
sản xuất, làm việc với +5V và có độ phân giải là 8 bít. Ngoài độ phân giải thì
thời gian chuyển đổi cũng là một yếu tố quan trọng khác khi đánh giá một bộ
ADC. Thời gian chuyển đổi được định nghĩa như là thời gian mà bộ ADC cần
để chuyển một đầu vào tương tự thành một số nhị phân. Trong ADC 0804 thời
gian chuyển đổi thay đổi phụ thuộc vào tần số đồng hồ được cấp tới chân
CLK và CLK IN nhưng không thể nhanh hơn 110s.
2.1.2.1.Các chân của ADC 804

Hình 2.7 : Sơ đồ chân ADC804

10 | P a g e


11

Bài tập lớn vi xử lý trong đo lường và điều khiển










Chân CS - chọn chíp: Là một đầu vào tích cực mức thấp được sử dụng
để kích hoạt chíp ADC 804. Để truy cập ADC 0804 thì chân này phải ở
mức thấp.
Chân RD (đọc): Đây là một tín hiệu đầu vào được tích cực mức thấp.
Các bộ ADC chuyển đổi đầu vào tương tự thành số nhị phân tương
đương với nó và giữ nó trong một thanh ghi trong. RD được sử dụng để
nhận dữ liệu được chuyển đổi ở đầu ra của ADC 804. Khi CS = 0 nếu
một xung cao - xuống - thấp được áp đến chân RD thì đầu ra số 8 bít
được hiển diện ở các chân dữ liệu D0 - D7. Chân RD cũng được coi
như cho phép đầu ra.
Chân ghi WR (thực ra tên chính xác là “Bắt đầu chuyển đổi”). Đây là
chân đầu vào tích cực mức thấp được dùng để báo cho ADC 804 bắt
đầu quá trình chuyển đổi. Nếu CS = 0 khi WR tạo ra xung thấp - lên cao thì bộ ADC 804 bắt đầu chuyển đổi giá trị đầu vào tương tự V in về
số nhị phân 8 bít. Lượng thời gian cần thiết để chuyển đổi thay đổi phụ
thuộc vào tần số đưa đến chân CLK IN và CLK R. Khi việc chuyển đổi
dữ liệu được hoàn tất thì chân INTR được ép xuống thấp bởi
ADC0804.
Chân CLK IN và CLK R.
Chân CLK IN là một chân đầu vào được nối tới một nguồn đồng
hồ ngoài khi đồng hồ ngoài được sử dụng để tạo ra thời gian. Tuy nhiên
804 cũng có một bộ tạo xung đồng hồ. Để sử dụng bộ tạo xung đồng hồ
trong (cũng còn được gọi là bộ tạo đồng hồ riêng) của 804 thì các chân
CLK IN và CLK R được nối tới một tụ điện và một điện trở như chỉ ra
trên hình 3.6.1. Trong trường hợp này tần số đồng hồ được xác định
bằng biểu thức:
1
f

1,1RC

Giá trị tiêu biểu của các đại lượng trên là R = 10k và C= 150pF và tần
số nhận được là f = 606kHz và thời gian chuyển đổi sẽ mất là 110s.


Chân ngắt INTR (ngắt hay gọi chính xác hơn là “kết thúc chuyển đổi’).
Đây là chân đầu ra tích cực mức thấp. Bình thường nó ở trạng
thái cao và khi việc chuyển đổi hoàn tất thì nó xuống thấp để báo cho
CPU biết là dữ liệu được chuyển đổi sẵn sàng để lấy đi. Sau khi INTR
xuống thấp, ta đặt CS = 0 và gửi một xung cao - xuống - thấp tới chân
RD lấy dữ liệu ra của adc0804.



Chân Vin (+) và Vin (-).
11 | P a g e


12

Bài tập lớn vi xử lý trong đo lường và điều khiển

Đây là các đầu vào tương tự vi sai mà Vin = Vin (+) - Vin (-).
Thông thường Vin (-) được nối xuống đất và Vin (+) được dùng như đầu
vào tương tự được chuyển đổi về dạng số.


Chân VCC.
Đây là chân nguồn nuôi +5v, nó cũng được dùng như điện áp

tham chiếu khi đầu vào Vref/2 (chân 9) để hở.



Chân Vref/2.

2.1.2.2.Các bước đọc dữ liệu

Code:
unsigned char read_adc(void)
{
unsigned char ketqua;
WR=0;
WR=1;
while(INTR);
RD=0;
ketqua=P1;
RD=1;
return ketqua;
12 | P a g e


13

Bài tập lớn vi xử lý trong đo lường và điều khiển

}
2.1.3. Nguyên lý đo và chuyển đổi tương tự/số của ADC
Khi nhiệt độ môi trường thay đổi làm cho trở kháng của cảm biến
LM35 thay đổi dẫn đến điện áp đầu vào Vin của ADC thay đổi. Điện áp Vin

vào ADC sẽ được so sánh với Ud của ADC. Ud có thể thay đổi từ 0V đến
2(Vref/2).
Ban đầu Ud = 0, nếu Vin > Ud khi đó Ud sẽ được cộng thêm một giá trị
là . , trong đó :

đồng thời giá trị bộ đếm tăng thêm 1. Quá trình so sánh cứ như vậy
đến khi nào Ud =Vin thì dừng. Khi đó giá trị của bộ đếm chính là giá trị thập
phân. Giá trị thập phân này sẽ được đưa qua một bộ giải mã, giải mã ra nhị
phân rồi đưa ra các chân AD0 – AD7.
Đánh giá độ chính xác của phép đo
Khả năng tự làm nóng của LM35 trong không khí là 0,1oC.
Cảm biến LM35 có hệ số nhiệt là 10mV/oC, do đó sai số về nhiệt
độ của LM35 sẽ là 0,5oC. Khi đó điện áp đầu vào Vin sẽ được làm tròn lên
hoặc xuống. Khi Vin đi vào so sánh với điện áp Ud của ADC, ta nhận thấy rằng
mức điện áp của ADC là 10mV nên sai số mà nó gây ra là 0,5mV tương ứng
với giá trị nhiệt độ là 0,5oC.
Vậy sai số tổng cộng của hệ thống là 1.1oC.
Do vậy nhiệt độ thưc tế của ta sẽ là : treal = tđo 1,1 oC.
Phương pháp mà ta dùng ở đây là phương pháp vi phân bậc thang.
Quy đổi về 1ADC= 1oC
Độ chính xác của ADC0804 bị giới hạn bởi tần số lấy mẫu (thường là
600->640KHz) và số bít của dữ liệu đầu ra (8 bít) tương ứng với tối đa là 256
mức điện áp có thể chuyển đổi và so sánh,ngoài ra điện áp đưa vào chân V ref/2
cũng quyết định điện áp vi phân bậc thang trong phép chuyển đổi của
ADC.Nếu điện áp đưa vào chân này là 1.28 V thì điện áp so sánh max là
2x1.28= 2.56 V kết hợp với dải nhiệt độ chuyển đổi của LM35DZ là từ 0>100oC ( vẫn nhở hơn 255) nên mỗi bước điện áp ứng với
2.56/256=10mV.Điện áp Vref/2 càng lớn thì bước điện áp bậc thang càng lớn
13 | P a g e



14

Bài tập lớn vi xử lý trong đo lường và điều khiển

do đó độ chính xác của phép đo càng nhỏ hay nói cách khác ta mắc phải một
sai số lớn hơn
Để tăng độ chính xác của phép đo lên ta có thể dùng một cảm biến khác
có độ chính xác cao hơn, có thể giảm điện áp đưa vào chân Vref/2 để giảm bước
điện áp vi phân bậc thang của ADC, Tuy nhiên, khi bước điện áp của ADC và
cảm biến không đồng nhất thì sẽ gây khó khăn cho quá trình xử lý dữ liệu đưa
ra khâu hiển thị hoặc có thể gây ra sai số. Tùy thuộc vào phép hiện thị mà
người ta có thể đặt giá trị điện áp cho chân Vref/2 sao cho hợp lý.
2.1.4. Cách ghép nối
2.1.4.1.Ghép nối LM35 với ADC0804

14 | P a g e


Bài tập lớn vi xử lý trong đo lường và điều khiển

2.1.4.2.Ghép nối giữa ADC0804 và 8051
+++++++++++++++++++++++++++++++++++++++
VCC

C 13 3 p

19
Y1
1 1 .0 9 5 2
18


C2

P
P
P
P
P
P
P
P

1 .0
1 .1
1 .2
1 .3
1 .4
1 .5
1 .6
1 .7

P 3 .0 /R XD
P 3 .1 /T XD
P 3 .2 /IN T 0
P 3 .3 /IN T 1
P 3 .4 /T 0
P 3 .5 /T 1
P 3 .6 /W R
P 3 .7 /R D


XTA L1

A L E /P R O G
PSEN
E A /V P P
RST

XTA L2

0
1
2
3
4
5
6
7

33p
AT89C 51

P 2 .0 /A 8
P 2 .1 /A 9
P 2 .2 /A 1 0
P 2 .3 /A 1 1
P 2 .4 /A 1 2
P 2 .5 /A 1 3
P 2 .6 /A 1 4
P 2 .7 /A 1 5


18
17
16
15
14
13
12
11

10
11
12
13
14
15
16
17

2
3
5
1

30
29
31
9

D
D

D
D
D
D
D
D

AD C 0804
B
B
B
B
B
B
B
B

0
1
2
3
4
5
6
7

RD
W R
IN T R
CS


+IN
-IN

C L K IN
C LKR
V C C /V R E F
AGND
GND

0 .0 /A
0 .1 /A
0 .2 /A
0 .3 /A
0 .4 /A
0 .5 /A
0 .6 /A
0 .7 /A

VCC

P
P
P
P
P
P
P
P


21
22
23
24
25
26
27
28

V R E F /2

6
7

4
19
20
9

VCC

V _ IN +
V _ IN -

Vin

R 3 10K

C1
150p


VCC

VCC

8
10

1
2
3
4
5
6
7
8

D
D
D
D
D
D
D
D

U2

GND


39
38
37
36
35
34
33
32

40

U1

VCC

R1
10K

C3
10uF
SW 1

R2
100

R4
10K

Vref/2


RESET

20

15

15 | P a g e


16

Bài tập lớn vi xử lý trong đo lường và điều khiển

2.2. Mạch thời gian thực DS1307
2.2.1. Cấu trúc sơ đồ chân DS1307
DS1307 là chip thời gian thực hay RTC (Read time clock). Đây là một
IC tích hợp cho thời gian bởi vì tính chính xác về thời gian tuyệt đối cho thời
gian: Thứ, ngày, tháng, năm, giờ, phút, giây. DS1307 là chế tạo bởi Dallas.
Chip này có 7 thanh ghi 8 bit mỗi thanh ghi này chứa: Thứ, ngày, tháng, năm,
giờ, phút, giây. Ngoài ra DS1307 còn chứa 1 thanh ghi điều khiển ngõ ra phụ
và 56 thanh ghi trống các thanh ghi này có thể dùng như là RAM. DS1307
được đọc thông qua chuẩn truyền thông I2C nên do đó để đọc được và ghi từ
DS1307 thông qua chuẩn truyền thông này. Do nó được giao tiếp chuẩn I2C
nên cấu tạo bên ngoài nó rất đơn giản.

Hình 2.8 :Mạch DS1307

Chip này có 8 chân và chúng ta hay dùng là dạng Dip và các chân nó
được mô tả như sau :
+ X1 và X2 là đầu vào dao động cho DS1307. Cần dao động thạch anh

32.768Khz
+ Vbat là nguồn nuôi cho chip. Nguồn này từ ( 2V- 3.5V) ta lấy pin có nguồn
3V. Đây là nguồn cho chip hoạt động liên tục khi không có nguồn Vcc mà
DS1307 vẫn hoạt động theo thời gian
+ Vcc là nguồn cho giao tiếp I2C. Điện áp cung cấp là 5V chuẩn và được
dùng chung với vi xử lý. Nếu mà Vcc không có mà Vbat có thì DS1307 vẫn
hoạt động bình thường nhưng mà không ghi và đọc được dữ liệu.
+ GND là nguồn Mass chung cho cả Vcc và Vbat
+ SQW/OUT là một ngõ ra phụ tạo xung dao động (xung vuông). Chân này
tôi nghĩ không ảnh hưởng đến thời gian thực nên chúng ta không sử dụng
chân này trong thời gian thực và bỏ trống chân này!
16 | P a g e


17

Bài tập lớn vi xử lý trong đo lường và điều khiển

+ SCL và SDA là hai bus dữ liệu của DS1307. Thông tin truyền và ghi đều
được truyền qua 2 đường truyền này theo chuẩn I2C
Các địa chỉ thanh ghi:
1.
2.
3.
4.
5.
6.
7.

Giây

Phút
Giờ
Thứ
Ngày
Tháng
Năm

0X00
0X01
0X02
0x03
0X04
0X05
0X06

2.2.2. Giới thiệu giao tiếp I2C








I2C là chuẩn giao tiếp nối tiếp sử dụng 2 dây phát triển bởi
Philips...
I2C được ứng dụng rất nhiều trong tất cả các thiết bị do lường,
cảm biến, module, VDK, IC thời gian thực, EEPROM
24Cxx ......
Để giao tiếp được với các thiết bị trên ta phải kết nối chúng với

nhau qua 2 dây là SDA (dữ liệu 2 chiều) và SCL (xung nhịp).
I2C cho phép tất cả các thiết bị có I2C nối chung đường giao tiếp
tức là VD có 3 thiết bị có I2C thì có thể dùng chung 2 dây giao
tiếp SDA và SCL vì tất cả các thiết bị I2C đều phải có 1 địa chỉ
riêng theo mối quan hệ Chủ-Tớ (Master-Slave)
8051 không tích hợp sẵn I2C, phải lập trình riêng

I2C sử dụng hai đường truyền tín hiệu:





Một đường xung nhịp đồng hồ(SCL) chỉ do Master phát đi
( thông thường ở 100kHz và 400kHz. Mức cao nhất là 1Mhz và
3.4MHz).
Một đường dữ liệu(SDA) theo 2 hướng.
SCL và SDA luôn được kéo lên nguồn bằng một điện trở kéo lên
có giá trị xấp xỉ 4,7 KOhm (có thể dao động trong khoảng
1KOhm đến 4.7 Kohm.

17 | P a g e


18

Bài tập lớn vi xử lý trong đo lường và điều khiển

Dữ liệu được truyền trên bus I2C theo từng bit, bit dữ liệu được
truyền đi tại mỗi sườn lên của xung clock trên SCL

Quá trình thay đổi bit dữ liệu xảy ra khi SCL ở mức thấp.

Các bước truyền nhận dữ liệu I2C
B1: Trạm chủ xác định thiết bị cần giao tiếp và chế độ giao tiếp là read
hay là write, việc này được thực hiện bằng cách gửi 7bit địa chỉ thiết bị và
thêm bit cuối cùng, 0 nếu read và 1 nếu write.
B2: Reset chế độ bằng cách thực hiện liên tiếp việc start và stop
B3: Gửi địa chỉ thanh ghi cần truy nhập của thiết bị cũng như chế độ
read hay write.
18 | P a g e


19

Bài tập lớn vi xử lý trong đo lường và điều khiển

B4: Gửi hoặc nhận 1byte dữ liệu. Sau khi truyền 1byte dữ liệu, bên
nhận đc dữ liệu sẽ gửi lại 1bit ACK để xác nhận đã nhận được dữ liệu và tiếp
tục truyền hoặc bit NACK để báo nhận đc dữ liệu nhưng kết thúc quá trình
truyền.

2.2.2.1.Code lập trình I2C:
void start_i2c()
{
SCL=1;
SDA=1;
SDA=0;
SCL=0;
}
void stop_i2c()

{
SCL=1;
SDA=0;
SDA=1;
SCL=1;
}
unsigned char write_i2c(unsigned char dat)
{
int i;
for(i=0;i<8;i++)
{
SDA=(dat&0x80);
SCL=1;
SCL=0;
dat<<=1;
}
SCL=1;
SCL=0;

19 | P a g e


20

Bài tập lớn vi xử lý trong đo lường và điều khiển
return dat;
}
unsigned char read_i2c(void)
{
bit rb_bit;

unsigned char i,dat;
dat=0x00;
for(i=0;i<8;i++)
{
SCL=1;
rb_bit=SDA;
dat=dat<<1;
dat=dat|rb_bit;
SCL=0;
}
return dat;
}

2.2.2.2.Code lập trình ds1307:
void write_ds1307(unsigned char add,unsigned char dat)
{
start_i2c();
write_i2c(0xd0);
write_i2c(add);
write_i2c(((dat/10)<<4)|(dat%10));
stop_i2c();
}
unsigned char read_ds1307(unsigned char add)
{
unsigned int ret;
start_i2c();
write_i2c(0xd0);
write_i2c(add);
start_i2c();
write_i2c(0xd1);

ret = read_i2c();
stop_i2c();
ret = (((ret/16)*10)+ (ret & 0x0f));

20 | P a g e


21

Bài tập lớn vi xử lý trong đo lường và điều khiển
return ret;
}
void set_ds1307()
{
write_ds1307(SEC,sec);
write_ds1307(MIN,min);
write_ds1307(HOUR,hour);
write_ds1307(DATE,date);
write_ds1307(MON,mon);
write_ds1307(YEAR,year);
}
void get_time()
{
hour=read_ds1307(HOUR);
min=read_ds1307(MIN);
sec=read_ds1307(SEC);
}
void get_date()
{
date=read_ds1307(DATE);

mon=read_ds1307(MON);
year=read_ds1307(YEAR);
}

2.2.3. Ghép nối DS1307 với vi điều khiển

21 | P a g e


22

Bài tập lớn vi xử lý trong đo lường và điều khiển

2.3. Khối hiển thị LCD

Hình 2.9 : LCD 16x4

Chức năng chân LCD
VSS: tương đương với GND - cực âm
VDD: tương đương với VCC - cực dương (5V)
Constrast Voltage (Vo): điều khiển độ sáng màn hình
Register Select (RS): điều khiển địa chỉ nào sẽ được ghi dữ liệu
Read/Write (RW): Bạn sẽ đọc (read mode) hay ghi (write mode)
dữ liệu? Nó sẽ phụ thuộc vào bạn gửi giá trị gì vào.
 Enable pin: Cho phép ghi vào LCD
 D0 - D7: 8 chân dư liệu, mỗi chân sẽ có giá trị HIGH hoặc LOW
nếu bạn đang ở chế độ đọc (read mode) và nó sẽ nhận giá trị
HIGH hoặc LOW nếu đang ở chế độ ghi (write mode)
 Backlight (Backlight Anode (+) và Backlight Cathode (-)): Tắt bật
đèn màn hình LCD.Các lệnh cơ bản trong LCD







Các lệnh cơ bản trong LCD
Mã lệnh
0x00
0x01
0x02
0x06
0x0C
0x0E
0xB0

Chức năng
Turn on LCD
Xóa màn hình
Di chuyển con trỏ về đầu màn hình
Tự động di chuyển con trỏ sang vị trí kế tiếp khi xuất ra LCD
1 ký tự
Bật hiện thị và tắ con trỏ
Bật hiện thị và bật con trỏ
Đưa con trỏ ra đầu dòng 1
22 | P a g e


23


Bài tập lớn vi xử lý trong đo lường và điều khiển

0xC0
0x38
0x28

Đưa con trỏ ra đầu dòng 2
Giao tiếp 8 bit
Giao tiếp 4 bit

2.3.1. Các bước điều khiển LCD









Bước 0 : Chuẩn bị phần cứng. Dùng tuốc vít hay cái gì bạn có
xoay biến trở 5 K điều chỉnh độ tương phản của LCD. Xoay cho
đến khi các ô vuông(các điểm ảnh) của LCD hiện lên thì xoay
ngược biến trở lại 1 chút.
Bước 1 : Khởi tạo cho LCD.
Bước 2 : Gán các giá trị cho các bit điều khiển các chân
RS,RW,EN cho phù hợp với các chế độ : Hiển thị kí tự lên LCD
hay Thực hiện 1 lệnh của LCD.
Bước 3: Xuất byte dữ liệu ra cổng điều khiển 8 bit dữ liệu của
LCD.

Bước 4: Kiểm tra cờ bận xem LCD sẵn sàng nhận dữ liệu mới
chưa.
Bước 5: Quay vòng lại bước 1

23 | P a g e


24

Bài tập lớn vi xử lý trong đo lường và điều khiển

CHƯƠNG 3: Xây dựng ứng dụng trên cơ sở 8051
3.1. Lưu đồ thuật toán

Chương trình điều khiển bao gồm các thuật toán điều khiển cơ bản i2c,
ds1307 và LCD.
Ngoài ra bao gồm thêm các chương trình con:
-

Hiển thị
Cài đặt thời gian
Cài đặt chế độ hẹn giờ
Khởi động động cơ
Chế độ khởi động bằng tay

Và, một chương trình chính

24 | P a g e



25

Bài tập lớn vi xử lý trong đo lường và điều khiển

3.1.1. Thuật toán khởi động động cơ “ khoiđongdc()”: theo chế độ thời
gian

B ắ t đ ầu

Cài đặt hẹn giờ
S

Bật hẹn giờ
Đ

S

Đến giờ hẹn
Đ
Khởi động động cơ
Đ

Đ

Chưa hết time cài và stop=1 và start =1

S
úcTắt động cơ

Kết thúc


25 | P a g e


×