You are on page 1of 19

2.

Các chuẩn kết nối sử dụng trong đồ án


2.1. Giao thức I2C
2.1.1. Khái niệm
I2C (Inter – Integrated Circuit) là 1 giao thức giao tiếp nối tiếp đồng bộ được phát
triển bởi Philips Semiconductors, sử dụng để truyền nhận dữ liệu giữa các IC với nhau
chỉ sử dụng hai đường truyền tín hiệu.
Các bit dữ liệu sẽ được truyền từng bit một theo các khoảng thời gian đều đặn
được thiết lập bởi 1 tín hiệu đồng hồ.
Bus I2C thường được sử dụng để giao tiếp ngoại vi cho rất nhiều loại IC khác
nhau như các loại vi điều khiển, cảm biến, EEPROM, ….
2.1.2. Đặc điểm:
Sau đây là một số đặc điểm quan trọng của giao thức giao tiếp I2C:
- Chỉ cần có hai đường bus (dây) chung để điều khiển bất kỳ thiết bị / IC nào trên
mạng I2C
- Không cần thỏa thuận trước về tốc độ truyền dữ liệu như trong giao tiếp UART.
Vì vậy, tốc độ truyền dữ liệu có thể được điều chỉnh bất cứ khi nào cần thiết
- Cơ chế đơn giản để xác thực dữ liệu được truyền
- Sử dụng hệ thống địa chỉ 7 bit để xác định một thiết bị / IC cụ thể trên bus I2C
- Các mạng I2C dễ dàng mở rộng. Các thiết bị mới có thể được kết nối đơn giản với
hai đường bus chung I2C
2.1.3. Phần cứng:
Bus vật lý I2C:
Bus I2C (dây giao tiếp) chỉ gồm hai dây và được đặt tên là Serial Clock Line
(SCL) và Serial Data Line (SDA). Dữ liệu được truyền đi được gửi qua dây SDA và được
đồng bộ với tín hiệu đồng hồ (clock) từ SCL. Tất cả các thiết bị / IC trên mạng I2C được
kết nối với cùng đường SCL và SDA như sau:

Cả hai đường bus I2C (SDA, SCL) đều hoạt động như các bộ lái cực máng hở
(open drain). Nó có nghĩa là bất kỳ thiết bị / IC trên mạng I2C có thể lái SDA và SCL
xuống mức thấp, nhưng không thể lái chúng lên mức cao. Vì vậy, một điện trở kéo lên
(khoảng 1 kΩ đến 4,7 kΩ) được sử dụng cho mỗi đường bus, để giữ cho chúng ở mức
cao (ở điện áp dương) theo mặc định.
Lý do sử dụng một hệ thống cực máng hở (open drain) là để không xảy ra hiện
tượng ngắn mạch, điều này có thể xảy ra khi một thiết bị cố gắng kéo đường dây lên cao
và một số thiết bị khác cố gắng kéo đường dây xuống thấp.

Thiết bị chủ (Master) và tớ (Slave)

Các thiết bị kết nối với bus I2C được phân loại hoặc là thiết bị Chủ (Master) hoặc
là thiết bị Tớ (Slave). Ở bất cứ thời điểm nào thì chỉ có duy nhất một thiết bị Master ở
trang thái hoạt động trên bus I2C. Nó điều khiển đường tín hiệu đồng hồ SCL và quyết
định hoạt động nào sẽ được thực hiện trên đường dữ liệu SDA.
Tất cả các thiết bị đáp ứng các hướng dẫn từ thiết bị Master này đều là Slave. Để
phân biệt giữa nhiều thiết bị Slave được kết nối với cùng một bus I2C, mỗi thiết bị Slave
được gán một địa chỉ vật lý 7-bit cố định.
Khi một thiết bị Master muốn truyền dữ liệu đến hoặc nhận dữ liệu từ một thiết bị
Slave, nó xác định địa chỉ thiết bị Slave cụ thể này trên đường SDA và sau đó tiến hành
truyền dữ liệu. Vì vậy, giao tiếp có hiệu quả diễn ra giữa thiết bị Master và một thiết bị
Slave cụ thể.
Tất cả các thiết bị Slave khác không phản hồi trừ khi địa chỉ của chúng được chỉ
định bởi thiết bị Master trên dòng SDA.

