GIỚI THIỆU TỔNG QUAN
Khối điều khiển
Vi điều khiển AVR, được sản xuất bởi hãng Atmel (Hoa Kỳ) và ra mắt lần đầu tiên vào năm 1996, bao gồm nhiều dòng khác nhau như Tiny (ATtiny 13, ATtiny 22) với bộ nhớ nhỏ, dòng AVR (AT90S8535, AT90S8515) có bộ nhớ trung bình, và dòng Mega (ATmega 16, ATmega 32, ATmega 128) với bộ nhớ từ vài kB đến vài trăm kB và tích hợp nhiều bộ phận ngoại vi, bao gồm cả bộ LCD trên chip Dòng Mega có tốc độ cao hơn và sự khác biệt chính giữa các dòng là cấu trúc ngoại vi, trong khi các tính năng nhận vẫn tương đồng ATmega16 là một vi điều khiển nổi bật với nhiều tính năng đặc biệt, lý tưởng cho các ứng dụng điều khiển dựa trê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 đa dạng mang đến nhiều gợi ý hữu ích 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, cho phép thực hiện mỗi lệnh trong vòng một chu kỳ xung clock, từ đó đạt tốc độ xử lý lên đến 1MIPS trên mỗi Mhz (1 triệu lệnh/s/Mhz), giúp tăng tốc độ xử lý lệnh và giảm thiểu tiêu thụ năng lượng.
2 Thông số kĩ thuật và sơ đồ chân ATmega16 2.1 Thông số kỹ thuật:
Flash (Kbytes): 16 KbytesPin Count: 44
Tần số thường hoạt động (MHz): 16 MHz CPU: 8-bit AVR
- 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) có thể 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ủa thiết bị đóng vai trò là cổng vào ra dữ liệu song song (Port A), đồng thời đượ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 Digital Converter).
Vào ra của vi điều khiển ATmega16:
PORTA (PA7 PA0) là các chân từ 33 đến 40, hoạt động như cổng vào ra song song 8 bit khi không sử dụng chế độ ADC Các điện trở kéo được tích hợp sẵn bên trong, không hoạt động khi PORTA ở chế độ output, nhưng sẽ được kích hoạt khi PORTA chuyển sang chế độ input.
PORTB (PB7 PB0) bao gồm các chân từ 1 đến 8, tương tự như PORTA khi thực hiện vào ra song song Bên cạnh đó, các chân của PORTB cũng hỗ trợ nhiều chức năng đặc biệt khác.
PORTC (PC7 PC0) bao gồm các chân từ 22 đến 30, hoạt động tương tự như PORTA và PORTB khi được sử dụng như cổng vào ra song song Khi giao tiếp JTAG được kích hoạt, các trở treo ở chân PC5 (TDI), PC3 (TMS) và PC2 (TCK) sẽ hoạt động trong sự kiện reset, đồng thời hỗ trợ các chức năng giao tiếp JTAG và một 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
Hình 1: Sơ đồ chân ATmega16
1 Giới thiệu mạch Kit AVR
AVR là dòng vi điều khiển 8 bit phổ biến tại Việt Nam, với tốc độ xung nhịp lên tới 16MHz và bộ nhớ chương trình tối đa 256 kB Nhờ vào nhiều chức năng ngoại vi tích hợp, vi điều khiển AVR có khả năng đáp ứng đa dạng các ứng dụng thực tế, từ những dự án đơn giản cho đến những hệ thống 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ở vị 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 xuI8
*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,
Hình 2: Mạch Kit phát triển và các phụ kiện
Hình 3: Cấu trúc mạch Kit
Bảng 1: Các linh kiện quan trọng và các chức năng tương ứng
STT Tên linh kiện Chức năng
1 Giắc cắm nguồn Nhận nguồn điện 9-12VDC cấp cho mạch Kit
2 IC ổn áp 7805 Hạ 9-12VDC xuống 5VDC 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 dộ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 chp 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 diều khiển của 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 VĐK 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 VĐK Nối tới 8 chân vào ra đa năng(ứng với PORT-C) của
12 Giắc cắm 8 chân VĐK 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 VĐK Báo trạng thái logic 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à 1 vài kí hiệu do người dùng định nghĩa
16 Jumper LED 7 thanh 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ảu bộ ADC(chân PA0)
19 Giắc UART-USB Kết nối module 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ị 10 tất: 15mA
- 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 VO: TTL(5V)
• Loại VĐK được hỗ trợ: ATmega16, ATmega32, và tương đương
• Cổng VO mở rộng: 4 giắc cắm(loại 8 chân) ứng với 4 Port(8 bit 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.
4 Sơ đồ nguyên lí mạch kit
Để làm việc với vi điều khiển AVR, người dùng có thể lựa chọn ngôn ngữ lập trình C hoặc Assembly, sử dụng trên nhiều môi trường phát triển khác nhau Đề tài này được xây dựng với sự kết hợp của AVR Studio 6 (phiên bản 6.2, dung lượng 538MB) và WinAVR (phiên bản 20100110, dung lượng 27.5MB), hoặc phần mềm CodeVisionAVR chuyên dụng cho lập trình Atmega Để nạp mã máy, phần mềm PROGISP (phiên bản 1.72, dung lượng khoảng 3-4MB) được sử dụng, trong khi phần mềm Terminal hỗ trợ nhận dữ liệu từ cổng USB hoặc COM ảo Cuối cùng, phần mềm mô phỏng mạch được sử dụng là Proteus 8 Professional.
Cảm biến nhiệt độ LM35 và LCD1602
1 Cảm biến nhiệt độ LM35
Cảm biến nhiệt độ LM35, được sản xuất bởi National Semiconductor, có khả năng đo nhiệt độ trong khoảng từ 0 đến 100 độ C Với mức tiêu thụ điện năng thấp và sử dụng điện áp 5V, LM35 bao gồm 3 chân: 2 chân nguồn và 1 chân tín hiệu ra dạng Analog.
Chân dữ liệu của cảm biến LM35 là chân ngõ ra điện áp tuyến tính, với mỗi 1mV tương ứng với 0.1 độ C (10mV tương ứng với 1 độ C) Để thu thập dữ liệu dưới dạng độ C, cần chuyển đổi tín hiệu điện áp này.
C chỉ cần lấy điện áp chân OUT chia cho 10
Chân 1 cấp điện áp 5V, chân 3 cấp GND, chân 2 là chân OUTPUT dưới dạng điện áp.
-Điện áp đầu vào từ 4V đến 30V -Điện áp ra từ -1 đến 6V
-Cụng suất tiờu thụ là 60àA
Hình 4: Sơ đồ nguyên lí mạch Kit
-Độ phân giải điện áp là 10mV/ºC -Độ chính xác xao ở 25 ºC là 0.5 ºC -Trở kháng đầu ra thấp 0.1 cho 1mA tải
-Độ chính xác thực tế:1/4 ºC ở nhiệt độ phòng và 3/4 ºC ngoài khoảng -55 ºC đến 150ºC
Màn hình LCD1602 với driver HD44780 có khả năng hiển thị 2 dòng, mỗi dòng 16 ký tự, mang lại độ sáng cao và dễ sử dụng Đây là lựa chọn phổ biến cho những người mới học, thực tập và thực hiện dự án, nhờ vào nhiều mã mẫu có sẵn.
Điện áp hoạt động là 5V
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ó LED nền, có thể sử dụng để điều chỉnh 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
Hình 5:Sơ đồ chân LM35
Bảng 2: Các chân của LCD1602
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 RW Chọn thanh ghi đọc/ viết đữ liệu RW=0 thanh ghi viết
Hình 6: Sơ đồ chân LCD1602
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
1 Tổng quan về ngôn ngữ lập trình C
Ngôn ngữ lập trình C là một ngôn ngữ nhỏ gọn, gần gũi với phần cứng và tương tự như ngôn ngữ lập trình Assembler hơn so với các ngôn ngữ bậc cao khác C được đánh giá là "có khả năng di động", cho thấy sự khác biệt quan trọng với ngôn ngữ bậc thấp như Assembler, vì mã C có thể được dịch và thực thi trên hầu hết các máy tính, trong khi Assembler chỉ chạy trên một số máy tính đặc biệt Do đó, C được xem là ngôn ngữ bậc trung.
Ngôn ngữ lập trình C được phát triển nhằm tạo điều kiện thuận lợi cho việc viết các chương trình lớn với ít lỗi hơn, trong khi vẫn giữ nguyên tính đơn giản của lập trình thủ tục Điều này giúp giảm bớt gánh nặng cho các lập trình viên, những người phải đối mặt với các đặc tả phức tạp của ngôn ngữ C đã được cải tiến với nhiều chức năng mới để đáp ứng nhu cầu này.
Ngôn ngữ cốt lõi đơn giản sẽ được hỗ trợ bởi các bộ thư viện thủ tục, cung cấp những hàm và chức năng quan trọng cho việc xử lý.
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
Sử dụng ngôn ngữ tiền xử lý, cụ thể là các câu lệnh tiền xử lý C, cho phép định nghĩa macro và hàm trong nhiều tập tin mã nguồn, chẳng hạn như thông qua câu lệnh tiền xử lý #include.
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
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 1 nền tảng ban đầu cho tính đóng và tính đa hình.
Struct hỗ trợ người dùng trong việc định nghĩa các bản ghi và kiểu dữ liệu kết hợp, cho phép tổ chức và điều chỉnh các dữ liệu liên quan một cách đồng bộ và hiệu quả.
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 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
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ợ đa luồng, đa nhiệm và mạng
Mặc dù ngôn ngữ C còn thiếu nhiều chức năng hữu ích, nhưng nó được chấp nhận rộng rãi vì cho phép tạo ra các trình mới nhanh chóng trên các nền tảng khác nhau C giúp lập trình viên dễ dàng kiểm soát mã nguồn và quá trình thực thi, điều này thường làm cho mã C chạy hiệu quả hơn so với nhiều ngôn ngữ khác Thực tế, chỉ có ngôn ngữ ASM chạy nhanh hơn C vì ASM kiểm soát toàn bộ máy Tuy nhiên, với sự phát triển của trình biên dịch C và sự phức tạp của các CPU hiện đại, sự khác biệt về tốc độ giữa C và ASM đã dần được thu hẹp.
Một lý do quan trọng khiến ngôn ngữ C được sử dụng rộng rãi và hiệu quả là vì nhiều trình biên dịch, thư viện và phần mềm thông dịch của các ngôn ngữ bậc cao khác thường được xây dựng dựa trên ngôn ngữ C.
2 Phần mềm biên dịch 2.1 AVR Studio 6
AVR Studio 6 cung cấp 1 mô trường phát triển tích hợp(IDE), kết hợp với
2 phần mềm hỗ trợ khác là AVR Toochain và WinAVR AVR Toolchain cài đặt thư viện cho AVR studio Nếu bạn cài đặt AVR Studio và AVR
Để lập trình bằng ASM, bạn cần sử dụng công cụ Toolchain Đối với lập trình bằng C, việc cài đặt WinAVR là cần thiết Nếu bạn có phiên bản phát triển từ Atmel Studio, điều này sẽ mang lại lợi ích lớn vì phần mềm này hỗ trợ lập trình bảng Danh sách các lập trình viên hỗ trợ được cung cấp dưới đây.
-AVR Dragon -AVR One -AVR Simulator -AVR Simulator 2 -ICE 200
-ICE 40 -ICE 50 -JTAG ICE -JTAG ICE mkll Ngôn ngữ lập trình: Ngôn ngữ assembly, C
Các tính năng hữu ích: Khung xem I/O, chỉnh sửa nhiều tài liệu, tạo tập tin Hex
AVR Studio 6; 538MB AVR Toolchain: 194MB
Win AVR: 138MB Tổng cộng: 870MB
CodeVisionAVR C Compiler là một phần mềm dành cho hệ điều hành Windows, thuộc nhóm phần mềm lập trình Phần mềm này được phát triển bởi NA và phiên bản mới nhất hiện nay là Version NA, với các cập nhật mới nhất được cung cấp vào NA.
CodeVision AVR C Compiler, thường được gọi là CodeVision, là một chương trình biên dịch C do Pavel phát triển, nhằm đơn giản hóa quá trình lập trình C cho tất cả người dùng Trình biên dịch này hỗ trợ nhiều loại dữ liệu và biến, cho phép người dùng dễ dàng làm việc với các cấu trúc AVR và ngôn ngữ C.
Hình 7: Giao diện AVR Studio
Trình biên dịch CodeVision AVR C là phần mềm miễn phí dành cho lập trình viên, cho phép tạo ra cả chương trình đơn giản và phức tạp trên vi điều khiển Atmel Studio Điểm nổi bật của CodeVision C là khả năng lưu trữ quá trình trong bộ nhớ flash, giúp chương trình chạy nhanh hơn so với các trình biên dịch thông thường Ngoài ra, nó còn đi kèm với thư viện điểm nhanh nổi bật, hỗ trợ nhân phần cứng và hướng dẫn lõi cho tất cả các chip vi mới.
Trình biên dịch AVR C hỗ trợ đa dạng kiểu dữ liệu của ngôn ngữ C, bao gồm bit, bool, char, int, ngắn, dài và phao Nó cũng cung cấp tính năng gián đoạn để giúp gỡ lỗi nhanh chóng và hiệu quả Thêm vào đó, trình biên dịch tối ưu hóa cấu trúc vòng lặp trong chương trình, nâng cao hiệu suất và khả năng thực thi.
CodeVision cung cấp một quy trình ổn định cho vòng lặp của chương trình, đồng thời loại bỏ những biểu hiện tiểu dự phòng không cần thiết trong các chương trình.
Các lập trình viên có thể tận dụng tính năng điền tự động và gợi ý mã trong trình biên dịch, giúp hiển thị khối mã ngay từ những ký tự đầu tiên Trình biên dịch AVR C hỗ trợ làm nổi bật cú pháp, giúp dễ dàng theo dõi lỗi Nó tương thích với các ứng dụng Atmel khác và giả lập như AVR JTAG-ICE và AVR Dragon Giao diện người dùng được thiết kế đơn giản nhưng vẫn đầy đủ tính năng, đồng thời chương trình cũng dễ sử dụng và tương thích với các trình biên dịch ANSI C khác.
CodeVision AVR C Compiler chạy trong hệ điều hành Windows Nó hỗ trợ Windows XP, Windows Vista và Windows 7 (32bit và 64bit).
THIẾT KẾ VÀ MÔ PHỎNG
1 Thiết kế sơ đồ nguyên lí trên Altium Designer
Hình 9: Sơ đồ nguyên lí đo nhiệt độ độ ẩm sử dụng Kit AVR
2 Mô hình 3D Kit AVR trên Altium Designer
Hình 10: Mô hình 3D Kit AVR
3 Mạch in Kit AVR trên Altium
Hình 11: Đi dây mạch in Kit AVR
4 Mô phỏng trên Proteus 8 Professional
Hình 12: Mạch in Kit AVR
Mô phỏng trên Proteus cho thấy điện áp Vout của LM35 thay đổi tuyến tính theo nhiệt độ với tỉ lệ 10mV/1ºC Bộ ADC trên AVR có độ phân giải 10 bit và điện áp tham chiếu là 2.56V Khi đầu ra của LM35 được kết nối vào kênh 1 của bộ ADC, giá trị đọc được từ bộ ADC sẽ là adc_data[0] = (Vout * 1024V) / Vref = (V * 1024) / 2560 Giá trị của adc_data[0] nằm trong khoảng từ 0 đến 1023.
Nhiệt độ(ºC)=Vout(mV)/10
Vì vậy giá trị của nhiệt độ được tính theo công thức:
Nhiệt độ(ºC) = adc_data[0]*(2560/1024)/10
Hình 14: Mô phỏng trên Proteus cho 2 kênh
Hình 15: Giao diện nạp code trên PROGISP
Trong quá trình hoàn thiện mạch, nhóm đã gặp phải sự cố với cảm biến LM35, vì vậy chúng tôi đã quyết định thay thế bằng cảm biến DS18B20, vốn có các đặc tính tương tự với LM35.
Hình 16: Mạch sau khi hoàn thiện
Hình 18: Kết quả mô phỏng khi dùng cảm biến DS18B20
Hình 18: Kết quả đo được khi dùng mạch thực tế và cảm biến DS18B20