Từ những yêu cầu thực tế, những đòi hỏi ngày càng cao của cuộc sống, cộng với sự hợp tác, phát triển mạnh mẽ của mạng di động cũng như internet nên chúng em đã chọn đề tài "Giải pháp IoT
Trang 1ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ - TRUYỀN THÔNG
GIẢI PHÁP IoT DÙNG THU THẬP DỮ LIỆU,
ĐIỀU KHIỂN THIẾT BỊ TỪ XA THÔNG QUA GSM/GPRS
SVTH: PHẠM PHÁT ĐẠT MSSV: 15341003
SVTH: TRẦN NGỌC LÂM MSSV: 15341018
S K L 0 0 4 4 3 2
Trang 2KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN ĐIỆN TỬ-CÔNG NGHIỆP
GIẢI PHÁP IoT DÙNG THU THẬP
DỮ LIỆU, ĐIỀU KHIỂN THIẾT BỊ
TỪ XA THÔNG QUA GSM/GPRS
GVHD: Ts Nguyễn Văn Thái
Trang 3ĐỒ ÁN TỐT NGHIỆP
NGÀNH CÔNG NGHỆ KỸ THUẬT ĐIỆN TỬ TRUYỀN THÔNG
ĐỀ TÀI:
GIẢI PHÁP IoT DÙNG THU THẬP
DỮ LIỆU, ĐIỀU KHIỂN THIẾT BỊ
TỪ XA THÔNG QUA GSM/GPRS
GVHD: Ts Nguyễn Văn Thái SVTH: Phạm Phát Đạt MSSV: 15341003 SVTH: Trần Ngọc Lâm MSSV: 15341018
Trang 4Tp HCM, ngày 15 tháng 12 năm 2016
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP
Chuyên ngành: CNKT Điện - Điện tử Truyền Thông Mã ngành: 41
I TÊN ĐỀ TÀI: GIẢI PHÁP IoT DÙNG THU THẬP DỮ LIỆU, ĐIỀU KHIỂN
THIẾT BỊ TỪ XA THÔNG QUA GSM/GPRS
II NHIỆM VỤ
1 Các số liệu ban đầu:
Tiến hành tìm hiểu và thu thập các số liệu từ các trang mạng và sách về điều khiển thiết bị từ xa thông qua GSM/GPRS Tham khảo các giải pháp trước đó
để xây dựng nên hệ thống điều khiển thiết bị
Tìm hiểu các cảm biến, vi điều khiển, kết nối ngoại vi để lựa chọn ra thiết bị, linh kiện phù hợp cho việc thực hiện đề tài
2 Nội dung thực hiện:
Dùng module Arduino dùng ATMEGA2560 làm vi xử lý trung tâm, trên đó gồm các IO kết nối với module SIM900A dùng để truyền nhận dữ liệu Thông qua đó điều khiển các thiết bị bằng khối rơle được thiết kế riêng
Viết chương trình cho vi điều khiển
Thiết kế giao diện điều khiển và giám sát trên Web Application
Thiết kế,thi công và lập trình khối đo nhiệt độ, độ ẩm và khí gas
Kết nối các khối vào module
Trang 5Dựa trên các thông số thu thập được, tiến hành
lựa chọn giải pháp thiết kế và thi công đề tài
09/10/2016
19/10/2016
Lựa chọn linh kiện cần thiết cho việc thực hiện
đề tài như lựa chọn module vi điều khiển, cảm biến…
Trang 7Em xin gởi lời chân thành cảm ơn các thầy cô trong Khoa Điện-Điện Tử đã tạo những điều kiện tốt nhất cho chúng em hoàn thành đề tài
Trong quá trình thực hiện đồ án chúng em đã gặp không ít khó khăn Nhưng được sự giúp
đỡ, hướng dẫn nhiệt tình của quý thầy cô đã giúp chúng em khắc phục được những khó khăn đó và hoàn thành được đề tài đúng thời hạn
Chúng em cũng gửi lời đồng cảm ơn đến các bạn lớp 153410 đã chia sẻ trao đổi kiến thức cũng như những kinh nghiệm quý báu trong thời gian thực hiện đề tài
Vì là lần đầu tiên khai thác một lĩnh vực còn khá mới mẻ, nên mặc dù chúng em
đã bỏ ra rất nhiều tâm huyết, thời gian, và công sức, nhưng chắc chắn sẽ không tránh khỏi những thiếu sót, những hạn chế, chúng em hy vọng rằng sẽ nhận được nhiều ý kiến đóng góp chân thành của quý thầy cô, các cá nhân… để chúng em có thể hoàn thiện hơn cho đề tài
Xin chân thành cảm ơn!
Người thực hiện đề tài
Phạm Phát Đạt Trần Ngọc Lâm
Trang 8Trang
NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP ii
LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP iii
LỜI CAM ĐOAN iv
LỜI CẢM ƠN v
MỤC LỤC vi
LIỆT KÊ HÌNH VẼ ix
LIỆT KÊ BẢNG xii
TÓM TẮT xiii
Chương 1 TỔNG QUAN 1
1.1 ĐẶT VẤN ĐỀ 1
1.2 MỤC TIÊU 1
1.3 GIỚI HẠN 2
Chương 2 CƠ SỞ LÝ THUYẾT 3
2.1 KHỐI VI ĐIỀU KHIỂN TRUNG TÂM 3
2.1.1 Sơ đồ các linh kiện của Arduino Atmega2560 6
2.1.2 Vi điều khiển ATmega2560 7
a Tổng quan ATmega2560 7
b Sơ đồ chân ATmega2560 11
c Cách hoạt động 16
d Cấu trúc bộ nhớ 22
2.1.2 ATmega16U2 25
Trang 92.3.2 Nguyên lý hoạt động 38
2.4 RƠLE 41
2.5 MODULE CẢM BIẾN KHÍ GA MQ2 43
2.5.1 Giới thiệu 43
2.5.2 Sơ đồ chân cảm biến khí ga MQ2 44
2.6 Opto 817 45
Chương 3 TÍNH TOÁN VÀ THIẾT KẾ 47
3.1 GIỚI THIỆU TỔNG QUAN 47
3.2 TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG 47
3.2.1 Thiết kế sơ đồ khối hệ thống 47
3.2.2 Tính toán và thiết kế mạch 49
3.2.2.1 Khối giao tiếp SMS : 49
3.2.2.2 Khối vi điều khiển ATmega2560 50
3.2.2.3 Khối cảm biến 52
3.2.2.4 Khối công suất 55
3.2.2.9 Khối nguồn 56
3.2.3 Sơ đồ nguyên lý của toàn mạch 57
Chương 4 THI CÔNG HỆ THỐNG 60
4.1 THI CÔNG HỆ THỐNG 60
4.1.1 Thi công bo mạch 60
4.1.2 Kết nối các khối 62
4.2 LẮP RÁP VÀ ĐÓNG GÓI MẠCH 64
4.3 LẬP TRÌNH HỆ THỐNG 67
4.3.1 Lưu đồ giải thuật 67
4.3.2 Phần mềm lập trình cho vi điều khiển 70
4.3.2.1 Phần mềm lập trình cho Arduino IDE 70
4.3.3 Phần mềm lập trình cho WebSever 73
4.3.3.1 Phần mềm Notepad++ 73
4.4 TẠO WEBSEVER VÀ DATABASE 75
4.5 QUY TRÌNH THAO TÁC SỬ DỤNG 80
Chương 5 KẾT QUẢ NHẬN XÉT VÀ ĐÁNH GIÁ 82
Trang 105.2 NGUỒN 82
5.4 KẾT QUẢ THỰC HIỆN TRÊN WEB APPLICATION 83
5.4 KẾT QUẢ MÔ PHỎNG ỨNG DỤNG WEB APPLICATION 84
Chương 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 84
6.1 TÓM TẮT ĐỀ TÀI 84
6.2 KẾT LUẬN 84
6.3 HƯỚNG PHÁT TRIỂN 85
TÀI LIỆU THAM KHẢO 86
MỘT SỐ TRANG WEB THAM KHẢO KHÁC 87
PHỤ LỤC 88
Trang 11Hình 2.2 : Arduino Atmega2560 mặt sau 4
Hình 2.3 : Sơ đồ linh kiện trong Arduino Atmega2560 6
Hình 2.4 : Sơ đồ chi tiết các chân trong khối Arduino Atmega2560 6
Hình 2.4 : Vi điều khiển Atmega2560 7
Hình 2.5 : Sơ đồ khối của Atmega2560 9
Hình 2.6 : Sơ đồ chân ATmega2560 11
Bảng 2.2 : Chi tiết các chân ATmega2560 11
Hình 2.12 : Sơ đồ khối khối ADC 19
Hình 2.13 : Sơ đồ khối đơn giản bộ ADC 20
Hình 2.14 : Sơ đồ khối của USART 21
Hình 2.15 : Sơ đồ hệ thống xung clock cho Atmega2560 21
Hình 2.16 : Bộ nhớ chương trình 22
Hình 2.17 : Bản đồ bộ nhớ dữ liệu SRAM 23
Hình 2.18 : Thanh Ghi EEAR 23
Hình 2.19 : Thanh Ghi EEDR 24
Hình 2.20 : Thanh Ghi EECR 24
Hình 2.21 : Sơ đồ khối của Atmega16U2 26
Hình 2.22 : Module SIM900A 27
Hình 2.23 : Sơ đồ thiết kế củ a GSM/GPRS SIM900A Easy 28
Hình 2.24 : Chi tiết linh kiện trong Module SIM900A 29
Hình 2.25 : SIM900A 29
Hình 2.26 : Sơ đồ khối của SIM900A 32
Hình 2.27 : Sơ đồ chân cùa SIM900A 33
Hình 2.28 : Kết nối giữa Breakout SIM900A và Vi điều khiển 34
Hình 2.29 : Cảm biến DTH11 38
Hình 2.30: Gửi tín hiệu Start 39
Hình 2.31 : Đọc dữ liệu bit 0 40
Hình 2.32: Đọc dữ liệu bit 1 40
Hình 2.33 : Rơle 41
Hình 2.34 : Cấu tạo Rơle 42
Trang 12Hình 2.36 : Cấu tạo MQ2 44
Hình 2.37 : Sơ đồ chân Module khí ga MQ2 44
Hình 2.38 : Module MQ2 with NE555 45
Hình 2.39: Opto 817 45
Hình 3.1 : Sơ đồ tổng quan hệ thống 47
Hình 3.2 : Sơ đồ khối của bộ điều khiển 48
Hình 3.3 : Sơ đồ nguyên lý module SIM900A 50
Hình 3.4 : Transistor kích mở/tắt nguồn cho module SIM900A 50
Hình 3.5 : Sơ đồ nguyên lý Atmega2560 51
Hình 3.6 : Giao tiếp USB 52
Hình 3.7 : Khối tạo xung dao động 52
Hình 3.8 : Sơ đồ kết nối vi xử lý 53
Hình 3.9 : Sơ đồ kết nối vi xử lý thực tế 54
Hình 3.10 : Sơ đồ kết nối chân giữa Arduino và MQ2 54
Hình 3.11 : Khối công suất 55
Hình 3.12 : Sơ đồ nguyên lý nguồn 5V và 12V 57
Hình 3.13 : Sơ đồ nguyên lý toàn mạch 58
Hình 4.1 : Sơ đồ mạch in nguồn 61
Hình 4.2 : Sơ đồ mạch in khối Rơle 61
Hình 4.3 : Kết nối Arduino Atmega2560 và module SIM900A 63
Hình 4.4 : Kết nối Arduino Atmega2560 và cảm biến, buzzer 64
Hình 4.5 : Hình thực tế mạch nguồn 65
Hình 4.6 : Hình thực tế khối công suất 65
Hình 4.7 : Đóng gói mô hình toàn mạch 66
Hình 4.8 : Cảm biến khí ga và buzzer trong mô hình 66
Hình 4.9 : Các thiết bị giả lập trong mô hình 67
Hình 4.10 : Lưu đồ giải thuật chương trình chính 68
Hình 4.12 : Lưu đồ chương trình điều khiển thiết bị 69
Trang 13Hình 4.24 : Login vào tài khoản 77
Hình 4.25 : Giao diện đăng nhập 78
Hình 4.26 : Tạo database 78
Hình 4.27 : Tạo các table để lưu các giá trị của Arduino 79
Hình 4.28 : Khai báo tên và số cột 79
Hình 4.29 : Tạo các file php để connect tới mysql và Arduino 80
Hình 4.30 : Cách upload file lên Websever 80
Hình 4.31 : Giao diện sau khi upload file 81
Hình 4.32 : Giao diện Web Application 82
Hình 5.1 : Giao diện ban đầu 83
Hình 5.2 : Giao diện sau khi các giá trị được gửi lên Web Application 83
Trang 14Bảng Trang
Bảng 2.1 : Cổng Serial giao tiếp với phần cứng 4
Bảng 2.2 : Chi tiết các chân ATmega2560 11
Bảng 2.3 : APN một số nhà mạng 35
Bảng 3.1 : Sơ đồ kết nối chân giữa Arduino và MQ2 54
Bảng 4.1 : Danh sách các linh kiện 61
Trang 15thu thập được từ các cảm biến đo được như nhiệt độ, độ ẩm, khí gas thông qua GSM/GPRS hay Web Application Điều này sẽ giúp cho con người có khả năng theo dõi, giám sát và điều khiển các thiết bị ở bất kỳ nơi đâu một cách nhanh chóng, tiện lợi, góp phần tiết kiệm điện năng, phù hợp với sự phát triển tiên tiến của xã hội
Đề tài lấy cơ sở là mạng GSM/GPRS để điều khiển thiết bị từ xa Việc sử dụng Web Application để điều khiển và giám sát thiết bị có thuận lợi là nhanh chóng, tiết kiệm chi phí, mang tính cạnh tranh và cơ động Ngoài ra, sản phẩm của đề tài này có tính mở,
có thể áp dụng cho nhiều đối tượng khác nhau trong dân dụng cũng như trong công
nghiệp
Trang 16Chương 1 TỔNG QUAN
1.1 ĐẶT VẤN ĐỀ
Ngày nay cùng với sự tiến bộ của khoa học kỹ thuật, các thiết bị điện tử ra đời ngày càng nhiều về chủng loại cũng như tính năng sử dụng Bên cạnh đó nhu cầu sử dụng các thiết bị một cách tự động ngày càng cao, con người ngày càng muốn các thiết
bị hỗ trợ nhiều hơn cho công việc của mình Có thể ở Việt Nam chưa phát triển mạnh
mẽ trong lĩnh vực này nhưng hiện nay ở trên thế giới, nhất là các nước có ngành công nghệ phát triển vượt bậc thì các thiết bị được điều khiển, giám sát thiết bị từ xa đã phát triển rất mạnh mẽ
Từ những yêu cầu thực tế, những đòi hỏi ngày càng cao của cuộc sống, cộng với sự hợp tác, phát triển mạnh mẽ của mạng di động cũng như internet nên chúng em
đã chọn đề tài "Giải pháp IoT dùng thu thập dữ liệu, điều khiển thiết bị từ xa thông qua GSM/GPRS" để đáp ứng được nhu cầu ngày càng cao của con người và góp phần vào
sự tiến bộ, văn minh, hiện đại của xã hội
1.2 MỤC TIÊU
Đề tài dùng module GSM/GPRS SIM900A để thu nhận dữ liệu từ xa và gửi dữ liệu về module Arduino dùng chip ATMega2560 làm vi xử lý trung tâm, các cảm biến như cảm biến nhiệt độ, độ ẩm, khí gas được kết nối với module này để sau đó dữ liệu
sẽ được truyền về server Trên server sẽ cài đặt một phần mềm để làm nhiệm vụ thu nhận, sau đó xử lý và lưu vào database các thông tin đo được và hiển thị bởi một Website Application
NỘI DUNG NGHIÊN CỨU
Trang 17 Viết sách luận văn
Báo cáo đề tài tốt nghiệp
1.3 GIỚI HẠN
Trong thời gian thực hiện đề tài là có hạn, với lượng kiến thức được truyền đạt trong suốt khóa học và khả năng có hạn, nhóm thực hiện đề tài chỉ giải quyết những vấn đề sau:
- Thiết lập một Web Application để điều khiển thiết bị và hiển thị trạng thái thiết bị cũng như nhiệt độ, độ ẩm, khí gas lên Web Application
- Ngoài ra, hệ thống còn có chức năng tự động phát tín hiệu cảnh báo qua chuông và hiển thị cảnh báo lên Web Sever
Trang 18Chương 2 CƠ SỞ LÝ THUYẾT
Trong phạm vi đề tài có sử dụng 3 khối module kết hợp là Arduino Mega 2560, khối module SIM90A và khối rơle dùng để điều khiển thiết bị
Arduino Mega 2560 đã và đang được sử dụng rất rộng rãi trên thế giới, và ngày càng chứng tỏ được sức mạnh của chúng thông qua vô số ứng dụng độc đáo của người dùng trong cộng đồng nguồn mở (open-source) Trong khi đó Module Sim900A là Module được thiết kế tối ưu với giá thành thấp và phục vụ chủ yếu cho việc giám sát, điều khiển các thiết bị từ xa thông qua GMS/GPRS Sau đây chúng ta sẽ tìm hiểu từng khối module cũng như hoạt động của chúng để phục vụ cho việc thực hiện đề tài
2.1 KHỐI VI ĐIỀU KHIỂN TRUNG TÂM
Khối điều khiển trung tâm là khối Arduino Mega 2560 với chip vi điều khiển là ATMega2560 Khối gồm 54 chân In/Out digital (trong đó có 14 ngõ ra PWM), 16 ngõ vào analog, 4 cổng giao tiếp UART, 1 kết nối USB, cổng nguồn, đầu ICSP, nút reset
và hoạt động ở tốc độ 16 Mhz
Trang 19Hình 2.2 : Arduino Atmega2560 mặt sau
Khối Arduino Mega 2560 sử dụng chip ATmega16U2 để giao tiếp với máy tính, giúp tăng tốc độ nạp chương trình, tốc độ truyền nhận dữ liệu và tương thích với tất cả mã nguồn của Arduino Mega 2560 Arduino Mega 2560 là một vi điều khiển hoạt động dựa trên chip ATmega2560 Bao gồm:
54 chân digital (trong đó có 15 chân có thể được sử dụng như những chân PWM là từ chân số 2 → 13 và chân 44, 45, 46)
6 ngắt ngoài: chân 2 (interrupt 0), chân 3 (interrupt 1), chân 18 (interrupt 5), chân 19 (interrupt 4), chân 20 (interrupt 3), and chân 21 (interrupt 2)
16 chân vào analog (từ A0 đến A15)
4 cổng Serial giao tiếp với phần cứng:
Bảng 2.1 : Cổng Serial giao tiếp với phần cứng
CỔNG SERIAL CHÂN RX CHÂN TX
Trang 20CỔNG SERIAL CHÂN RX CHÂN TX
Trang 21Hình 2.3 : Sơ đồ linh kiện trong Arduino Mega 2560
Hình 2.4 : Sơ đồ chi tiết các chân trong khối Arduino Mega 2560
Trang 222.1.2 Vi điều khiển ATMega2560
Hình 2.4 : Vi điều khiển Atmega2560
Atmega2560 là vi điều khiển 8 bit dựa trên kiến trúc RISC có bộ nhớ 256KB ISP flash, 8KB SRAM, 4KB EEPROM Vi điều khiển Atmega2560 AVR có công suất cao, tiêu thụ năng lượng thấp, cấu trúc RISC tiến với 130 lệnh với chu kỳ thực hiện đơn xung lớn nhất, 32 thanh ghi đa mục đích 8 bít, 16 MIPS tại tần số đặt 16 MHz, bộ nhân 2 chu kỳ On-chip, Power-on Reset và Brown-out Detection có thể lập trình, bộ dao động RC bên trong có thể lập trình các mức, 5 Mode ngủ (Idle, ADC Noise
Trang 23- 160 thanh ghi vào ra mở rộng
- 32 thanh ghi đa mục đích
- 6 kênh PWM có thể lập trình thay đổi độ phân giải từ 2 tới 16 bit
- Bộ so sánh tương tự có thể lựa chọn ngõ vào
- Hai khối USART lập trình được
- Khối truyền nhận nối tiếp SPI
- Khối giao tiếp nối tiếp hai dây TWI
Trang 24Dưới đây là sơ đồ khối của Atmega2560 :
Hình 2.5 : Sơ đồ khối của Atmega2560
Tất cả 32 thanh ghi đều trực tiếp kết nối tới bộ xử lý logic số học - Arithmetic Logic Unit (ALU), cho phép truy nhập 2 thanh ghi độc lập trong một câu lệnh đơn được thực hiện trong một chu kỳ xung Kết quả của cấu trúc trở nên gọn nhẹ, hiệu quả hơn, trong khi vẫn đạt được thời gian xử lý nhanh hơn gấp 10 lần các vi điều khiển CISC thông thường khác, 256Kbyte Flash trên chíp có thể lập trình với các khả năng đọc trong khi ghi (Read-While-Write), 4K byte EEPROM, 8K byte SRAM, 86 đường vào ra đa mục đích, 32 thanh ghi đa mục đích, 6 Timer/Counter rất linh hoạt với các compare mode, các ngắt trong và ngắt ngoài, một bộ USART nối tiếp có thể lập trình được, ghép nối nối tiếp 2 dây định hướng byte, 16 kênh ADC có độ chính xác 10-
Trang 25tiếp theo hoặc Reset phần cứng xuất hiện
Trong Power-save mode, timer không đồng bộ tiếp tục chạy, cho phép sử dụng
để duy trì thời gian nền, trong khi các phần còn lại của thiết bị được ngủ
ADC Noise Reduction mode dừng CPU và tất các module I/O ngoại trừ timer không đồng bộ và ADC để tối thiểu hóa nhiễu mạch trong suốt quá trình ADC trong chuyển đổi
Trong Standby mode, bộ dao động thạch anh/ resonator được phép chạy trong khi các phần còn lại của thiết bị được ngủ Điều này cho phép start-up rất nhanh cùng với hiệu quả tiêu thụ ít năng lượng
Thiết bị được sản suất áp dụng công nghệ tích hợp bộ nhớ non-volatile cao của Atmel Bộ nhớ chương trình Flash này có thể lập trình thông qua ghép nối tiếp SPI bằng chương trình lập trình bộ nhớ non-volatile riêng, hoặc bằng một chương trình boot on – chip, chạy trong AVR core Chương trình boot có thể sử dụng bất kỳ một ghép nối nào để download chương trình ứng dụng trong bộ nhớ Flash Phần mềm trong Boot Flash sẽ tiếp tục chạy trong khi các phần sử dụng Flash vẫn được update,
hỗ trợ cho hoạt động đọc trong khi ghi (Read-While-Write)
Bằng việc kết hợp với một CPU 8-bit RISC với bộ nhớ Flash tự lập trình trong hệ thống trên một chíp, Atmel ATmega2560 là một vi điều khiển cực mạnh, thỏa mãn yêu cầu về một bộ vi điều khiển với độ linh hoạt cao và đem lại lợi nhuận lớn với rất nhiều các ứng dụng điều khiển tác động nhanh
ATMega2560 AVR cũng hỗ trợ đầy đủ về lập trình và phát triển các tool hệ thống, bao gồm bộ dịch C, macro assemblers, bộ mô phỏng/gỡ rối chương trình, In-Circuit Emulators, và evaluation kits
Trang 26b Sơ đồ chân ATMega2560
Hình 2.6 : Sơ đồ chân ATMega2560
Bảng 2.2 : Chi tiết các chân ATMega2560
Trang 2711 GND GND
26 PB7 ( OC0A/OC1C/PCINT7 ) Digital pin 13 (PWM)
Trang 2831 VCC VCC
Trang 2955 PC2 ( A10 ) Digital pin 35
Trang 3075 PA3 ( AD3 ) Digital pin 25
Trang 31cả các chân của các Port đều có điện trở kéo lên (pull-up) riêng, ta có thể cho phép hay không cho phép điện trở kéo lên này hoạt động
Điện trở kéo lên là một điện trở được dùng khi thiết kế các mạch điện tử logic
Nó có một đầu được nối với nguồn điện áp dương (VCC – VDD) và đầu còn lại được nối với tín hiệu lối vào/ra của một mạch logic chức năng
c Cách hoạt động
Khi khảo sát các cổng như là các cổng vào ra số thông thường thì tính chất của các cổng (PortA, PortB, …) là tương tự nhau, nên ta chỉ cần khảo sát một cổng nào đó trong số 7 cổng của vi điều khiển là đủ Mỗi một cổng vào ra của vi điều khiển được liên kết với ba thanh ghi: PORTx, DDRx, PINx ( x thay thế cho A,B….) Ba thanh ghi này sẽ được phối hợp với nhau để điều khiển hoạt động của cổng, chẳng hạn thiết lập cổng thành lối vào có sử dụng điện trở kéo lên…
Sau đây là nguyên lý chi tiết vai trò của ba thanh ghi trên:
Trang 32- Thanh ghi DDRx
Đây là thanh ghi 8 bit (có thể đọc ghi) có khả năng điều khiển hướng của cổng (là lối vào hay lối ra) Khi một bit của thanh ghi này được set lên 1 thì chân tương ứng với nó được cấu hình thành ngõ ra Ngược lại, nếu bit của thanh ghi DDRx là 0 thì chân tương ứng với nó được thiết lập thành ngõ vào
Hình 2.7 : Thanh ghi DDRx
- Thanh ghi PORTx
PORTx là thanh ghi 8 bit có thể đọc ghi Đây là thanh ghi dữ liệu của PORTx Nếu thanh ghi DDRx thiết lập cổng là lối ra, khi đó giá trị của thanh ghi PORTx cũng
là giá trị của các chân tương ứng của PORTx, nói cách khác, khi ta ghi một giá trị logic lên 1 bit của thanh ghi này thì chân tương ứng với bit đó cũng có cùng mức logic Khi thanh ghi DDRx thiết lập cổng thành lối vào thì thanh ghi PORTx đóng vai trò như một thanh ghi điều khiển cổng Cụ thể, nếu một bit của thanh ghi này được ghi thành 1 thì điện trở treo ở chân tương ứng với nó sẽ được kích hoạt, ngược lại nếu bit được ghi thành 0 thì điện trở treo ở chân tương ứng sẽ không được kích hoạt, cổng ở trạng thái cao trở (HI-Z)
Hình 2.8 : Thanh ghi PORTx
Trang 33Hình 2.9 : Thanh ghi PINx
Ngoài ra ATMega2560 còn có 4 bộ định thời, bộ định thời 1 và 3 là bộ định thời
16 bit, bộ định thời 0 và 2 là bộ định thời 8 bit ATMega2560 có 8 ngắt ngoài từ INT0 đến INT7 (ở đây chưa kể tới ngắt Reset) Tám ngắt này tương ứng với 8 chân của MCU la INT0, INT1……INT7 Để ý là ngay cả khi các chân INT0, INT1,…INT7 của MCU được cấu hình như là chân lối ra, thì các ngắt ngoài vẫn có tác dụng nếu được cho phép Các ngắt ngoài có thể bắt mẫu theo kiểu cạnh lên (Rising), cạnh xuống (Falling) hay mức thấp (Low level) Vi điều khiển ATMega2560 còn có nhiều bộ phận ngoại vi khác, các bộ ngoại vi này rất tiện lợi trong các ứng dụng điều khiển (bộ PWM) xử lí số liệu (bộ ADC, bộ so sánh Analog), giao tiếp (bộ USART, SPI, I2C)… Việc tích hợp các bộ ngoại vi này vào trong chip giúp cho các thiết kế trở nên thuận tiên hơn, kích thước bo mạch cũng gọn gàng hơn
- Bộ so sánh tương tự
Sơ đồ đơn giản của bộ so sánh tương tự (Analog Comparator)
Hình 2.11 : Sơ đồ khối của bộ so sánh tương tự
Nguyên tắc hoạt động của bộ so sánh tương tự là: Khi ngõ vào AIN0 có điện thế cao hơn ngõ vào AIN1 thì ngõ ra ACO sẽ ở mức cao (tương ứng với mức logic 1), ngược lại khi ngõ vào AIN0 có điện thế thấp hơn ngõ vào AIN1 thì ngõ ra ACO sẽ ở
Trang 34mức thấp (tương ứng với mức logic 0) Thường thì trong hai ngõ vào, có một ngõ vào
có điện thế được giữ cố định dùng đề làm điện thế tham chiếu (Vref), điện thế ngõ còn lại có thể thay đổi đề có thể tham chiếu với ngõ vào Vref Trạng thái của ngõ ra ACO của bộ so sánh có thể được dùng để tạo ra một ngắt, kết nối với bộ định thời 1 để sử dụng chức năng input capture của bộ định thời này
- Bộ biến đổi ADC
Bộ biến đổi ADC có chức năng biến đổi tín hiệu tương tự (analog signal) có giá trị thay đổi trong một dải biết trước thành tín hiệu số (digital signal) Bộ ADC của Atmega2560 có độ phân giải 10 bit, sai số tuyệt đối là 2LSB, dải tín hiệu ngõ vào từ 0V-Vcc, tín hiệu ngõ vào có nhiều lựa Bộ ADC của Atmega2560 là loại ADC xấp xỉ liên tiếp với hai chế độ có thể lựa chọn là chuyển đổi liên tục (Free Running) và chuyển đổi từng bước (Single Conversion)
Chuyển đổi liên tục: là chế độ mà sau khi khởi động thì bộ ADC thực hiện chuyển đổi liên tục không ngừng
Chuyển đổi từng bước: là bộ ADC sau khi hoàn thành một chuyển đổi thì sẽ ngừng, một chuyển đổi tiếp theo chỉ được bắt đầu khi phần mềm có yêu cầu chuyển đổi tiếp
Trang 35Hình 2.12 : Sơ đồ khối khối ADC
Sơ đồ khối đơn giản của một bộ ADC được thể hiện như sau:
Hình 2.13 : Sơ đồ khối đơn giản bộ ADC
Nguyên tắc hoạt động của khối ADC: Tín hiệu tương tự đưa vào các ngõ ADC0:
7 được lấy mẫu và biến đổi thành tín hiệu số tương ứng Tín hiệu số được lưu hành
Trang 36trong hai thanh ghi ACDH và ADCL Một ngắt có thể được tạo ra khi hoàn thành một chu trình biến đổi ADC Bộ ADC của Atmega2560 phức tạp hơn nhiều, tuy nhiên cơ
sở vẫn dựa vào nguyên tắc trên
- Bộ truyền dữ liệu nối tiếp USART
ATMega2560 có bốn bộ USART là USART0, USART1, USART2 và USART3 Bốn bộ USART này là độc lập nhau, điều này có nghĩa là bốn khối USART có thể
hoạt động cùng một lúc Bên dưới là sơ đồ khối đơn giản của khối USART
Hình 2.14 : Sơ đồ khối của USART
- Hệ thống xung CLOCK và lập trình bộ nhớ ON – CHIP
Hệ thống xung clock Atmega2560 được chia thành nhiều khối khác nhau, mỗi khối sẽ cung cấp xung clock cho các khối ngoại vi ứng dụng tương ứng
Trang 37Hình 2.15 : Sơ đồ hệ thống xung clock cho Atmega2560
d Cấu trúc bộ nhớ
AVR có 2 không gian bộ nhớ chính là bộ nhớ dữ liệu vào bộ nhớ chương trình
Ngoài ra Atmega2560 còn có bộ nhớ EEPROM để lưu trữ dữ liệu
Trang 38- Bộ nhớ dữ liệu SRAM
8608/8704 ô nhớ của bộ nhớ dữ liệu định địa chỉ cho file thanh ghi, bộ nhớ I/O
và bộ nhớ dữ liệu SRAM nội Trong đó 416 địa chỉ đầu tiên định địa chỉ cho file thanh ghi và bộ nhớ I/O, và 8192 ô nhớ tiếp theo định địa chỉ cho bộ nhớ SRAM nội
Trang 39Hình 2.18 : Thanh Ghi EEAR
- Thanh Ghi EEDR
Đây là thanh ghi dữ liệu của EEPROM, là nơi chứa dữ liệu ta định ghi vào hay lấy ra từ EEPROM
Hình 2.19 : Thanh Ghi EEDR
- Thanh Ghi EECR
Đây là thanh ghi điều khiển EEPROM, ta chỉ sử dụng 4 bit đầu của thanh ghi này, 4 bit cuối là dự trữ, ta nên ghi 0 vào các bit dự trữ Sau đây ta xét chức năng của từng bit
Hình 2.20 : Thanh Ghi EECR
• Bit 0 – EERE: EEPROM Read Enable
• Bit 1 – EEWE: EEPROM Write Enable
• Bit 2 – EEMWE: EEPROM Master Write Enable
• Bit 3 – EERIE: EEPROM Ready Interrupt Enable
Tóm lại để ghi vào EEPROM ta cần thực hiện các bước sau:
Trang 402 Cấm tất cả các ngắt
3 Ghi địa chỉ vào thanh ghi EEAR
4 Ghi dữ liệu mà ta cần ghi vào EEPROM vào thanh ghi EEDR
5 Set bit EEMWE thành 1
6 Set bit EEWE thành 1
7 Cho phép các ngắt trở lại
Đọc dữ liệu từ EEPROM: Việc đọc dữ liệu từ EEPROM đơn giản hơn ghi dữ liệu vào EEPROM, để đọc dữ liệu từ EEPROM ta thực hiện các bước sau:
1 Chờ cho bit EEWE về 0
2 Ghi địa chỉ vào thanh ghi EEAR
3 Set bit EERE lên 1
- 22 thanh ghi I/O
- 32 thanh ghi đa mục đích
- 2 bộ định thời 8 bit (0,2)