2.1.4. Khung truyển I2C

Khối bit địa chỉ: Thông thường quá trình truyền nhận sẽ diễn ra với rất nhiều thiết
bị, IC với nhau. Do đó để phân biệt các thiết bị này, chúng sẽ được gắn 1 địa chỉ vật lý 7
bit cố định.
Bit Read/Write: Bit này dùng để xác định quá trình là truyền hay nhận dữ liệu từ
thiết bị Master. Nếu Master gửi dữ liệu đi thì ứng với bit này bằng ‘0’, và ngược lại, nhận
dữ liệu khi bit này bằng ‘1’.
Bit ACK/NACK: Viết tắt của Acknowledged / Not Acknowledged. Dùng để so
sánh bit địa chỉ vật lý của thiết bị so với địa chỉ được gửi tới. Nếu trùng thì Slave sẽ được
đặt bằng ‘0’ và ngược lại, nếu không thì mặc định bằng ‘1’.
Khối bit dữ liệu: Gồm 8 bit và được thiết lập bởi thiết bị gửi truyền đến thiết bị
nhân. Sau khi các bit này được gửi đi, lập tức 1 bit ACK/NACK được gửi ngay theo sau
để xác nhận rằng thiết bị nhận đã nhận được dữ liệu thành công hay chưa. Nếu nhận
thành công thì bit ACK/NACK được set bằng ‘0’ và ngược lại.
Quá trình truyền nhận dữ liệu:
Bắt đầu: Thiết bị Master sẽ gửi đi 1 xung Start bằng cách kéo lần lượt các đường
SDA, SCL từ mức 1 xuống 0.

Tiếp theo đó, Master gửi đi 7 bit địa chỉ tới Slave muốn giao tiếp cùng với bit
Read/Write.
Slave sẽ so sánh địa chỉ vật lý với địa chỉ vừa được gửi tới. Nếu trùng khớp, Slave
sẽ xác nhận bằng cách kéo đường SDA xuống 0 và set bit ACK/NACK bằng ‘0’. Nếu
không trùng khớp thì SDA và bit ACK/NACK đều mặc định bằng ‘1’.
Thiết bị Master sẽ gửi hoặc nhận khung bit dữ liệu. Nếu Master gửi đến Slave thì
bit Read/Write ở mức 0. Ngược lại nếu nhận thì bit này ở mức 1.
Nếu như khung dữ liệu đã được truyền đi thành công, bit ACK/NACK được set
thành mức 0 để báo hiệu cho Master tiếp tục.
Sau khi tất cả dữ liệu đã được gửi đến Slave thành công, Master sẽ phát 1 tín hiệu
Stop để báo cho các Slave biết quá trình truyền đã kết thúc bằng các chuyển lần lượt
SCL, SDA từ mức 0 lên mức 1.
2.2. Giao tiếp 1 Wire
2.2.1. Giới thiệu
OneWire là hệ thống bus giao tiếp được thiết kế bởi Dallas Semiconductor Corp.
Giống như tên gọi, hệ thống bus này chỉ sử dụng 1 dây để truyền nhận dữ liệu.
Chính vì chỉ sử dụng 1 dây nên giao tiếp này có tốc độ truyền thấp nhưng dữ liệu
lại truyền được khoảng cách xa hơn.
OneWire chủ yếu sử dụng để giao tiếp với các thiết bị nhỏ, thu thập và truyền
nhận dữ liệu thời tiết, nhiệt độ, … các công việc không yêu cầu tốc độ cao.
Giống như các chuẩn giao tiếp khác, 1-Wire cho phép truyền nhận dữ liệu với
nhiều Slave trên đường truyền. Tuy nhiên chỉ có thể có 1 Master (điểm này giống với
SPI).

2.2.2. Khung truyền giao tiếp


