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 dò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.
2 Thông số kĩ thuật và sơ đồ chân ATmega16
Tần số thường hoạt động (MHz): 16 MHz
-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ổng vào ra dữ liệu song song(Port A), 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 digital converter)
Hình 1: Sơ đồ chân ATmega16
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 PB0 ): 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), PC3(TMS), PC2(TCK) sẽ hoạt động khi sự kiện reset xảy ra, ngoài ra còn các 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 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ở 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ạchKit
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 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
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 8 chân ở PORT-D(sáng-0,tắt-1)
14 Jumper dãy LED Cho phép hoặc vô hiệu hóa LED đơn đơ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
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 1 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 no trường soạn thảo và biên dịch là sự kết hợp của AVR Studio 6 (phiên bản 6.2 dung lượng 538MB) với WinAVR (phiên bản 20100110, dung lượng 27.5 MB) hoặc dùng phần mềm CodeVisionAVR chuyên cho lập trình Atmega 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.
Hình 4: Sơ đồ nguyên lí mạch
Cảm biến nhiệt độ LM35 và LCD1602
Cảm biến Nhiệt Độ LM35 được sản xuất bởi hãng National Semiconductor dải đo từ 0 đến 100 độ C LM35 là cảm biến tiêu hao điện năng thấp sử dụng điện áp 5V Cảm biến gồm 3 chân, 2 chân nguồn và 1 chân ra dạng tín hiệu Analog.
Chân dữ liệu của LM35 là chân ngõ ra điện áp dạng tuyến tính Chân số 2 cảm biến xuất ra cứ 1mV=0.1 độ C(10mV=1 độ C) Để lấy dữ liệu ở dạng độ
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
-Độ 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
2 Màn hình text LCD1602 Hình 5:Sơ đồ chân LM35
Màn hình text LCD1602 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ó độ nề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 đi học, thực tập và làm dự án
*Thông số kĩ thuật: Điện áp hoạt động là 5V
12.5mm 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 6: Sơ đồ chân LCD1602
Bảng 2: Các chân của LCD1602
Châ Ký hiệu Mô tả Giá trị n
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/ RW=0 thanh ghi viết viết đữ liệu
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
C là một ngôn ngữ lập trình tương dối nhỏ gọn vaanj hành gần với phần cứng và nó giống với ngôn ngữ lập trình 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 1 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 1 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ý sẽ được cung cấp bởi các bộ thư viện 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ử ly 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
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.
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 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ù 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 mới được tạo ra 1 cahs nhanh chóng trên các nền tảng mới vì nó cho phép người lập trình dễ kiểm soát những gì mà họ viết và 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 là 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ủa trình dịch C và với sự phức tạp của CPU hiện đại có tốc độ cao, C đã dần thu nhỏ sự 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 tạo nên từ C
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 Toolchain, bạn có thể viết chương trình bằng ASM Để viết chương trình bằng C bằng cần cài WinAVR Nếu có bản phát triển từ Atmel Studio, nó sẽ tốt hơn vì phần mềm này hỗ trợ lập trình bảng Các lập trình viên hỗ trợ có trong danh sách dưới đây:
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
CodeVisionAVR C Compiler là phần mềm cho hệ điều hành Windows, thuộc nhóm phần mềm Software được phát triển bởi NA Phiên bản mới nhất của CodeVisionAVR C Compiler là Version NA (cập nhật NA).
Các CodeVision hay thường được gọi là CodeVision AVR C Compiler là một chương trình biên dịch C được phát triển bởi Pavel Nó được thiết kế để làm lập trình C dễ dàng cho tất cả người dùng Tuy nhiên, trình biên dịch cũng được thiết kế với các loại dữ liệu hỗ trợ và các biến mà có thể được sử dụng cho các cấu trúc AVR và C.
Trình biên dịch CodeVision AVR C là một phần của các vi điều khiển Atmel Studio Nó đã được phát hành như là một phần mềm miễn phí cho các lập trình viên mà cần phải tạo ra cả hai chương trình đơn giản mã hoá và những phức tạp Điểm nổi bật chính của trình biên dịch CodeVision C là nó lưu trữ quá trình của nó trong một bộ nhớ flash và nó không ở lại trên thẻ RAM của máy tính Như vậy, chương trình chạy nhanh hơn so với các trình biên dịch thông thường Nó có một thư viện điểm nhanh nổi với nhân phần cứng và hướng dẫn lõi hỗ trợ tăng cường cho tất cả các chip vi mới.
Trình biên dịch AVR C cũng hỗ trợ hầu hết các kiểu dữ liệu của C như bit, bool, char, int, ngắn, dài và phao Ngoài các kiểu dữ liệu, trình biên dịch cũng hỗ trợ gián đoạn để gỡ lỗi nhanh chóng và xây dựng Hơn nữa, trình biên dịch cũng tối ưu hóa cấu trúc vòng lặp của chương trình được tạo ra bởi CodeVision Điều này cung cấp một quá trình ổn định vòng lặp của chương trình Phần mềm này cũng loại bỏ những biểu hiện tiểu dự phòng của các chương trình.
Ngoài ra, các lập trình viên có thể được cung cấp cùng với điền tự động và autosuggest tính năng của trình biên dịch Điều này có nghĩa, rằng chương trình cho thấy một khối mã ngay cả như các loại lập trình viên trong bức thư đầu tiên của mã Trình biên dịch AVR C cũng hỗ trợ làm nổi bật cú pháp; dễ dàng cho việc theo dõi lỗi Chương trình 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ủa nó cũng được thiết kế để đơn giản, nhưng nhỏ gọn với các tính năng Bên cạnh đó, chương trình cũng rất dễ sử dụng và cũng 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
3 Mạch in Kit AVR trên Altium
Hình 11: Đi dây mạch in Kit AVR
Hình 12: Mạch in Kit AVR
4 Mô phỏng trên Proteus 8 Professional
Hình 13: Mô phỏng trên Proteus cho 1 kênh
Hình 14: Mô phỏng trên Proteus cho 2 kênh Điện áp Vout của LM35 thay đổi tuyến tính theo nhiệt dộ với tỉ lệ 10mV/1ºC. Độ phân giải cảu bộ ADC trên AVR là 10 bit và diện áp tham chiếu là 2.56V. Nếu ta nói đàu ra của LM35 vào kênh 1 của bộ AC thì giá trị cảu bộ ADC đọc được là adc_data[0]=(Vout*1024V)/Vref=(V*1024)/2560
Giá trị của adc_data[0] lại trong khoảng từ 0 đến 1023 nên ta có:
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 15: Giao diện nạp code trên PROGISP
Hình 16: Mạch sau khi hoàn thiện
*Do trong quá trình hoàn thiện mạch, bọn em có gặp trục trặc với cảm biến LM35 nên bọn em đã thay bằng cảm biến DS18B20 có các tính chất khá tương tự với LM35.
Hình 18: Kết quả mô phỏng khi dùng cảm biến
Hình 18: Kết quả đo được khi dùng mạch thực tế và cảm biến DS18B20