GIỚI THIỆU TỔNG QUAN
Khối điều khiển
Vi điều khiển AVR do hãng Atmel (Hoa Kỳ) sản xuất được giới thiệu lần đầu tiên năm 1996 AVR có rất nhiều gòng khác nhau bao gồm dòng Tiny (như At tiny 13, At tiny 22 ) có kích thước bộ nhớ nhỏ, ít bộ phận ngoại vi, rồi đến dòng AVR (chẳng hạn AT90S8535, AT90S8515…) có kích thước bộ nhớ vào loại trung bình và mạnh hơn là dòng Mega (như ATmega 16, Atmega 32, Atmega 128…) với bộ nhớ có kích thước vài kbyte đến vài trăm Kb cùng với bộ nhớ ngoại vi đa dạng được tích hợp cả bộ LCD trên chip (dòng LCD AVR) Tốc độ của dòng Mega cũng cao hơn so với các dòng khác Sự khác nhau cơ bản giữa các dòng chính là cấu trúc ngoại vi, còn nhân thì vẫn như nhau. ATmega16 là một loại vi điều khiển có nhiều tính năng đặc biệt thích hợp cho việc giải quyết những bài toán điều khiển trên nền vi xử lý.
- Các loại vi điều khiển AVR rất phổ biến trên thị trường Việt Nam nên không khó trong việc thay thế và sửa chữa hệ thống lúc cần.
- Giá thành của dòng vi điều khiển này khá phải chăng
- Các phần mềm lập trình và mã nguồn mở có thể tìm kiếm khá dễ dàng trên mạng Các thiết kế demo nhiều nên có nhiều gợi ý tốt cho người thiết kế hệ thống. ATmega16 là vi điều khiển 8-bit dựa trên kiến trúc RISC Với khả năng thực hiện mỗi lệnh trong vòng một chu kỳ xung clock, ATmega16 có thể đạt tốc độ 1MIPS trên mỗi Mhz (1 triệu lệnh/s/Mhz), các lệnh được xử lý nhanh hơn, tiêu thụ năng lượng thấp.
1.1.2 Thông số kĩ thuật và sơ đồ chân ATmega16 a) Thông số kỹ thuật
Tần số thường hoạt động (MHz): 16 MHz
Max I / O Pins: 32 b) Sơ đồ chân
- Chân 1-8: Cổng nhập xuất dữ liệu song song B (Port B) nó có thể được sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
- Chân 9: RESET để đưa chip về trạng thái ban đầu
- Chân 10: VCC cấp nguồn cho VĐK
- Chân 11,31: GND 2 chân này được nối với nhau và nối đất
- Chân 12,13: 2 chân XTAL2 và XTAL1 dùng để đưa xung nhịp từ bên ngoài vào chip.
- Chân 14-21: Cổng nhập xuất dữ liệu song song D (PORTD) nó có thể được sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
- Chân 22-29: Cổng nhập xuất dữ liệu song song C (PORTC) nó có thể được sử dụng các chức năng đặc biệt thay vì nhập xuất dữ liệu
- Chân 30: AVCC cấp điện áp so sánh cho ADC
- Chân 32: AREF điện áp so sánh tín hiệu vào ADC
- Chân 33-40: Cổng vào ra dữ liệu song song A (PORTA) ngoài ra nó còn được tích hợp bộ chuyển đổi tín hiệu tương tự sang tín hiệu số ADC (analog to digial converter)
Hình 1.1 Sơ đồ chân Atmega16 c) Vào ra của vi điều khiển Atmega16
- PORTA (PA7 - PAO): là các chân số 33 đến 40 Là cổng vào ra song song 8 bit khi không dùng ở chế độ ADC Bên trong có sẵn các điện trở kéo, khi PORTA là output thì các điện trở kéo không hoạt động, khi PORTA là input thì các điện trở kéo được kích hoạt
- PORTB (PB7 - PBO): là các chân số 1 đến 8 Nó tương tự như PORTA khi sử dụng vào ra song song Ngoài ra các chân của PORTB còn có các chức năng đặc biệt khác.
- PORTC (PC7 - PCO): là các chân 22 đến 30 Cũng giống PORTA và PORTB khi là cổng vào ra song song Nếu giao tiếp JTAG được bật, các trở treo ở các chân PC5(TDI), PČ3(TMS), PČ2(TČK) sẽ hoạt động khi sự kiện reset sảy ra Chức năng giao tiếp JTAG và 1 số chức năng đặc biệt khác.
- PORTD (PD7 - PDO): là các chân 13 đến 21 Cũng là 1 cổng vào ra song song giống các PORT khác, ngoài ra nó còn có 1 số tính năng đặc biệt khác.
Mạch Kit cho VĐK họ AVR
1.2.1 Giới thiệu mạch kit AVR
AVR là một dòng VĐK 8-bit khá mạnh và thông dụng tại thị trường Việt Nam Với tốc độ xung nhịp tới 16Mhz, bộ nhớ chương trình tối đa tới 256 kB, và rất nhiều chức năng ngoại vi tích hợp sẵn, VĐK họ AVR có thể đáp ứng tốt cho nhiều ứng dụng trong thực tế, từ đơn giản đến phức tạp.
Với bộ Kit này có thể thử nghiệm các ứng dụng cơ bản như:
• Điều khiển cổng ra số, với LED đơn và LED 7 thanh
• Đọc trạng thái logic đầu vào số, từ bàn phím và giác cắm mở rộng
• Đo điện áp tương tự, với biến trở vi chỉnh và bộ ADC 10-bit
• Điều khiển màn hình tinh thể lỏng, với màn hình LCD dạng text
• Giao tiếp với máy tính qua chuẩn UART – USB
• Thử nghiệm các ngắt ngoài, thử khả năng điều khiển chế độ rộng xung
• Nhiều ứng dụng điều khiển các chức năng tích hợp sẵn trong VĐK như: vận hành các bộ định thời (Timer) và bộ đếm (Counter), đọc ghi EEPROM, lập trình các ngắt chương trình, thiết lập Watchdog, v.v.
Hình 1.2 Mạch Kit phát triển và các phụ kiện
Hình ảnh cấu trúc một mạch kit họ AVR
Bảng 1.1 Sơ đồ chân ATM16
STT Tên linh kiện Chức năng
1 Giắc cắm nguồn Nhận nguồn điện 9-12 VDC cấp cho mạch Kit
2 IC ổn áp 7805 Hạ 9-12 VDC xuống 5 VDC và giữ ổn định mức điện áp này.
3 LED báo nguồn Báo nguồn
4 VĐK họ AVR Điều khiển hoạt động của toàn mạch theo mã nguồn do người dùng lập trình và nạp xuống
5 Thạch anh Quyết định tần số xung nhịp cấp cho VĐK
6 Nút ấn Reset Khởi động lại VĐK
7 Giắc ISP Kết nối mạch nạp để nạp mã nguồn cho VĐK
8 Nhóm 4 phím ấn Nhận lệnh điều khiển từ người sử dụng
9 Giắc cắm 8 chân Nối tới 8 chân vào\ra đa năng (ứng với Port-A) của
10 Giắc cắm 8 chân Nối tới 8 chân vào\ra đa năng (ứng với Port-B) của
11 Giắc cắm 8 chân Nối tới 8 chân vào\ra đa năng (ứng với Port-C) của
Hình 1.2 : Cấu trúc mạch kít Hình 1.3 Cấu trúc mạch kit
12 Giắc cắm 8 chân Nối tới 8 chân vào\ra đa năng (ứng với Port-D) của
13 Dãy LED đơn Báo trạng thái logic của 8 chân ở Port-D (sáng-0,tắt-1)
14 Jumper dãy LED đơn Cho phép hoặc vô hiệu hóa Led đơn
15 LED 7 thanh Hiển thị số 0-9 và một vài kí tự do người dùng định nghĩa
Cho phép hoặc vô hiệu hóa LED 7 thanh
17 Jack cắm LCD Kết nối màn hình LCD dạng text (1602)
18 Biến trở vi chỉnh Điều chỉnh trơn và liên tục từ 0 -5 VDC, mức điện áp đầu vào ADC0 của bộ ADC(chân PA0)
19 Giắc UART-USB Kết nối mô-đun chuyển đổi UART-USB
Các thông số kỹ thuật của mạch Kit:
- Khi không có mô-đun mở rộng, toàn bộ LED chỉ thị I/O tắt: 18mA
- Khi có LCD và mô-đun USB, các LED chỉ thị I/O bị vô hiệu hóa : 22mA
- Khi có LCD và mô-đun USB, toàn bộ LED chỉ thị I/O sáng: 80mA
• Mạch có khả năng tự bảo vệ khi bị lắp ngược cực tính nguồn
• Mức logic các cổng I/O: TTL(5V)
• Loại VĐK được hỗ trợ: ATmega16, ATmega32, và tương đương
• Cổng I/O mở rộng: 4 giắc cắm (loại 8 chân) ứng với 4 Port (8bit mỗi Port)
• Hỗ trợ mô-đun USB: UART-USB hay COM-USB (mức 5VDC)
• Xung nhịp tích hợp sẵn: thạch anh 8Mhz
Ngôn ngữ lập trình và các công cụ phần mềm: Để làm việc với VĐK AVR, có thể sử dụng ngôn ngữ C hoặc Assembly, viết trên một số môi trường phát triển khác nhau Đề tài này được xây dựng bằng ngôn ngữ C, trên môi trường soạn thảo và biên dịch là sự kết hợp của AVR Studio 4 (phiên bản 4.19
6 build 730, dung lượng 124MB) với WinAVR (phiên bản 20100110, dung lượng 27.5 MB) Phần mềm nạp mã máy là PROGISP (phiên bản 1.72, dung lượng khoảng 3- 4MB) Phần mềm nhận dữ liệu từ cổng USB hay COM ảo là Terminal Phần mềm mô phỏng mạch là Proteus 8 Professional.
1.2.4 Sơ đồ nguyên lý mạch kit
Hình 1.4 Sơ đồ nguyên lý mạch kit
Cảm biến nhiệt độ DHT11 và LCD16x2
1.3.1 Cảm biến nhiệt độ độ ẩm DHT11
DHT11 là một cảm biến kỹ thuật số giá rẻ để cảm nhận nhiệt độ và độ ẩm Cảm biến này có thể dễ dàng giao tiếp với bất kỳ bộ vi điều khiển vi nào như Arduino,
Hình 1.5 Sơ đồ chân của cảm biến DHT11
Thông số kỹ thuật DHT11
- Điện áp hoạt động: 3V - 5V DC
- Dòng điện tiêu thụ: 2.5mA
- Phạm vi cảm biến độ ẩm: 20% - 90% RH, sai số ±5%RH
- Phạm vi cảm biến nhiệt độ: 0°C ~ 50°C, sai số ±2°C
- Tần số lấy mẫu tối đa: 1Hz (1 giây 1 lần)
Màn hình text LCD16x2 sử dụng driver HD44780, có khả năng hiển thị 2 dòng với mỗi dòng 16 ký tự, màn hình có độ bền cao, rất phổ biến, nhiều code mẫu và dễ sử dụng thích hợp cho những người mới học và làm dự án.
• Điện áp hoạt động là 5 V.
• 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
• Có bộ ký tự được xây dựng hổ trợ tiếng Anh và tiếng Nhật, xem thêm HD44780 datasheet để biết thêm chi tiết
Chân Ký hiệu Mô tả Giá trị
4 RS Lựa chọn thanh ghi
RS=0 (mức thấp) chọn thanh ghi lệnh
RS=1 (mức cao) chọn thanh ghi dữ liệu
5 R/W Chọn thanh ghi đọc/viết dữ liệu
R/W=0 thanh ghi viết R/W=1 thanh ghi đọc
Chân truyền dữ liệu 8 bit: DB0DB7
15 A Cực dương led nền 0V đến 5V
Hình 1.6 Sơ đồ chân LCD 16x2
THIẾT KẾ BỘ ĐO VÀ HIỂN THỊ
Ngôn ngữ lập trình và phần mềm biên dịch
C là một ngôn ngữ lập trình tương đối nhỏ gọn vận hành gần với phần cứng và nó giống với ngôn ngữ Assembler hơn hầu hết các ngôn ngữ bậc cao Hơn thế, C đôi khi được đánh giá như là "có khả năng di động", cho thấy sự khác nhau quan trọng giữa nó với ngôn ngữ bậc thấp như là Assembler, đó là việc mã C có thể được dịch và thi hành trong hầu hết các máy tính, hơn hẳn các ngôn ngữ hiện tại trong khi đó thì Assembler chỉ có thể chạy trong một số máy tính đặc biệt Vì lý do này C được xem là ngôn ngữ bậc trung.
C đã được tạo ra với một mục tiêu là làm cho nó thuận tiện để viết các chương trình lớn với số lỗi ít hơn trong mẫu hình lập trình thủ tục mà lại không đặt gánh nặng lên vai người viết ra trình dịch C, là những người bề bộn với các đặc tả phức tạp của ngôn ngữ Cuối cùng C có thêm những chức năng sau:
• Một ngôn ngữ cốt lõi đơn giản, với các chức năng quan trọng chẳng hạn như là những hàm hay việc xử lý tập tin sẽ được cung cấp bởi các bộ thư viện các thủ tục.
• Tập trung trên mẫu hình lập trình thủ tục, với các phương tiện lập trình theo kiểu cấu trúc.
• Một hệ thống kiểu đơn giản nhằm loại bỏ nhiều phép toán không có ý nghĩa thực dụng.
• Dùng ngôn ngữ tiền xử lý, tức là các câu lệnh tiền xử lý C, cho các nhiệm vụ như là định nghĩa các macro và hàm chứa nhiều tập tin mã nguồn (bằng cách dùng câu lệnh tiền xử lý dạng #include chẳng hạn).
• Mức thấp của ngôn ngữ cho phép dùng tới bộ nhớ máy tính qua việc sử dụng kiểu dữ liệu pointer.
• Số lượng từ khóa rất nhỏ gọn.
• Các tham số được đưa vào các hàm bằng giá trị, không bằng địa chỉ.
• Hàm các con trỏ cho phép hình thành một nền tảng ban đầu cho tính đóng và tính đa hình.
• Hỗ trợ các bản ghi hay các kiểu dữ liệu kết hợp do người dùng từ khóa định nghĩa struct cho phép các dữ liệu liên hệ nhau có thể được tập hợp lại và được điều chỉnh như là toàn bộ.
Một số chức năng khác mà C không có (hay còn thiếu) nhưng có thể tìm thấy ở các ngôn ngữ khác bao gồm:
• Tự động Thu dọn rác,
• Các lớp hay các đối tượng cùng với các ứng xử của chúng (xem thêm OOP),
• Lập trình tiêu bản hay Lập trình phổ dụng,
• Quá tải và Quá tải toán tử,
• Các hỗ trợ cho đa luồng, đa nhiệm và mạng.
Mặc dù C còn thiếu nhiều chức năng hữu ích nhưng lý do quan trọng để C được chấp nhận vì nó cho phép các trình dịch mới được tạo ra một cách nhanh chóng trên các nền tảng mới và vì nó cho phép người lập trình dễ kiểm soát được những gì mà chương trình (do họ viết) thực thi Đây là điểm thường làm cho mã C chạy hiệu quả hơn các ngôn ngữ khác Thường thì chỉ có ngôn ngữ ASM chỉnh bằng tay chạy nhanh hơn (ngôn ngữ C), bởi vì ASM kiểm soát được toàn bộ máy Mặc dù vậy, với sự phát triển các trình dịch C, và với sự phức tạp của các CPU hiện đại có tốc độ cao, C đã dần thu nhỏ khác biệt về tốc độ này.
Một lý do nữa cho việc C được sử dụng rộng rãi và hiệu quả là do các trình dịch, các thư viện và các phần mềm thông dịch của các ngôn ngữ bậc cao khác lại thường được tạo nên từ C.
Atmel studio có chức năng như một nền tảng phát triển tích hợp (IDP) được sử dụng để gỡ lỗi các ứng dụng Atmel dựa trên vi điều khiển AVR và ARM Cortex IDP này cho phép xây dựng bất kỳ ứng dụng được viết bằng ngôn ngữ lập trình C / C ++ Atmel ID cũng được thiết kế với Atmel Software Framework (ASF) ASF là một ngân hàng cung cấp dữ liệu cho khoảng 1.600 ARM đồng nghĩa với việc ta cũng có thể tìm thấy và sử dụng 1.600 dự án AVR từ khuôn khổ này Atmel studio được sử dụng để giảm chi phí phát triển ứng dụng cũng như thời gian cần thiết để hoàn thành nó Nó cũng dựa trên điện toán đám mây cho phép việc sử dụng các không gian làm việc hợp tác và các thao tác đồng thời của phần cứng và phần mềm trong một dự án Nó cũng được liên kết với Atmel Gallery có chức năng như một cửa hàng trực tuyến được xây dựng dành riêng cho ứng dụng Atmel, phần mềm và phát triển các công cụ khác Đồng thời, Atmel studio tạo điều kiện cho việc tái sử dụng các phần mềm được sử dụng và cho phép sự khác biệt trong thiết kế Nó cũng làm tăng tốc quá trình phát triển sản phẩm trong khi cung cấp truy cập nhanh đến các phần mở rộng phần mềm cũng như các công cụ phát triển qua Atmel Gallery.
Ngôn ngữ lập trình: Ngôn ngữ Assembly, C
Yêu cầu phần mềm: Atmel AVR Toolchain, Visual studio 2010
Các tính năng hữu ích: Khung xem I/O, chỉnh sửa nhiều tài liệu trong các tab, hướng dẫn tham khảo, tạo tập tin hex.
• Dung lượng (Theo tính toán của trình gỡ cài đặt Windows):
Giao điện phần mềm Atmel studio:
Hình 2.1 Giao diện Atmel Studio 2.1.3 Phần mềm nạp chip Progisp
Cho phép nạp chương trình dưới dạng file hex vào vi điều khiển Vi điều khiển được kết nối tới máy tính thông qua mạch nạp ISP Chương trình sau khi chạy có giao diện như sau:
Hình 2.2 Giao diện của phần mềm nạp chip Progisp
2.2.1 Mô phỏng trên phần mềm proteus 8.13
Hình 2.3 Mô phỏng trên Proteus 2.2.2: Sơ đồ nguyên lý trên phần mềm Altium
Sơ đồ nguyên lý trên phần mềm Altium được sắp xếp theo từng khối.
Hình 2.4 Sơ đồ nguyên lý trên Altium 2.2.3: Mô hình 3D trên Altium
Mô hình 3D trên phần mềm Altium
Hình 2.5 Mô hình 3D trên Altium 2.2.4: Mạch in kit AVR trên Alitum
Hình ảnh mạch in lớp bottom của kit AVR trên Altium
Hình ảnh mạch được mang đi in để chế tạo thủ công.
Giao điện phần mềm nạp code PROGISP.
Hình 2.8 Giao diện nạp code
2.2.6: Sản phẩm mạch thực tế
Hình 2.9 Các linh kiện chi tiết 2.2.7 Chương trình phần mềm
#define BUZZER_PIN 2 int value_adc;
//int a = 0, b = 0; float temp = 0; float humi = 0; int m,n; int test = 65; int clear_w = 0; int clear_f = 0; int Analog_Read1(char channel)
ADMUX |= (1