1-Wire hoạt động như thế nào?
So với các chuẩn giao tiếp cơ bản như UART, SPI, I2C mà chúng ta đã biết, cách thức
hoạt động của OneWire có hơi “lạ” 1 chút.
Như chúng ta thấy ở hình trên, đường dây luôn được giữ ở mức cao (High).
Các thao tác hoạt động cơ bản của bus sẽ được quy định bởi thời gian kéo đường truyền
xuống mức thấp (Low) như hình vẽ dưới.
Có 4 thao tác cơ bản như sau:
Gửi bit 1: Khi muốn gửi đi bit 1, thiết bị Master sẽ kéo bus xuống mức 0 trong một
khoảng thời gian A (µs) và trở về mức 1 trong khoảng B (µs).
Gửi bit 0: Thiết bị Master kéo bus xuống mức 0 trong một khoảng thời gian C (µs)
và trở về mức 1 trong khoảng D (µs).
Đọc bit: Thiết bị Master kéo bus xuống 1 khoảng A (µs). Trong khoảng thời gian
E (µs) tiếp theo, thiết bị master sẽ tiến hành lấy mẫu. Có nghĩa trong E (µs) này, nếu bus
ở mức 1, thiết bị master sẽ đọc bit 1. Ngược lại, nếu bus ở mức 0 thì master sẽ đọc được
bit 0.
Reset: Thiết bị Master kéo bus xuống 1 khoảng thời gian H (µs) và sau đó về mức
1. Khoảng thời gian này gọi là tín hiệu reset. Trong khoảng thời gian I (µs) tiếp theo, thiết
bị master tiến hành lấy mẫu. Nếu thiết bị slave gắn với bus gửi về tín hiệu 0, (tức bus ở
mức 0), master sẽ hiểu rằng slave vẫn có mặt và quá trình trao đổi dữ liệu lại tiếp tục.
Ngược lại nếu slave gửi về tin hiệu 1 (bus ở mức 1) thì master hiểu rằng không có thiết bị
slave nào tồn tại và dừng quá trình.

3. Các linh kiện sử dụng trong bài


3.1. Khối vi điều khiển: Arduino UNO R3
3.1.1. Giới thiệu về Arduino
- Arduino Uno là một board mạch vi điều khiển được phát triển bởi Arduino.cc,
một nền tảng điện tử mã nguồn mở chủ yếu dựa trên vi điều khiển AVR Atmega328P.
Với Arduino chúng ta có thể xây dựng các ứng dụng điện tử tương tác với nhau thông
qua phần mềm và phần cứng hỗ trợ.
- Khi arduino chưa ra đời, để làm được một dự án điện tử nhỏ liên quan đến lập trình,
biên dịch, chúng ta cần đến sự hỗ trợ của các thiết bị biên dịch khác để hỗ trợ. Ví dụ như,
dùng Vi điều khiển PIC hoặc IC vi điều khiển họ 8051..., chúng ta phải thiết kế chân nạp
onboard, hoặc mua các thiết bị hỗ trợ nạp và biên dịch như mạch nạp 8051, mạch nạp
PIC...
- Hiện nay Arduino được biết đến ở Việt Nam rất rộng rãi. Từ học sinh trung học, đến
sinh viên và người đi làm. Những dự án nhỏ và lớn được thực hiện một cách rất nhanh,
các mã nguồn mở được chia sẻ nhiều trên diễn dàn trong nước và nước ngoài. Giúp ích
rất nhiều cho những bạn theo đam mê nghiên cứu chế tạo những sản phẩm có ích cho xã
hội.
- Trong những năm qua, Arduino là bộ não cho hàng ngàn dự án điện tử lớn nhỏ, từ
những sản phẩm ra đời ứng dụng đơn giản trong cuộc sống đến những dự án khoa học
phức tạp.
Cứ như vậy, thư viện mã nguồn mở ngày một tăng lên, giúp ích cho rất nhiều người mới
biết đến Arduino cũng như những chuyên viên lập trình nhúng và chuyên gia cùng tham
khảo và xây dựng tiếp nối....
3.1.2. Tổng quan về các thông số trên Arduino UNO R3 và sơ đồ chân
Các thông số cơ bản:
 Vi xử lý: ATmega328P
 Điện áp hoạt động: 5 Volts
 Điện áp vào giới hạn: 7 đến 20 Volts
 Dòng tiêu thụ: khoảng 30mA
 Số chân Digital I/O: 14 (với 6 chân là PWM)
 UART: 1
 I2C: 1
 SPPI: 1
 Số chân Analog: 6
 Dòng tối đa trên mỗi chân I/O: 30 mA
 Dòng ra tối đa (5V): 500 mA
 Dòng ra tối đa (3.3V): 50 mA
 Bộ nhớ flash: 32 KB với 0.5KB dùng bởi bootloader
 SRAM: 2 KB
 EEPROM: 1 KB
 Clock Speed: 16 MHz
