Học Viện Công Nghệ Bưu Chính Viễn Thông
Cơ sở tại thành phố Hồ Chí Minh
ĐỒ ÁN MÔN HỌC
Môn học: Kĩ thuật ghép nối và thiết bị ngoại vi
Đề tài : đo nhiệt độ và đặt giờ tưới nước cho vườn
Giáo viên hướng dẫn : Ths. Phạm Thế Duy
Họ và tên sinh viên:
1. Trịnh Phi Hùng
MSSV : 409190009
2. Nguyễn Đăng Khoa MSSV : 409190011
Hồ chí minh năm 2013
----------
-1-
MỤC LỤC
trang
Lời nói đầu
Mô tả công việc và lý do chọn đề tài:
1. Lý do chọn đề tài
2. Mô tả đề tài
Tìm hiểu linh kiện và các thiết bị trong đề tài
1. MCU Atmega32
a. Đặc điểm
b. Các I/O
c. Chức năng ADC
d. Giao tiếp sử dụng I2C
e. Giao tiếp USART
2. IC thời gian thực DS1307
a. Cấu tạo ngoài và đặc điểm
b. Các thanh ghi của IC
c. Giao tiếp I2C với AVR
3. Cảm biến độ ẩm DHT-11
a. Đặc điểm kỹ thuật và cấu tạo chân linh kiện
b. Nguyên lý hoạt động
4. Cảm biến nhiệt độ LM35
a. Đặc điểm kỹ thuật và cấu tạo chân linh kiện
b. Nguyên lý hoạt động
5. LCD 1602
a. Đặc điểm và cấu tạo ngoài LCD 1602
b. Các hàm điều khiển LCD
6. Truyền nhận dữ liệu qua cổng nối tiếp
a. Cấu trúc cổng nối tiếp
b. Cổng RS-232 trên PC
c. Truyền dữ liệu
d. Nhận dữ liệu
7. IC chuyển đổi tín hiệu USART-RS-232 MAX 232
a. Đặc điểm và sơ đồ chân IC MAX 232
b. Nguyên lý hoạt động
8. USB-COM với PL2303
a. Đặc điểm và sơ đồ chân IC PL2303
b. Nguyên lý hoạt động
9. Kết nối mạng RS-485
a. Khái niệm đa mạng
b. Chuẩn RS-485
c. Một số vấn đề liên quan đến RS-485
d. Các kiểu truyền nhận trong mạng RS-485
Thiết kế phần cứng
1. Khối xử lí và hiển thị
2. Khối thời gian thực
3. Khối giao tiếp máy tính
-2-
Thiết kế phần mềm
1. Giải thuật cho máy tính
2. Giải thuật cho vi điều khiển
a. Lưu đồ chương trình chính
b. Chương trình hiển thị thời gian và nhiệt độ
c. Giải thuật hiển thị giờ tưới hằng ngày
d. Giải thuật chỉnh thời gian thực
Kết quả thi công
1. Hình ảnh
2. Hạn chế
3. Hướng giải quyết tiếp theo
-3-
Lời nói đầu
Với một lượng lớn dân số trong nước là nông dân và những năm gần đây các mô hình như
VAC, VACR, trang trại, nhà kính, … đã được các hộ dân quy hoạch với diện tích có thể lên đến hàng
trăm hecta, ngoài ra các nhân lực làm trong ngành nông nghiệp thường đã cao tuổi. Khi đó gánh nặng
công việc đã đặt ra làm sao có một mô hình tưới cây, rau, vườn ươm… một cách hoàn toàn tự động
hoặc bán tự động đã là mục tiêu cho chúng em chọn đề tài này. Hi vọng với mô hình tưới cây sẽ giảm
được phần nào công việc cho các hộ gia đình và nâng cao năng suất cây trồng, đạt được giá trị thương
phẩm cao hơn.
Tuy nhiên do hạn chế của đề tài chỉ dừng lại ở mức độ nghiên cứu đơn giản và tìm hiểu nên
nhóm em mong được sự hướng dẫn và góp ý thêm để chúng em hoang thành đề tài trong tương lai.
“Không thầy đố mày làm nên ”. Em xin cảm ơn tất cả các thầy, cô trong khoa điện tử 2 đã
giúp đỡ chúng em trong thời gian học tập tại trường và đã góp ý cho em nhưng ý kiến quý báu. Đặc
biệt em xin cảm ơn thầy Phạm Thế Duy và thầy Tôn Thất Bảo Đạt là giáo viên bộ môn và giao viên
hướng dẫn đã khuyến khích và giúp đỡ chúng em trong quá trình thiết kế và thi công đề tài.
-4-
I.
MÔ TẢ LÝ DO VÀ MỤC TIÊU CÔNG VIỆC:
Lý do chọn đề tài:
Nhóm em chọn đề tài mô hình tưới cây tự động và cảm biến nhiệt độ và độ ẩm với lý do:
Công việc nhà nông rất vất vả và nhiều công đoạn
Xu hướng trồng ra oan toàn trên những cánh đồng lớn đang được triển khai và nhân rộng ở
khắp các tỉnh thành
- Đối tượng làm nông chủ yếu là người lớn tuổi vì vậy muốn giảm gánh nặng công việc cho khi
làm nông
- Mô hình có thể áp dụng ở các cánh đồng rau, các vườn cây ăn quả hoặc các vườn cây công
nghiệp.
2. Mô tả đề tài:
- Mô hình hoạt động dựa trên đồng hồ thời gian thực, độ chính xác cao, từ đó đặt giờ tưới và các
thông số khác (lần tưới, thời lượng tưới) một cách chính xác.
- Hoạt động hoàn toàn tự động, chỉ cần đặt một lần và hoạt động cho các lần kế tiếp.
- Các cảm biến độ ẩm và nhiệt độ giúp thu thập thông tin vườn cây để có các phương án tưới
phù hợp.
- Có giao tiếp máy tính để có thể cập nhập thông tin về vườn cây, rau qua giao diện máy tính.
- Sơ đồ khối:
1/0
LCD 1602
I/O
analog
LM35
1/0
DS1307
I2C
ADC
1.
-
Cảm
biến
độ ẩm
analog
1/0
I/O
Đáp ứng(vòi
tưới)
MCU
(ATmega8 hoặc 32)
RS-232
USART
Các phím
bấm
Máy tính
1/0
I/O
Vcc,Vref,GND
5V DC
Nguồn
Mô tả:
-
MCU (atmega8 hoặc atmega32): làm bộ xử lý trung tâm các tín hiệu số, tương tự để hiển thị và
thực thi chương trình chính và làm một số giao tiếp với IC khác hoặc với máy tính cá nhân.
IC DS1307: IC thời gian thực được giao tiếp với MCU qua giao tiếp I2C.
-5-
-
II.
Các sensor: dùng làm chức năng đo các thông số môi trường rồi gửi các tín hiệu tương tự tới
bộ ADC của MCU để chuyển đổi và hiển thị nó mục đích kiểm soát và điều khiển.
Các phím bấm: dùng khi ta có thao tác điều khiển và cài đặt các thông số bằng tay trên mạch.
Lcd 1602 : hiển thị các thông số(thời gian, cài đặt tưới, nhiệt độ…) khi thực hiện đặt thông số
bằng tay.
Vòi tưới: được dùng để đóng mở cái relay khi đến thời gian tưới định sẵn.
Máy tính: giao tiếp với các mạch bên ngoài và điều khiển các mạch. Nó còn được dùng để
quản lý các vườn khác nhau.
Nguồn: (nguồn cho mạch): sử dụng điện áp DC5V để các IC, MCU, lcd hoạt động.
TÌM HIỂU CÁC LINH KIỆN THIẾT BỊ TRONG ĐỀ TÀI :
Đề tài có sử dụng một số linh kiện điện tử là các IC và MCU cùng một số chuẩn giao tiếp cơ bản
như USART, I2C, cảm biến được sử dụng như LM35, cảm biến độ ẩm, hiển thị bằng LCD 1602L, giao
tiếp máy tính có IC MAX232, IC chuyển đổi USB-COM hoặc cable chuyên dụng.
1.
a.
-
MCU ATmega32:
Đặc điểm:
Đây là dòng vi điều khiển của hãng Atmel có nhiều tính năng nổi trội
Cấu trúc tập lệnh thu gọn RISC, đơn giản, dể lập trình
Tiết kiệm năng lượng
Có 32 chân I/O, 4 port xuất nhập dữ liệu đa chức năng
32 thanh ghi đa dụng
Bộ nhớ 32Kb bộ nhớ Flash lập trình được, 1024Byte EEPROM
Tốc độ tối đa lên tới 16MHz, có thể sử dụng cả dao động nội chip và thạch anh ngoài
2 bộ Timer/counter 8 bit, một bộ so sánh
1 bộ timer/counter 16 bit
4 kênh PWM
8 kênh ADC hỗ trợ độ phân giải 10 bit và 8 bit
Các giao tiếp hỗ trợ như: I2C, SPI, USART
Điện áp hoạt động 4,5-5 V
Sơ đồ chân và đóng gói: loại 40 chân PDIP và loại TQFP/MLF (linh kiện dán)
-6-
1-8
9
Chân số
Tên chân
PORT B
RESET
10, 11
Nguồn
12, 13
Chân gắn dao
động ngoài
Chức năng
Port xuất nhập B, ngoài ra còn có chức năng là giao tiếp SPI
Chân reset của atmega 32, chân này được kích khi có một tích cực mức
thấp tác động lên, khi đó atmega32 sẽ hoạt động lại
VCC, chân cấp nguồn dương VCC và GND
Hai chân gắn thạch anh dao động ngoài của chip khi sử dụng, muốn sử
dụng được dao động ngoài ta cần fuse bít để chip được set sử dụng thạch
anh
-7-
14-21
PORT D
22-29
Port C
30-31
32
33-40
Chân nguồn
Vref
Port A
Port truy xuất I/O, ngoài ra còn có chức năng khác như:
- Pd0-pd1: chân rxd và txd sử dụng giao tiếp USART
- Pd2-pd3: chân ngắt ngoài
- Pd4-pd5: ngõ ra so sánh
Port truy xuất I/O, ngoài ra còn có chức năng khác như:
- Pc0-pc1: chân giao tiếp i2c
Chân acvv và gnd
Chân điện áp so sánh (dùng trong chế độ adc)
Port truy xuất I/O, ngoài ra còn có chức năng là 8 kênh adc.
b. Các I/O:
- Ngõ ra cực máng hở.
DDxn
0
0
0
1
1
ATmega32 có 4 PORT xuất nhập dữ liệu là: A, B,C,D
Có 3 thanh ghi chức năng để lập trình vào ra cho các chân I/O là: DDR, PIN, PORT.
Cấu hình I/O theo bảng sau:
PORTxn
0
1
1
0
1
I/O
Input
Input
Input
Output
Output
Pull-up
không
Có
Không
Không
Không
Chức năng
Trạng thái Hi-z trở kháng cao
Ngõ vào có điện trở kéo lên
Trạng thái Hi-z trở kháng cao
Ngõ ra mức thấp
Ngõ ra mức cao
- Thanh ghi PINx để nhận các tín hiệu vào.
c. Chức năng ADC:
- PORT A của ATmega32 có chức năng ADC kiêm cổng vào ra số
Đặc điểm :
-
Độ phân giải 10 bit hoặc 8 bit tùy chức năng
-8-
-
8 kênh ADC đơn
Tốc độ chuyển đổi 13μs - 260μs.
0 – Vcc ADC dãi điện áp ngõ vào.
Ngắt ADC khi chuyển đổi xong
Có 4 thanh ghi trong AVR để dùng chức năng ADC
-
ADMUX: thanh ghi 8 bit dùng để chọn điện áp tham chiếu cho ADC, 1 trong 3 nguồn điện áp
tham chiếu có thể chọn là : điện áp từ chân VREF, điện áp tham chiếu nội 2,56V hoặc điện áp
VCC theo bảng sau:
-
ADCSRA (ADC Control and Status Register A): là thanh ghi điều khiển hoạt động và chứa
trạng thái của module ADC.
Bit 7 - ADEN(ADC Enable): viết giá trị 1 vào bit này tức bạn đã cho phép module ADC được
sử dụng. Tuy nhiên khi ADEN=1 không có nghĩa là ADC đã hoạt động ngay, bạn cần set một
bit khác lên 1 để bắt đầu quá trình chuyển đổi, đó là bit ADSC.
Bit 6 - ADSC(ADC Start Conversion): set bit này lên 1 là bắt đầu khởi động quá trình chuyển
đổi. Trong suốt quá trình chuyển đổi, bit ADSC sẽ được giữ nguyên giá trị 1, khi quá trình
chuyển đổi kết thúc (tự động), bit này sẽ được trả về 0. Vì vậy bạn không cần và cũng không
nên viết giá trị 0 vào bit này ở bất kỳ tình huống nào. Để thực hiện một chuyển đổi, thông
thường chúng ta sẽ set bit ADEN=1 trước và sau đó set ADSC=1.
Bit 4 – ADIF(ADC Interrupt Flag): cờ báo ngắt. Khi một chuyển đổi kết thúc, bit này tự động
được set lên 1, vì thế người dùng cần kiểm tra giá trị bit này trước khi thực hiện đọc giá trị
chuyển đổi để đảm bảo quá trình chuyển đổi đã thực sự hoàn tất.
Bit 3 – ADIE(ADC Interrupt Enable): bit cho phép ngắt, nếu bit này được set bằng 1 và bit cho
phép ngắt toàn cục (bit I trong thanh ghi trạng thái của chip) được set, một ngắt sẽ xảy ra khi
một quá trình chuyển đổi ADC kết thúc và các giá trị chuyển đổi đã được cập nhật (các giá trị
chuyển đổi chứa trong 2 thanh ghi ADCL và ADCH).
Bit 2:0 – ADPS2:0(ADC Prescaler Select Bits): các bit chọn hệ số chia xung nhịp cho ADC.
ADC, cũng như tất cả các module khác trên AVR, cần được giữ nhịp bằng một nguồn xung
clock. Xung nhịp này được lấy từ nguồn xung chính của chip thông qua một hệ số chia. Các bit
-9-
-
ADPS cho phép người dùng chọn hệ số chia từ nguồn clock chính đến ADC. Tham khảo bảng
4 để biết cách chọn hệ số chia.
ADCL và ADCH (ADC Data Register): hai thanh ghi chứa giá trị chuyển đổi. Do độ phân giải
của module ADC trên AVR là 10 bit nên cần hai thanh ghi chứa giá trị chuyển đổi. Do tổng hai
thanh ghi là 16 bit nên bít ADLAR trong thanh ghi ADMUX quy định cách ghi kết quả vào hai
thanh ghi này:
ADLAR =0:
ADLAR =1:
d.
-
Giao tiếp sử dụng I2C:
Giao thức truyền thông đơn giản, đường bus chỉ cần hai dây scl và sda
7 bit địa chỉ cho phép lên tới 128 thiết bị slave.
Tốc độ truyền dữ liệu lên tới 400kHz.
Giao tiếp I2C là một ứng dụng hỗ trợ trong nhiều dòng vi xử lí, nó cho phép thiết kế hệ thống
kết nối lên đến 128 thiết bị mà chỉ cần hai dây bus, một dây clock (scl) và một dây data (sda).
- 10 -
-
-
Master: là chip khởi động quá trình truyền nhận, phát đi địa chỉ của thiết bị cần giao tiếp và
tạo xung giữ nhịp trên đường SCL.
Slave : là chip có địa chỉ cố định, được gọi bởi master và phục vụ yêu cầu của master.
Các thanh ghi sử dụng giao tiếp I2C trên AVR gồm 5 thanh ghi gồm có thanh ghi tốc độ giữ
nhịp TWBR, thanh ghi điều khiển TWCR, thanh ghi trạng thái TWSR, thanh ghi địa chỉ
TWAR, thanh ghi dữ liệu TWDR.
TWBR: quy định tốc độ phát xung giữ nhịp trên đường SCL của chip master.
Tốc độ xung giữ nhịp tính theo công thức:
TWBR : giá trị trong thanh ghi TWBR
TWPS : giá trị hai bit TWPS1 và TWPS0 nằm trong thanh thi trạng thái TWSR
-
TWCR: thanh ghi điều khiển hoạt động của I2C:
Thanh ghi này gồm 8 bít để điều khiển các hoạt động của I2C:
-
TWSR: thanh ghi trạng thái 8 bit, trong đó có 5 bít chứa code trạng thái của TWI và 3 bit lựa
chọn hệ số prescaler.
- 11 -
-
TWDR: thanh ghi dữ liệu chính của TWI. Trong quá trình nhận dữ liệu được lưu trong
TWDR, trong quá trình gửi dữ liệu sẽ được lấy và truyền trên đường SDA.
-
TWAR: thanh ghi chứa các địa chỉ của các chip slave.
e.
-
Giao tiếp USART:
Chế độ truyền song công (vừa truyền vừa nhận)’
Chế độ đồng bộ và cận đồng bộ.
Hỗ trợ khung truyền nối tiếp với 5,6,7,8 hoặc 9 bit dữ liệu và 1,2 stop bit.
Báo tràn dữ liệu
Có 5 thanh ghi được dùng trong giao tiếp USART là:
-
UDR: thanh ghi dữ liệu, chứa các dữ liệu nhận và phát đi của USART, thực chất nó là hai
thanh ghi TXB và RXB có chung địa chỉ.
-
UCSRA: đây là thanh ghi quan trọng điều khiển USART
- 12 -
Thanh ghi UCSRA gồm các bit trạng thái như bit báo quá trình nhận kết thúc RXC, truyền kết
thúc TXC, báo thanh ghi dữ liệu trống UDRE, khung truyền có lỗi FE, dữ liệu tràn DOR, kiểm tra
parity có lỗi PE.
-
UCSRB: cũng là một thanh ghi điều khiển USART quan trọng:
-
RXCIE (Receive Complete Interrupt Enable) là bit cho phép ngắt khi quá trình nhận
kết thúc. Việc nhận dữ liệu truyền bằng phương pháp nối tiếp không đồng bộ thường
được thực hiện thông qua ngắt, vì thế bit này thường được set bằng 1 khi USART
được dung nhận dữ liệu.
TXCIE (Transmit Complete Interrupt Enable) bit cho phép ngắt khi quá trình truyền
kết thúc.
UDRIE (USART Data Register Empty Interrupt Enable) là bit cho phép ngắt khi thanh
ghi dữ liệu UDR trống.
RXEN (Receiver Enable) là một bit quan trọng điều khiển bộ nhận của USART, đề
kích hoạt chức năng nhận dữ liệu bạn phải set bit này lên 1.
TXEN (Transmitter Enable) là bit điều khiển bộ phát. Set bit này lên 1 bạn sẽ khởi
động bộ phát của USART.
UCSZ2 (Chracter size) bit này kết hợp với 2 bit khác trong thanh ghi UCSRC quy định
độ dài của dữ liệu truyền/nhận. Chúng ta sẽ khảo sát chi tiết khi tìm hiểu thanh ghi
UCSRC.
RXB8 (Receive Data Bit 8) gọi là bit dữ liệu 8. Bạn nhớ lại rằng USART trong AVR
có hỗ trợ truyền dữ liệu có độ dài tối đa 9 bit, trong khi thanh ghi dữ liệu là thanh ghi 8
bit. Do đó, khi có gói dữ liệu 9 bit được nhận, 8 bit đầu sẽ chứa trong thanh ghi UDR,
cần có 1 bit khác đóng vai trò bit thứ chín, RXD8 là bit thứ chín này. Bạn chú ý là các
bit được đánh số từ 0, vì thế bit thứ chín sẽ có chỉ số là 8, vì lẽ đó mà bit này có tên là
RXD8 (không phải RXD9).
TXB8 (Transmit Data Bit 8), tương tự như bit RXD8, bit TXB8 cũng đóng vai trò bit
thứ 9 truyền thông, nhưng bit này được dung trong lúc truyền dữ liệu.
UCSRC: thanh ghi này dùng để quy định các thông số về khung truyền và chế độ truyền
UMSEL (USART Mode Select) là bit lựa chọn giữa 2 chế độ truyền thông đồng bộ và
không đồng bộ. Nếu UMSEL=0, chế độ không đồng bộ được chọn, ngược lại nếu
UMSEL=1, chế độ đồng bộ được kích hoạt. Xem bảng sau:
- 13 -
Hai bit UPM1 và UPM0( Parity Mode) được dùng để quy định kiểm tra pariry. Nếu
UPM1:0=00, parity không được sử dụng (mode này khá thông dụng), UPM1:0=01
không được sử dụng, UPM1:0=10 thì parity chẵn được dùng, UPM1:0=11 parity lẻ
được sử dụng xem bảng sau:
USBS (Stop bit Select), bit Stop trong khung truyền bằng AVR USART có thể là 1
hoặc 2 bit, nếu USBS=0 thì Stop bit chỉ là 1 bit trong khi USBS=1 sẽ có 2 Stop bit
được dùng.
Hai bit UCSZ1 và UCSZ2 (Character Size) kết hợp với bit UCSZ2 trong thanh ghi
UCSRB tạo thành 3 bit quy định độ dài dữ liệu truyền. Bảng 2 tóm tắt các giá trị có thể
có của tổ hợp 3 bit này và độ dài dữ liệu truyền tương ứng.
UCPOL (Clock Pority) là bit chỉ cực của xung kích trong chế độ truyền thông đồng bộ.
nếu UCPOL=0, dữ liệu sẽ thay đổi thay đổi ở cạnh lên của xung nhịp, nếu UCPOL=1,
dữ liệu thay đổi ở cạnh xuống xung nhịp. Nếu bạn sử dụng chế độ truyền thông không
đồng bộ, hãy set bit này bằng 0.
- 14 -
-
UBRRL và UBRRH: hai thanh ghi thấp và cao quy định tốc độ baud.
Bảng tính tốc độ Baud:
Với mỗi thạch anh gắn ngoài có một sai số truyền tính bằng công thức:
2. IC thời gian thực DS1307:
a. Cấu tạo ngoài và đặc điểm:
Thứ tự chân
Chức năng
- 15 -
1,2
3
4,8
5,6
7
Chân dao động, gắn thạch anh dao động.
Gắn nguồn PIN ngoài phòng khi mất nguồn nuôi
Chân nguồn Vcc và GND
Chân giữ xung nhịp và dữ liệu trong giao tiếp I2C
Chân cấp xung ra ngoài
IC được hãng DALLAS sản xuất và giới thiệu. IC thời gian thực (Real Timer Clock) có thể sử
dụng để đếm thời gian (giờ, phút, giây), lịch (thứ, ngày, tháng, năm).
- Được thiết kế tới lịch của năm 2100.
- 56-byte, dùng nguồn PIN ngoài phòng khi mất điện.
- Giao tiếp I2C với vi điều khiển.
b. Các thanh ghi của IC:
- Ds1307 có 64 thanh ghi 8 bit đáng dấu từ địa chỉ 00H-3FH, chỉ 8 thanh ghi có chức năng đồng
hồ còn lại 56 thanh ghi còn lại có chức năng như bộ nhớ RAM của IC
-
-
Ba thanh ghi đầu từ địa chỉ 00H- 02H có chức năng là đồng hồ gồm có : SECONDS,
MINUTES, HOURS
Bốn thanh ghi từ địa chỉ 03H-06H có chức năng ghi lại lịch gồm: DAY, DATE, MONTH,
YEAR
Thanh ghi thứ 8 (CONTROL) có chức năng cấp một xung ra chân số 7.
- 16 -
Tổ chức các thanh ghi trong IC ds1307:
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 bit điều khiển có 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ỉ 0x01, 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ỉ 0x02. 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 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 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ĩ 0x03. 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).
c. Giao tiếp i2c với AVR:
- DS 1307 hoạt động với AVR ở chế độ slave
-
- 17 -
-
Địa chỉ của ds1307 trong i2c là số nhị phân cố định 1101000 vì thế trong mạch này không thể
tồn tại 2 IC ds1307, ta có thể sử dụng các hàm trong codevision để đọc giờ và lịch trong
ds1307 và đưa vào AVR xử lí.
Hàm
void rtc_get_time(unsigned char
*hour, unsigned char *min, unsigned
char *sec)
void rtc_set_time(unsigned char
hour, unsigned char min, unsigned
char sec)
void rtc_get_date(unsigned char
*date, unsigned char *month,
unsigned char *year)
Chức năng
Đọc giá trị hiện tại của ds1307
Cài đặt giờ , phút, giây cho ds1307
Cài đặt ngày, tháng, năm cho ds1307
3. Cảm biến độ ẩm DHT11:
a. đặc điểm kĩ thuật và cấu tạo chân linh kiện:
- DHT11 có cấu tạo 4 chân như hình. Nó sử dụng giao tiếp số theo chuẩn 1
- Thông số kỹ thuật:
- 18 -
+ Do độ ẩm: 20%-95%
+ Nhiệt độ: 0-50ºC
+ Sai số độ ẩm ±5%
+ Sai số nhiệt độ: ±2ºC
b. Nguyên lý hoạt động:
- Sơ đồ kết nối vi xử lý:
- Nguyên lý hoạt động:
Để có thể giao tiếp với DHT11 theo chuẩn 1 chân vi xử lý thực hiện theo 2 bước:
+ Gửi tin hiệu muốn đo (Start) tới DHT11, sau đó DHT11 xác nhận lại.
+ Khi đã giao tiếp được với DHT11, Cảm biến sẽ gửi lại 5 byte dữ liệu và nhiệt độ đo
được.
- Bước 1: gửi tín hiệu Start
+ MCU thiết lập chân DATA là Output, kéo chân DATA xuống 0 trong khoảng thời
gian >18ms. Trong Code mình để 25ms. Khi đó DHT11 sẽ hiểu MCU muốn đo giá trị nhiệt độ
và độ ẩm.
+ MCU đưa chân DATA lên 1, sau đó thiết lập lại là chân đầu vào.
+ Sau khoảng 20-40us, DHT11 sẽ kéo chân DATA xuống thấp. Nếu >40us mà chân
DATA ko được kéo xuống thấp nghĩa là ko giao tiếp được với DHT11.
- 19 -
+ Chân DATA sẽ ở mức thấp 80us sau đó nó được DHT11 kéo nên cao trong 80us.
Bằng việc giám sát chân DATA, MCU có thể biết được có giao tiếp được với DHT11 ko. Nếu
tín hiệu đo được DHT11 lên cao, khi đó hoàn thiện quá trình giao tiếp của MCU với DHT.
- Bước 2: đọc giá trị trên DHT11
+ DHT11 sẽ trả giá trị nhiệt độ và độ ẩm về dưới dạng 5 byte. Trong đó:
Byte 1: giá trị phần nguyên của độ ẩm (RH%)
Byte 2: giá trị phần thập phân của độ ẩm (RH%)
Byte 3: giá trị phần nguyên của nhiệt độ (TC)
Byte 4 : giá trị phần thập phân của nhiệt độ (TC)
Byte 5 : kiểm tra tổng.
+ Nếu Byte 5 = (8 bit) (Byte1 +Byte2 +Byte3 + Byte4) thì giá trị độ ẩm và nhiệt độ là
chính xác, nếu sai thì kết quả đo không có nghĩa.
+ Đọc dữ liệu: Sau khi giao tiếp được với DHT11, DHT11 sẽ gửi liên tiếp 40 bit 0 hoặc 1
về MCU, tương ứng chia thành 5 byte kết quả của Nhiệt độ và độ ẩm.
Bit 0:
Bit 1:
- 20 -
- Xem thêm -