Sơ đồ chân kết nối:

Khối nguồn:
 5V: cấp điện áp 5V đầu ra, dùng để cấp nguồn cho các linh kiện điện tử kết nối với
Arduino
 3.3V: chức năng tương tự như cấp nguồn 5v nhưng đây là cấp điện áp 3.3V đầu ra.
 Ground: hay còn gọi là chân GND, là cực âm của nguồn điện cấp cho Arduino
UNO. Khi bạn dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những
chân này phải được nối với nhau.
 Vin (Voltage Input): tương tự như chân 5V, nhưng thêm chức năng cấp nguồn
ngoài cho Arduino UNO thay vì cắm USB, bạn nối cực dương của nguồn với chân
này và cực âm của nguồn với chân GND.
Các cổng vào ra (I/O) - Pin
Arduino cung cấp nhiều các chân I/O ( hay còn gọi là Pin ) để ta giao tiếp hay gửi
lệnh điều khiển các thiết bị, dưới đây là sẽ nói về các chân sử dụng nhiều nhất và phân
chúng làm các loại như sau:
Các chân Digital
- Phiên bản Arduino UNO R3 được sở hữu 14 chân digital từ 0 đến 13 dùng để đọc
hoặc xuất tín hiệu. Chúng chỉ có 2 mức điện áp có thể điều khiển là 0V và 5V với
dòng vào/ra tối đa trên mỗi chân là 40mA. Ngoài ra một số chân digital có chức
năng đặc biệt là chân PWM.

Chân PWM:
- Là các chân có dấu ‘~’ đằng trước, các chân này cho phép bạn xuất ra xung PWM
với độ phân giải 8bit (giá trị từ 0 đến 255) tương ứng với mức giao động điện áp
của chân từ 0V đến 5V, khác với các chân không phải PWM, chỉ có thể chọn giá
trị 0V hoặc 5V.
Các chân Analog
- Arduino UNO có 6 chân analog (A0 đến A5) cung cấp độ phân giải tín hiệu 10bit
(0 đến 1023) để đọc giá trị điện áp trong khoảng 0V đến 5V.

- Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp
I2C/TWI với các thiết bị khác.
Chân TXD và RXD
- Đây là các chân Serial dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu
TTL Serial. Arduino Uno có thể giao tiếp dữ liệu với các thiết bị cần sử dụng
thông qua 2 chân này, ngoài ra có thể sử dụng 2 chân này để nạp code cho mạch
mà không cần thông qua USB của mạch.
3.2. DS1307 Module

3.2.1. Sơ đồ nguyên lí

3.2.2. IC DS1307
Đặc điểm:
Hiệu điện thế cần cung cấp: 5V
Thạch anh: tần số 32kHz
IC thời gian thực/ lịch được mã hoá BCD đầy đủ với độ chính xác rất cao.
Sơ đồ chân:

       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
Thanh ghi
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 được đọc và ghi thông qua giao diện nối tiếp I2C.
Chú ý: giá trị thời gian lưu trong các thanh ghi theo dạng BCD
Một số thanh ghi quan trọng
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 SECONDS6: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ó 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 (màu green trong 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 orangetrong 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. (thiết kế này hơi dở, nếu dời hẳn 2 bit mode và A-P sang
2 bit 7 và 6 thì sẽ đơn giản hơn).
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).
3.2.3 Eeprom AT24C32
Là một chip nhớ không xoá được thường dùng trong các máy tính và các thiết bị di động
để lưu trữ một lượng dữ liệu thấp và cần thiết thay đổi nội dung được. EEPROM thuộc
loại "bộ nhớ không mất dữ liệu khi ngừng cung cấp điện" (non-volatile storage)
Ưu điểm của bộ nhớ EEPROM, ngoài dữ liệu được lưu trữ không thay đổi, thì còn
có thể đọc dữ liệu từ nó và cũng có thể xóa và ghi dữ liệu vào nó. Để xóa dữ liệu, cần có
điện áp tương đối cao và các EEPROM đời đầu cần có nguồn điện áp cao bên ngoài. Các
phiên bản sau của chip nhớ này đã có thêm nguồn cấp cho EEPROM và kết hợp nguồn
điện áp cao trong chip EEPROM. Bằng cách này, thiết bị bộ nhớ có thể chạy từ một
nguồn, do đó giảm đáng kể chi phí của một mạch tổng thể sử dụng EEPROM và đơn giản
hóa thiết kế.
Khi sử dụng EEPROM, các chu kỳ đọc và ghi được thực hiện chậm hơn nhiều so
với các chu kỳ với RAM. Do đó, cần sử dụng dữ liệu được lưu trữ trong bộ nhớ
EEPROM sao cho không cản trở hoạt động của hệ thống tổng thể. Thông thường, dữ liệu
được lưu trữ trong nó có thể được tải xuống khi khởi động. Cũng cần lưu ý rằng các hoạt
động ghi và xóa được thực hiện trên cơ sở từng byte.

3.3. DHT 11

Cảm biến độ ẩm nhiệt độ DHT11 ra chân được tích hợp sẵn điện trở 5,1k giúp người
dùng dễ dàng kết nối và sử dụng hơn so với cảm biến DHT11 chưa ra chân, module lấy
dữ liệu thông qua giao tiếp 1 wire (giao tiếp 1 dây)
Thông tin kỹ thuật:
Nguồn: 3 -> 5 VDC.
Dòng sử dụng: 2.5mA max (khi truyền dữ liệu).
Đo tốt ở độ ẩm 20 to 70%RH với sai số 5%.
Đo tốt ở nhiệt độ 0 to 50°C sai số ±2°C.
Tần số lấy mẫu tối đa 1Hz (1 giây 1 lần)
3.4. LCD 1602
LCD là gì?
LCD là một loại vật chất phản xạ ánh sáng khi điện thế thay đổi. Nó hoạt động dựa
trên nguyên tắc ánh sáng nền (Back Light). Nó bao gồm một lớp chất lỏng nằm giữa 2
lớp kính phân cực ánh sáng. Bình thường, khi không có điện áp, các tinh thể này được
xếp thẳng hàng giữa hai lớp cho phép ánh sáng truyền qua theo hình xoắn ốc. Hai bộ lọc
phân cực, 2 bộ lọc màu và 2 bộ cân chỉnh sẽ xác định cường độ ánh sáng đi qua và màu
nào được tạo ra trên một pixel.
Khi có điện áp cấp vào, lớp canh chỉnh sẽ tạo một vùng điện tích, canh chỉnh lại
các tinh thể lỏng đó. Nó không cho phép ánh sáng đi qua để hiện thị lên hình ảnh tại vị trí
điểm ảnh đó. Các điểm ảnh trong màn hình LCD là một transistor cực nhỏ ở một trong 2
chế độ: cho phép ánh sáng đi qua hoặc không.
Điểm ảnh bao gồm 3 yếu tố màu: đỏ, xanh lá, xanh dương. Các màn hình LCD
trước đây thường tiêu thụ điện năng nhiều, độ tương phản thấp cho đến khi các nhà khoa
học người Anh tìm ra “Biphenyl” – vật liệu chính của tinh thể lỏng, thì LCD mới thực sự
phổ biến. LCD xuất hiện đầu tiên trong các máy tính cầm tay, trò chơi điện tử cầm tay,
đồng hồ điện tử, …

LCD1602 overview
- Điện áp hoạt động là 5 V.
- Kích thước: 80 x 36 x 12.5 mm
- Chữ đen, nền xanh lá
- Khoảng cách giữa hai chân kết nối là 0.1 inch tiện dụng khi kết nối với
Breadboard.
- Tên các chân được ghi ở mặt sau của màn hình LCD hổ trợ việc kết nối, đi dây
điện.
- Có đèn led nền, có thể dùng biến trở hoặc PWM điều chình độ sáng để sử dụng ít
điện năng hơn.
- Có thể được điều khiển với 6 dây tín hiệu
Sơ đồ chân – Pin Out
- 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ách điều khiển LCD1602
Cấu tạo và cách hoạt động của LCD1602
Màn hình LCD1602 cấu tạo từ 3 phần:

- Chip driver: Điều khiển LCD, giao tiếp với vi điều khiển theo interface LCD
- LCD Panel: Hiển thị ra bên ngoài
- Back Light: Đèn nền LCD
DISPLAY DATA RAM (DD RAM): Bộ nhớ hiển thị dữ liệu

Điều khiển LCD1602 chính là thay đổi giá trị của DD RAM, mỗi ô trên DD RAM
tương ứng với một vị trí của màn hình.
Với LCD1602 chúng có 2 line:
- Line 1: từ 0x80 tới 0x8F
- Line 2: từ 0xC0 tới 0xCF
Ví dụ: Nếu bạn muốn hiển thị ở Line 1 ô đầu tiên, Chúng ta sẽ thay đổi giá trị của ô
nhớ địa chỉ 0x80. Giá trị được ghi sẽ so sánh với bảng mã trong CG ROM, từ đó hiển thị
ra đúng kí tự được lưu trên đó.
Lệnh để nhảy giữa các ô nhớ là Set cursor (con trỏ)
Character Generator ROM (CG ROM): Bộ nhớ kí tự chỉ đọc
Đây là bộ nhớ đươc ghi sẵn của LCD, trong đó chứa các kí tự mà lcd hỗ trợ. Có
hai mẫu Character mà LCD1602 hỗ trợ đó là 5×8 và 5×10
Character Generator RAM (CG RAM): Bộ nhớ kí tự có thể lập trình
Đây là bộ nhớ để người sử dụng có thể tự tạo ra các font chữ riêng trên LCD của
mình.

3.5. PCF 8574 mạch chuyển đổi I2C LCD


Thay vì sử dụng tối thiểu 6 chân của vi điều khiển để kết nối với LCD (RS, EN,
D7, D6, D5 và D4) thì với module chuyển đổi bạn chỉ cần sử dụng 2 chân (SCL, SDA)
để kết nối. Module chuyển đổi I2C hỗ trợ các loại LCD sử dụng driver HD44780(LCD
1602, LCD 2004, … ), kết nối với vi điều khiển thông qua giao tiếp I2C, tương thích với
hầu hết các vi điều khiển hiện nay.
Ưu điểm
- Tiết kiệm chân cho vi điều khiển
- Dễ dàng kết nối với LCD
- Thông số kĩ thuật
- Điện áp hoạt động: 2.5-6V DC
- Hỗ trợ màn hình: LCD1602,1604,2004 (driver HD44780)
- Giao tiếp: I2C
- Địa chỉ mặc định: 0X27 (có thể điều chỉnh bằng ngắn mạch chân A0/A1/A2)
- Tích hợp Jump chốt để cung cấp đèn cho LCD hoặc ngắt
- Tích hợp biến trở xoay điều chỉnh độ tương phản cho LCD

4. Nguyên lí hoạt động:


Ở đây Arduino được dùng để đọc thời gian từ ds1307 và hiển thị trên LCD 16x2.
DS1307 gửi ngày / giờ tới arduino. Một còi cũng được sử dụng dùng để báo thức, sẽ phát
ra tiếng bíp khi đến giờ được đặt.
Sơ đồ khối:

Để cài đặt báo thức, chúng ta nhấn nút đặt. Nó sẽ chuyển sang chế độ báo thức và
hỏi giờ với thời gian hiện tại được hiển thị. Phải nhấn nút tăng dần để thay đổi giờ.
Vì đồng hồ ở định dạng 24 giờ, số giờ sẽ được tăng từ 0 đến 23. Sau khi giờ báo
thức được đặt, chúng ta phải nhấn nút tiếp theo để chuyển đến tab phút.
Một lần nữa nút tăng được nhấn để thay đổi phút. Sau khi nhập thời gian báo thức,
nhấn nút cài đặt và báo thức được đặt.
Các giá trị được nhập làm cảnh báo được lưu trữ trong EEPROM của Arduino.
Các giá trị này liên tục được so sánh với thời điểm hiện tại.
Khi các giá trị được lưu trữ và giá trị hiện tại khớp với nhau, bộ rung cho cảnh báo
sẽ được kích hoạt. Để dừng báo thức, nút tiếp theo được nhấn.
Sơ đồ thuật toán:
5. Sơ đồ nguyên lí

You might also like