Các trường đại học, trong đó các trường đầu ngành như Bách Khoa, Khoa học Tự nhiên, và một số trường kỹ thuật khác đang có khuynh hướng thành lập các phòng thí nghiệm về hệ thống nhúng m
Trang 1SỞ KHOA HỌC VÀ CÔNG NGHỆ THÀNH ĐOÀN
CHƯƠNG TRÌNH VƯỜN ƯƠM SÁNG TẠO KHOA HỌC VÀ CÔNG NGHỆ TRẺ
X * W
BÁO CÁO NGHIỆM THU
(Đã chỉnh sửa theo góp ý của Hội đồng nghiệm thu ngày 14 tháng 04 năm 2010)
Chủ nhiệm đề tài: NGUYỄN CHÍ NHÂN
Cơ quan chủ trì: TRUNG TÂM PHÁT TRIỂN
Trang 2v
MỤC LỤC
Trang
Xác nhận chỉnh sửa báo cáo nghiệm thu
Thông tin đề tài i
Giới thiệu iii
Mục lục v
Danh sách các chữ viết tắt vii
Danh sách bảng vii
Danh sách hình vii
Phần 1: TỔNG QUAN VỀ ĐỀ TÀI 1
Phần 2: NỘI DUNG NGHIÊN CỨU Chương 1: HỌ VI ĐIỀU KHIỂN AVR 6
1.1 TỔNG QUAN VỀ VI ĐIỀU KHIỂN AVR 6
1.2 ĐẶC ĐIỂM CỦA VI ĐIỀU KHIỂN AVR 6
1.2.1 Kiến trúc RISC 6
1.2.2 Một số chip AVR 7
1.3 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR 7
1.3.1 Hoạt động của AVR 7
1.3.2 Kiến trúc cơ bản bên trong của AVR 8
1.4 LỰA CHỌN VI ĐIỀU KHIỂN AVR 9
1.5 KIẾN TRÚC VI ĐIỀU KHIỂN ATMEGA32 10
1.5.1 Một số đặc tính của ATmega32 10
1.5.2 Tổ chức bộ nhớ trong AVR 11
1.5.3 Các thanh ghi chức năng 15
1.5.4 Hoạt động ngắt-Interrrupt 17
1.5.5 Hoạt động của bộ định thời-Timer/Counter 19
Chương 2: NGHIÊN CỨU CÁC KIT THÍ NGHIỆM 23
2.1 KIT THỰC TẬP VI ĐIỀU KHIỂN LD1 23
2.2 EasyAVR Devlopment KIT và EasyPIC-PRO Development KIT 24
Trang 3vi
2.3 KIT DE PIC 26
2.4 BỘ MÔ HÌNH THÍ NGHIỆM VI ĐIỀU KHIỂN (KDD-2007) 27
2.5 MÔ HÌNH THÍ NGHIỆM VI ĐIỀU KHIỂN HỌ AVR 28
Phần 3: KẾT QUẢ VÀ THẢO LUẬN Chương 1: BỘ KIT AVR HOÀN CHỈNH 30
1.1 GIỚI THIỆU BỘ KIT AVR 30
1.2 CÁC CÔNG CỤ LÀM VIỆC VỚI VI ĐIỀU KHIỂN AVR 30
1.3 CÁC YÊU CẦU TRƯỚC KHI SỬ DỤNG KIT 32
1.4 GHÉP NỐI GIỮ MÁY TÍNH VỚI KIT AVR 32
1.5 CÁC BÀI THỰC HÀNH ĐI KÈM THEO KIT AVR 34
Chương 2: MÔ HÌNH XE ĐUA TỰ HÀNH SỬ DỤNG VI ĐIỀU KHIỂN AVR 2.1 GIỚI THIỆU XE ĐUA TỰ HÀNH 37
2.2 NGUYÊN TẮC HOẠT ĐỘNG CỦA XE ĐUA TỰ HÀNH 38
KẾT LUẬN VÀ ĐỀ NGHỊ 40 TÀI LIỆU THAM KHẢO
Trang 4DANH SÁCH CÁC CHỮ VIẾT TẮT
PCB Print Circuit Board
RISC Reduced Intruction Set Computer
CPU Central Processing Unit
RTC Real Time Clock
HLL Hight Level Language
ALU Arithmetic Logic Unit
PWM Pulse Width Modulator
LPM Load Program Memory
ISR Interrupt Service Routine
LCD Liquid Crystal Display
MSB Most Significant Bit
USART Universal Synchronous & Asynchronous serial Reveiver and Transmitter
DANH SÁCH BẢNG
Bảng P2_1.1: Các vector ngắt của ATmega32 12
Bảng P2_1.2: Các chế độ sleep của AVR 16
Bảng P2_1.3: Chọn chế độ hoạt động của timer 20
Bảng P2_1.4: Chọn chế độ so sánh đầu ra của timer 21
Bảng P2_1.5: Chế độ xung clock cho timer 21
Bảng P3_1.1: Bảng các phụ kiện đi kèm theo KIT 32
Bảng P3_1.2: Bảng cấu hình máy tính 32
DANH SÁCH HÌNH Hình P2_1.1: Kiến trúc cơ bản bên trong của vi điều khiển AVR 8
Hình P2_1.2: Sơ đồ khối của Atmega32 đã được đơn giản hóa 9
Hình P2_1.3: Tổ chức bộ nhớ chương trình của ATmega32 12
Hình P2_1.4: Tổ chức bộ nhớ dữ liệu 13
Hình P2_1.5: Tập thanh ghi 14
Hình P2_1.6: Bộ nhớ dữ liệu EEPROM 15
Hình P2_1.7: Sơ đồ thực hiện ngắt của AVR 17
Hình P2_2.1: Kit thực tập vi điều khiển LD1 23
Hình P2_2.2: EasyPIC-PRO Development KIT 24
Hình P2_2.3: EasyAVR Devlopment KIT 25
Hình P2_2.4: KIT DE PIC 27
Hình P2_2.5: Bộ mô hình thí nghiệm vi điều khiển (KDD-2007) 28
Hình P2_2.6: Mô hình thí nghiệm vi điều khiển họ AVR 28
Hình P3_1.1: Bộ Kit AVR hoàn chỉnh 30
Hình P3_1.2: Đầu nối ISP 32
Hình P3_1.3: Cáp chuyển từ 6-PIN sang 10-PIN 33
Trang 5Hình P3_1.4:Cổng COM ảo kết nối giữ máy tính với STK500 33
Hình P3_1.5: Chọn cấu hình STK500 trong CodeVision 34
Hình P3_1.6: Kết nối giữa KIT AVR với máy tính 34
Hình P3_2.1: Mô hình xe đua tự hành 37
Hình P3_2.2: Mô hình đường đua 38
Trang 6iii
GIỚI THIỆU
Hiện nay vi điều khiển đã rất phổ biến ở Việt Nam Việc thiết kế những Kit phát triển cho vi điều khiển là vấn đề ngày càng được quan tâm của nhiều nhóm tác giả Vi điều khiển thường được dùng để xây dựng các hệ thống nhúng Nó xuất hiện khá nhiều trong các ứng dụng như: các dây chuyền tự động loại nhỏ, các robot có chức năng đơn giản, trong máy giặt, ôtô, lò vi sóng, điện thoại, các máy tính bỏ túi v.v Việc nghiên cứu học tập kỹ thuật vi xử lý nói chung, các họ vi điều khiển nói riêng, trong đó điển hình là họ AVR là rất cần thiết cho sinh viên chuyên ngành kỹ thuật Để có thể học tập, nghiên cứu, thiết kế tốt về các họ vi điều khiển rất cần các thiết bị thí nghiệm thực hành cũng như các công cụ trợ giúp thiết kế hệ vi điều khiển Trước nhu cầu thực tế trên chúng tôi tiến hành nghiên cứu và thiết kế kit phát triển
đa năng sử dụng vi điều khiển AVR với mục tiêu:
- Nhằm phục vụ hiệu quả cho việc giảng dạy ở trường đại học đồng thời giúp
cho sinh viên có cơ hội vừa học vừa thực hành môn học Vi Điều Khiển (VĐK)
- Tạo cơ hội khám phá và học hỏi cho các sinh viên, giúp sinh viên nắm bắt bài học một cách hiệu quả nhất
- Mong ước đem đến cho sinh viên một kiến thức vững chắc có thể sử dụng trong công việc hoặc trong quá trình nghiên cứu sau này
Trang 7iv
INTRODUCTION
Currently microcontroller was very popular in Vietnam The design development KIT for the microcontroller is a matter of growing concern of many authors Microcontroller is often used to build embedded systems It appears quite a lot of applications such as small automated production lines , the robot has a simple function, in washing machines, cars, microwave, phone, pocket PC, etc The study engineering microprocessor in general, microcontroller families in particular, where typically AVR is necessary for students whose major related to engineering To be able to study, research, and have good design of the microcontroller, we need laboratory equipment as well as practical tools to support design microcontroller Based on actual demand, we conduct research and design development Kit which
use AVR microcontroller with the aim of:
- In order for effective teaching at the university also helps students with
learning opportunities both practical subjects microcontroller
- Opportunity to explore and learn for students, help students grasp the lesson
most effectively
- Wish to give students a solid knowledge can use at work or during the study
later
Trang 8Phần 1:
TỔNG QUAN VỀ ĐỀ TÀI
1.Tổng quan tình hình nghiên cứu
Hầu hết các sản phẩm điện tử thương mại và công nghiệp trên Thế giới hiện nay đều ứng dụng vi điều khiển có kiến trúc RISC Ở Việt Nam, nhu cầu nghiên cứu, đào tạo về vi điều khiển RISC cũng đang được quan tâm trong thời gian gần đây
Các trường đại học, trong đó các trường đầu ngành như Bách Khoa, Khoa học Tự nhiên, và một số trường kỹ thuật khác đang có khuynh hướng thành lập các phòng thí nghiệm về hệ thống nhúng mà trong đó một phần tập trung vào nghiên cứu sử dụng và lập trình ứng dụng cho vi điều khiển có kiến trúc RISC Chẳng hạn :
- Khoa Điện-Điện tử, Trường Đại học Bách Khoa-TP.HCM xây dựng dự án phòng thí nghiệm hệ thống nhúng và thiết kế vi mạch Trong đó một phần dự án sẽ trang bị các thiết bị và kit thí nghiệm về các họ vi điều khiển PIC và ARM
- Trường Đại học Khoa học Tự nhiên cũng đã thành lập Phòng thí nghiệm Thiết kế
vi mạch và hệ thống nhúng cũng đã trang bị một số Kit H8SX (Renesas), ARM nhằm phục vụ cho nhu cầu nghiên cứu của cán bộ và sinh viên năm cuối Bên cạnh đó Phòng thí nghiệm Selab (thuộc Khoa công Nghệ thông tin) cũng có một nhóm chuyên nghiên cứu lập trình cho vi điều khiển H8SX (Renesas), ARM, PIC
- Trung tâm Nghiên cứu và Đào tạo Thiết kế Vi mạch (ICDREC) thuộc Khu công nghệ Phần mềm (ITP), Đại học Quốc gia-TP.HCM là trung tâm đầu tiên của Việt Nam nghiên cứu, thiết kế chế tạo lõi IP RISC 8 bit Ngoài việc thiết kế ra chính chip vi điều khiển RISC, một hướng đi cũng được ICDREC rất quan tâm là xây dựng các ứng dụng trên RISC 8/32 bit
- Dự án sản xuất thử nghiệm các bộ Kit Vi điều khiển phục vụ cho giảng dạy tại các Trường Đại học, Cao đẳng chuyên ngành Cơ điện tử, Tự động hoá, Dự án này đang được thực hiện do TS Trần Thu Hà Trường Đại học Sư Phạm Kỹ Thuật TP.HCM chủ trì
- Các trung tâm đào tạo như Trung tâm Điện tử và Máy tính thuộc Trường Đại học Khoa học Tự nhiên, Trung tâm đào tạo Công nghệ thông tin thuộc Sở Bưu chính Viễn thông, cũng đều có các khoá giảng dạy về vi điều khiển
Trang 9- Theo điều tra sơ bộ của chúng tôi, nhiều trường đại học đào tạo theo hướng điện
tử, kỹ thuật và một số trung tâm đào tạo đang có nhu cầu xây dựng phòng thí nghiệm và các khoá đào tạo về vi điều khiển Điều này xuất phát từ nhu cầu ngày càng tăng của xã hội
Ý tưởng của nhóm nghiên cứu là thiết kế kit phát triển đa năng hỗ trợ việc học tập, nghiên cứu, thiết kế ứng dụng vi xử lý nói chung, và các họ vi điều khiển nói riêng đạt hiệu quả cao Hoàn chỉnh các tài liệu hướng dẫn thực hành cho môn học vi xử lý, vi điều khiển, đây là công cụ hữu hiệu để nghiên cứu, giảng dạy chuyên ngành về vi điều khiển và đồng thời hỗ trợ tốt cho sinh viên trong quá trình học tập, nghiên cứu về các
họ vi điều khiển nói chung, họ vi điều khiển AVR nói riêng Kết quả đạt được từ công trình nghiên cứu này có ý nghĩa thực tiễn cao trong việc học tập, nghiên cứu về lĩnh vực
vi điều khiển
2 Nội dung thực hiện
Trong đề tài này chúng tôi thực hiện một số nội dung nghiên cứu như sau:
2.1 Tìm hiểu kiến trúc, tập lệnh và các công cụ dùng của họ vi điều khiển AVR Bên cạnh đó nghiên cứu các Kit thí nghiệm giảng dạy thông dụng trên thị trường Phân tích thiết kế phần cứng, phần mềm và các bài thí nghiệm
2.2 Giao tiếp với AVR
- Bằng phần cứng: kết nối truyền thông với vi điều khiển AVR thông qua cổng RS-232
- Bằng phần mềm: lập trình nhúng cho vi điều khiển (sử dụng ngôn ngữ lập trình truyền thống như: hợp ngữ hay lập trình C)
2.3 Thiết kế kit phát triển đa năng và các môđun ứng dụng trên vi điều khiển AVR
- Môđun chính: Đơn vị xử lý trung tâm (CENTRAL PROCESSING UNIT)
- Môđun giao tiếp vào/ra (I/O) gồm: các port của vi điều khiển Atmega32, màn hình hiển thị-LCD 16x2, Led đơn, Led 7 đoạn, công tắc gạt DIP 8x2, và ma trận LED 5x7
- Môđun giao tiếp theo chuẩn UART
- Môđun điều khiển động cơ DC và động cơ bước (STEP MOTOR)
- Môđun giao tiếp theo chuẩn I2C
- Môđun bàn phím (Key pad)
- Môđun cấp nguồn
- Môđun debugger
- Môđun ISP Programer
Trang 102.4 Viết chương trình kiểm tra Kit
2.5 Viết chương trình thí nghiệm mẫu
2.6 Xây dựng Tài liệu hướng dẫn thực hành trên bộ KIT thiết kế cho sinh viên đại học Dựa trên bộ KIT đã thiết kế chúng tôi sẽ đi xây dựng các tài liệu hướng dẫn thực hành theo từng môđun thực hành như sau:
- Môđun 1: GIỚI THIỆU KIT AVR VÀ TRÌNH BIÊN DỊCH CODEVISIONAVR
Trong môđun này chúng tôi dự kiến giới thiệu tổng quát các thành phần và cấu trúc của KIT thực tập là KIT chính mà sinh viên sẽ thực tập trong suốt quá trình học môn này Giới thiệu vi điều khiển AVR, ngôn ngữ lập trình nhúng C, và sử dụng các trình mô phỏng, biên dịch trên vi điều khiển AVR Sử dụng phần mềm CodeVisionAVR để soạn thảo, tổ chức một project cho bất kỳ chip họ AVR nào
- Môđun 2: ĐIỀU KHIỂN VÀO RA (I/O) VỚI LED ĐƠN
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: Cách cấu hình khởi tạo cho CPU hoạt động, cấu hình Port, đọc dữ liệu và xuất dữ liệu ra Port, điều khiển các LED đơn trên KIT theo ý muốn thông qua các port vào/ra của AVR
‐ Môđun 3: ĐIỀU KHIỂN LED 7 ĐOẠN
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: cấu hình được các thanh ghi của một port dữ liệu, khởi tạo được CPU hoạt động với cấu hình tối thiểu nhất, phương pháp quét LED 7 đoạn và điều khiển các LED
7 đoạn trên KIT theo ý muốn thông qua các port vào/ra của AVR
- Môđun 4: ĐIỀU KHIỂN LED MA TRẬN 5x7
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: giải mã và phương pháp hiển thị trên LED ma trận, điều khiển các LED ma trận trên KIT theo ý muốn thông qua các port vào/ra của AVR
- Môđun 5: HIỂN THỊ LCD 16x2
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: giao tiếp được với LCD 16x2 để có thể ứng dụng cho những mục đích hiển thị cụ thể Từ module LCD 16x2 có thể mở rộng sang những module tương tự, ví dụ như module LCD 16x4, 40x2, …
Trang 11- Môđun 6: HOẠT ĐỘNG NGẮT VÀ ĐỊNH THỜI CỦA AVR
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: vận dụng được hoạt động ngắt trong AVR là một tính năng quan trọng và cần thiết nhất trong mọi ứng dụng Những hoạt động và tính năng của timer trong AVR Cấu hình và truy xuất được các thanh ghi trong timer và các thanh ghi liên quan đến hoạt động ngắt của timer
- Môđun 7: HOẠT ĐỘNG NỐI TIẾP CỦA AVR,TRUYỀN THÔNG VỚI MÁY TÍNH
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: ứng dụng được tính năng cơ bản, cần thiết và quan trọng nhất của truyền thông nối tiếp.Giao tiếp để trao đổi dữ liệu giữa AVR với bên ngoài thông qua một máy tính và một chương trình truyền thông cho máy tính Hyper Terminal
- Môđun 8: GIAO TIẾP VỚI BÀN PHÍM (KEY PAD)
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: cấu trúc của Keypad 4x4, quá trình đọc Keypad, Kỹ thuật quét Keypad cơ bản, cách đọc và hiển thị giá trị từ keypad 4x4 lên LCD
- Môđun 9: ĐIỀU KHIỂN ĐỘNG CƠ DC MOTOR VÀ STEP MOTOR
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội dung như: điều khiển động cơ DC quay theo chiều kim đòng hồ và ngược lại Điều khiển step motor quay theo chiều kim đồng hồ ở chế độ half step và full step và điều khiển step quay đúng một vòng 360o
- Môđun 10: GIAO TIẾP I2C
Trong môđun này chúng tôi dự kiến xây dựng bài thực hành liên quan đến những nội
dung như: Giới thiệu chuẩn I2C, lập trình giao tiếp với Real Time Clock(RTC) và EEPROM
2.7 Phát triển ứng dụng: dựa trên những môđun đã thiết kế ở trên chúng tôi hướng đến việc phát triển ứng dụng trên vi điều khiển AVR đó là thiết kế bộ điều khiển sử dụng AVR cho xe đua tự hành Bên cạnh đó, chúng tôi thiết kế bộ tài liệu hướng dẫn lập trình cho xe đua tự vận hành Ứng dụng mô hình xe này để giảng dạy cho sinh viên về vi điều khiển và lập trình nhúng
Trang 12Việc thiết kế kit phát triển đa năng này có thể xem như là một công cụ hữu hiệu
hỗ trợ cho thiết kế ứng dụng nhúng trên vi điều khiển Để phát triển các ứng dụng cụ thể thì còn phụ thuộc rất nhiều vào kinh nghiệm làm việc của các kỹ sư thiết kế Do đó chúng tôi chọn cách tiếp cận sát thực tế nhất để thiết kế kit phù hợp với việc học tập, nghiên cứu, thiết kế ứng dụng vi xử lý nói chung, và các họ vi điều khiển nói riêng Kit được thiết kế theo cấu trúc mở cho phép mở rộng thêm nhiều ứng dụng khác nữa mà
không phải thiết kế lại khối CPU
Trang 13Phần 2:
NỘI DUNG NGHIÊN CỨU
Chương 1:
HỌ VI ĐIỀU KHIỂN AVR
1.1 TỔNG QUAN VỀ VI ĐIỀU KHIỂN AVR
Vi điều khiển AVR thuộc họ vi điều khiển do Atmel sản xuất (Atmel cũng là nhà sản xuất các vi điều khiển họ 89C51) Đây là họ vi điều khiển được chế tạo theo kiến trúc RISC (Reduced Intruction Set Computer) có cấu trúc tập lệnh rút gọn Ngoài các tính năng như các họ họ vi điều khiển khác, nó còn tích hợp nhiều tính năng mới rất tiện lợi cho người thiết kế và lập trình Sự ra đời của AVR bắt nguồn từ yêu cầu thực tế là hầu hết khi cần lập trình cho vi điều khiển, chúng ta thường dùng những ngôn ngữ bậc cao HLL (Hight Level Language) để lập trình ngay cả với loại chip xử lí 8 bit trong đó ngôn ngữ C là ngôn ngữ phổ biến nhất Tuy nhiên khi biên dịch thì kích thước đoạn mã sẽ tăng nhiều so với dùng ngôn ngữ Assembly Hãng Atmel nhận thấy rằng cần phải phát triển một cấu trúc đặc biệt cho ngôn ngữ C để giảm thiểu sự chênh lệch kích thước mã
đã nói trên Và kết quả là họ vi điều khiển AVR ra đời với việc làm giảm kích thước đoạn mã khi biên dịch và thêm vào đó là thực hiện lệnh đúng đơn chu kỳ máy với 32 thanh ghi tích lũy và đạt tốc độ nhanh hơn các họ vi điều khiển khác từ 4 đến 12 lần
1.2 ĐẶC ĐIỂM CỦA VI ĐIỀU KHIỂN AVR
Vi điều khiển AVR được thiết kế theo kiểu kiến trúc RISC: Kiến trúc RISC với hầu hết
các lệnh có chiều dài cố định, truy nhập bộ nhớ nạp lưu trữ (load-store) và 32 thanh ghi
Lý thuyết của phép nhân là thực hiện liên tiếp nhiều phép cộng, do đó lệnh ADD là đủ
Trang 14Một ý khác của RISC đó là các chức năng phức tạp thích hợp thực hiện bằng phần mềm hơn là bằng phần cứng Phần mềm thì dễ thay đổi, dễ cập nhật, và tạo ra nhanh hơn Viết mã mới nhanh hơn là thiết kế và xây dựng một chíp mới Do đó các máy tính dựa trên RISC có thể được nâng cấp nhanh hơn Các chương trình và các thuật toán có thể điều chỉnh và cải tiến Tốt nhất là phần cứng RISC phải được đơn giản hóa, tối ưu hóa sao cho nó chạy nhanh hơn Các tạp chí kỹ thuật và các xuất bản thương mại đã quảng cáo sâu rộng RISC như là một lĩnh vực mới cho máy tính
- So với các chip vi điều khiển khác, AVR có nhiều đặc tính hơn hẳn, hơn cả trong tính
- Bên cạnh lập trình bằng ASM, cấu trúc AVR được thiết kế tương thích với C
1.2.2 Một số chip AVR
- AT90S8535: Không có lệnh nhân hoặc chia trên thanh ghi
- ATmega 8, 16, 32, 64, 128 (AVR loại 8 bit, 16 bit, 32 bit): Là loại AVR tốc độ cao, tích hợp sẵn ADC 10 bit
- Atmega169, 329: AVR tích hợp sẵn LCD driver
- AT90PWM: Là loại AVR có tích hợp SC (power stage controller), thường dùng trong các ứng dụng điều khiển động cơ hay chiếu sáng nên còn gọi là lighting AVR
- Attiny11, 12, 15: AVR loại nhỏ
1.3 KIẾN TRÚC CỦA VI ĐIỀU KHIỂN AVR
Các bộ xử lý AVR có kiến trúc Harvard, nghĩa là có bộ nhớ dữ liệu và bộ nhớ chương trình tách biệt nhau Bus dữ liệu dùng cho bộ nhớ dữ liệu và một bus 8bit, cho phép nối hầu hết các bộ phận ngoại vi với tập thanh ghi Bus dữ liệu dùng cho bộ nhớ chương trình có độ rộng 16 bit và chỉ nối với thanh ghi lệnh
1.3.1 Hoạt động của AVR
Với 32 thanh ghi trong tệp thanh ghi được kết nối trực tiếp với ALU (Arithmetic Logic Unit) – đơn vị luận lý số học và nó cũng được xem như là CPU(Central Processing Unit – đơn vị xử lý trung tâm) của AVR bằng hai đường Vì thế ALU có thể truy xuất cùng
Trang 15lúc hai thanh ghi trong tệp thanh ghi chỉ trong một chu kỳ xung clock Còn các lệnh được chứa trong bộ nhớ chương trình dưới dạng các thanh ghi 16 bit và được truy cập trong mỗi chu kỳ xung clock Một lệnh sẽ được nạp vào thanh ghi lệnh, thanh ghi lệnh
sẽ tác động và lựa chọn các thanh ghi trong tệp thanh ghi cũng như lựa chọn RAM cho ALU thực thi Trong lúc thực thi chương trình, địa chỉ của dòng lệnh đang thực thi được quyết định bởi bộ đếm chương trình- PC (program counter) Đó chính là cách thức hoạt động cơ bản của các chip AVR
1.3.2 Kiến trúc cơ bản bên trong của vi điều khiển AVR
Hình P2_1.1: Kiến trúc cơ bản bên trong của vi điều khiển AVR
Trang 16Hình P2_1.2: Sơ đồ khối của Atmega32 đã được đơn giản hóa
Các bộ phận ngoại vi được tích hợp ngay trên chip, bao gồm cổng I/O số, bộ biến đổi ADC, bộ nhớ EFPROM, bộ định thời, UART, bộ định thời RTC, bộ điều chế độ rộng xung (PWM), Đặc điểm này được xem là nổi bật so với nhiều vi điều khiển khác vì trong khi nhiều bộ xử lý khác phải tạo bộ truyền nhận UART hoặc giao diện SPI bằng phần mềm hay “máy ảo” thì trên vi điều khiển AVR lại được thực hiện bằng phần cứng
1.4 LỰA CHỌN VI ĐIỀU KHIỂN AVR
Có rất nhiều họ vi điều khiển của các hãng nổi tiếng trên Thế giới như: 8048 và 8051 của Intel, 68HC11 của Motorola, Z8 của Zilog, PIC của Microchip, H8 của Hitachi,
Ở đây chúng tôi lựa chọn họ vi điều khiển AVR của hãng Atmel vì các lý do sau:
- Được chế tạo theo kiến trúc RISC, hiệu suất cao và điện năng tiêu thụ thấp
- Có kiến trúc đơn giản và hợp lý
- Bộ nhớ chương trình, dữ liệu và nhiều bộ phận ngoại vi được tích hợp ngay trên chip
- Tốc độ xử lý lớn hơn đến 12 lần so với các vi điều khiển thông thường, vi điều
Trang 17khiển AVR có khả năng đạt đến tốc độ xử lý 12MPIS(triệu lệnh trong một giây)
- Khả năng lập trình được và hỗ trợ cho việc lập trình bằng ngôn ngữ cấp cao
- Có trên thị trường ở Việt Nam
- Chi phí thấp
1.5 KIẾN TRÚC VI ĐIỀU KHIỂN ATMEGA32
Cũng giống như các loại chip AVR khác, chip ATmega32 cũng được thiết kế
dựa trên kiến trúc RISC( viết tắt của Reduced Instructions Set Computer- dịch là máy tính với tập lệnh đơn giản hóa), khác với kiến trúc CISC(viết tắt của Complex Instructions Set Computer- dịch là máy tính với tập lệnh phức tạp) kiến trúc RISC với
tập lệnh ngắn gọn và đơn giản hơn, thời gian thực thi nhanh hơn Hiện nay các bộ vi xử
lý và vi điều khiển có kiến trúc RISC phổ biến là PIC, ARM DEC Alpha, AVR của Atmel
Kiến trúc RISC có những chức năng thích hợp cho việc sử dụng phần mềm hơn là phần cứng vì phần mềm dễ thay đổi, dễ cập nhật và tạo ra nhanh hơn so với phần cứng Do
đó các máy tính dựa trên kiến trúc RISC có thể được nâng cấp nhanh hơn,
các chương trình và các thuật toán có thể điều chỉnh và cải tiến một cách hiệu quả
- Một tập thanh ghi với 32 thanh ghi 8 bit, tất cả các chip thuộc họ AVR
đều có tập thanh ghi này
- Tần số tối đa có thể lên tới 16Mhz
• Bộ nhớ chương trình và bộ nhớ dữ liệu
- 32 Kbyte bộ nhớ lập trình được(flash), có thể nạp lại 10.000 lần
- 1024 Byte EEPROM, có thể nạp lai 100.000 lần
- 2 Kbyte SRAM nội
• Giao tiếp chuẩn JTAG(IEEE)
- Hỗ trợ chế độ Debug mở rộng trên chip
- Lập trình cho Flash, EEPROM, set Fuse bit và lock bit thông qua chuẩn
giao tiếp JTAG
Trang 18• Đặc điểm thiết bị ngoại vi
- 2 bộ Timer/Counter 8 bit hoat động riêng biệt
- 1 bộ Timer/Counter 16 bit với Compare mode và Capture mode
- Bộ đếm thời gian thực với bộ tạo dao động riêng biệt
- 4 kênh PWM (Pulse Width Modulator)
- 8 kênh 10 bit ADC
- Giao tiếp chuẩn nối tiếp 2 dây
- Lập trình truyền thông nối tiếp USART
- Bộ WatchDog Timer khả trình với bộ tạo dao động riêng biệt trên chip
• Những điểm đặc biệt của vi điều khiển
- Bao gồm cả ngắt nội lẫn ngắt ngoại
- 6 chế độ Sleep: Idle, ADC noise reduction, Power-save, Power-down,
Standby, Extended Standby
• I/O và hình thức đóng gói
- 32 đường I/O lập trình được
- 40 pin –PDIP, 44 lead-TQFP, 44 pad MLF
• Điện thế hoạt động
- 2.7 – 5.5V cho ATmega32L
- 4.5- 5.5V cho ATmega32
1.5.2 Tổ chức bộ nhớ trong AVR
1.5.2.1 Bộ nhớ chương trình (Program Memory): là bộ nhớ Flash lập trình được có
chứa Application Flash Section, phần này lại bao gồm hai phần nhỏ: phần chứa mã lệnh lập trình cho chip, phần còn lại chứa các vector ngắt Các vector ngắt nằm ở phần đầu của Application Flash Section (từ địa chỉ 0x0000) và dài đến bao nhiêu thì tuỳ loại chip, riêng chip Atmega32 thì các vector ngắt từ địa chỉ 0x0000 đến 0x0028, phần chứa lệnh lập trình cho chip nằm ngay sau đó, chương trình viết cho chip bắt buộc phải nạp vào
phần này
Trang 19Hình P2_1.3: Tổ chức bộ nhớ chương trình của ATmega32
1.5.2.2 Bộ nhớ dữ liệu (Data Memory): Đây là phần chứa các thanh ghi quan trọng
của chip, việc lập trình cho chip phần lớn truy cập vào bộ nhớ này Bộ nhớ dữ liệu với
2144 vị trí dùng để định địa chỉ cho tập thanh ghi, bộ nhớ vào ra và bộ nhớ SRAM nội
96 vị trí đầu tiên định địa chỉ cho tập thanh ghi và bộ nhớ vào ra (32 cho tập thanh ghi
và 64 cho bộ nhớ vào ra) và 2048 vị trí còn lại dùng để định địa chỉ SRAM nội
Trang 20Hình P2_1.4: Tổ chức bộ nhớ dữ liệu
Bộ nhớ dữ liệu của các chip AVR thường bao gồm 5 phần :
- Phần 1: là phần đầu tiên trong bộ nhớ dữ liệu gồm 32 tệp thanh ghi, mỗi thanh ghi
Trang 21Hình P2_1.5: Tập thanh ghi
Tất cả các lệnh thao tác trên các thanh ghi đều có thể truy nhập trực tiếp và truy nhập trong một chu trình đơn đến tất cả các thanh ghi Nhưng cũng có một số ngoại lệ là các lệnh SBCI, SUBI, CPI, ADNI, và ORI cũng như lệnh WI, các lệnh này chỉ tác động đến thanh ghi R16 đến R31 Các thanh ghi R0 và R26 đến R31 có các chức năng bổ sung Thanh ghi R0 sử dụng trong các lệnh nạp bộ nhớ chương trình LPM(Load Program Memory), trong khi các thanh ghi R26 đến R31 được sử dụng làm thanh ghi con trỏ, các thanh ghi con trỏ này được sử dụng trong nhiều lệnh gián tiếp dùng cho thanh ghi
- Phần 2: sau tệp thanh ghi là 64 thanh ghi nhập/xuất (64 I/O register) hay còn gọi là
vùng nhớ I/O (I/O memory) vùng nhớ này là cửa ngõ giao tiếp giữa CPU và các thiết bị ngoại vi Tất cả các thanh ghi điều khiển, trạng thái…của thiết bị ngoại vi đều nằm ở đây Điển hình là đối với mỗi PORT đều có liên quan đến 3 thanh ghi, đó là DDRx, PORTx và PINx tất cả 3 thanh ghi này đều nằm trong vùng nhớ I/O Vì ATmega32 có 4 PORT(A,B,C,D) nên x = A,B,C,D
- Phần 3: SRAM nội (internal SRAM), là vùng không gian cho chứa các biến (toàn cục
hoặc cục bộ) trong lúc thực thi chương trình, vùng này tương tự RAM trong máy tính nhưng có dung lượng khá nhỏ, chip ATmega32 có dung lượng 2Kbytes
- Phần 4: SRAM ngoại (external SRAM) vùng này chỉ tồn tại khi người sử dụng gắn
thêm bộ nhớ ngoài vào chip
Trang 22- Phần 5: EEPROM (Electrical Ereasable Programmable ROM) là một phần quan trọng
của các chip AVR, vì là ROM nên bộ nhớ này không bị xóa ngay cả khi không có nguồn nuôi cho chip, rất thích hợp cho các ứng dụng lưu trữ dữ liệu Bộ nhớ này thường được tách riêng với bộ nhớ dữ liệu nhưng vẫn là một phần trong bộ nhớ dữ liệu
Hình P2_1.6: Bộ nhớ dữ liệu EEPROM
1.5.3 Các thanh ghi chức năng
a.Thanh ghi trạng thái- SREG (Status Register)
Đây là một trong những thanh ghi quan trọng nhất của chip AVR, có 8 bit cờ báo hiệu trạng thái hiện tại của vi điều khiển, tất cả các bit này sẽ bị xóa khi reset
Bit 7 – I: Global Interrupt Enable: cho phép ngắt toàn cục hoặc cấm tất cả các ngắt Bit 6–T : Bit Copy Storage : dùng nạp bit BLD (bit load) và lưu trữ bit BST (bit store)
để nạp và lưu trữ các bit từ một thanh ghi này vào thanh ghi khác
Bit 5 – H: Half Carry Flag: báo cho thấy sự nhớ một nửa trong một số lệnh số học Bit 4- S: Sing Flag: cờ dấu, bit này là kết quả EX-OR giữa cờ phủ định N và cờ tràn
(overflow)
Bit 3- V: cờ tràn lấy bù nhị phân
Bit 2 – N:Negative Flag: cờ phủ định
Bit 1 – Z: Zero Flag: cờ số không, chỉ báo một kết quả bằng 0 sau khi thực hiện một
phép tính số học hoặc logic
Bit 0 – C: Carry Flag: cờ nhớ, chỉ cho sự nhớ trong trong phép tính số học hoặc logic
b.Thanh ghi con trỏ ngăn xếp- SP (Stack Pointer)
Có độ rộng 2 byte, được dùng để chỉ đến vùng trong bộ nhớ SRAM ở đỉnh ngăn xếp và lưu trữ địa chỉ mà bộ xử lý trả trở lại sau khi gọi ngắt hoặc gọi thủ tục hoặc có
Trang 23thể lưu các biến cục bộ Khi sử dụng SP cần tạo giá trị hợp lý vì địa chỉ bắt đầu của SRAM là 0x0060 chứ không phải là 0x0000 Các giá trị khởi tạo thường là 0
c.Thanh ghi điều khiển toàn bộ vi điều khiển – MCUCR (MCU Control Register)
Bit 7- SE: Cho phép ngủ(sleep enable), việc đặt bit này thành “1” cho phép bộ xử lý
chuyển sang chế độ ngủ Sau khi đặt bit này thành “1” chương trình cần phải thực thi lệnh SLEEP
Bit 6…4- SM2…0: Đây là những bit chọn chế độ ngủ, có 6 chế độ sleep được thể hiện
trong hình 1.14
Bit 3,2- ISC11,ISC10: Bit điều khiển nhạy cảm ngắt dùng cho INT1
Bit 1,0- ISC01,ISC00: Bit điều khiển nhạy cảm ngắt dùng cho INT0
d.Thanh ghi các PORT
Đối với mỗi cổng (PORT) của vi điều khiển đều chứa 3 thanh ghi chức năng liên quan đến các cổng
- Thanh ghi DDRx( thanh ghi hướng dữ liệu ): là thanh ghi 8 bit có tác dụng điều khiển hướng của cổng (cổng ra hay cổng vào) Nếu có 1 bit nào đó trong thanh
Trang 24ghi này bật lên 1 thì cổng này được định nghĩa là cổng ra, ngược lại nếu không
có bit nào được bật lên 1 thì quy định đó là cổng vào
VD: DDRA=0xFF có nghĩa là PORTA được định nghĩa là PORT xuất
DDRA=0x00 có nghĩa là PORTA được định nghĩa là PORT nhập
- Thanh ghi PORTx(thanh ghi dữ liệu cổng): là một thanh ghi 8 bit, nếu bit nào trong thanh ghi mà được set lên 1 thì giá trị đưa ra tại bit đó là mức logic 1
VD: PORTA = 0x01 có nghĩa là giá trị xuất ra PORTA.0 là 1
- Thanh ghi PINx(thanh ghi địa chỉ chân vào): cho phép truy nhập trực tiếp đến các chân của vi điều khiển, chỉ cho phép đọc dữ liệu mà không thể ghi
1.5.4 Hoạt động ngắt-Interrrupt
Ngắt là một cơ cấu điều khiển dòng lệnh, khi có một hoạt động ngắt xảy ra, tín hiệu khẩn cấp sẽ được gởi đến bộ xử lý để yêu cầu bộ xử lý tạm ngừng các hoạt động hiện tại ngay lập tức để nhảy đến nơi khác thực hiện một nhiệm vụ khẩn cấp nào đó, nhiệm
vụ này là trình phục vụ ngắt – isr (interrupt service routine ) Chương trình ngắt chỉ đơn giản giống hệt như một chương trình con, ngoại trừ một đặc điểm là việc thực thi của đoạn chương trình ngắt này không bị bộ xử lý đoán trước là sẽ xuất hiện ở thời điểm cũ thể nào Sau khi kết thúc nhiệm vụ trong isr, bộ đếm chương trình PC sẽ được trả về giá trị trước đó để bộ xử lý quay về thực hiện các nhiệm vụ còn dang dở Như vậy ngắt
có mức độ ưu tiên xử lý cao nhất, được dùng để xử lý các sự kiện bất ngờ nhưng không quá tốn thời gian
Hình P2_1.7: Sơ đồ thực hiện ngắt của AVR
Trang 25Bộ vi điều khiển AVR có rất nhiều cấu trúc ngắt, khả năng ngắt đã được chu cấp cho hầu hết các thiết bị ngoại vi sao cho chương trình chính không cần phải thường xuyên kiểm tra các thiết bị này
Một loạt các sự kiện có thể kể ra khi có một ngắt xuất hiện là:
1 Thiết bị ngoại vi ngắt bộ xử lý
2 Việc thực thi lệnh được hoàn thành
3 Địa chỉ của lệnh tiếp theo được lưu trữ trên ngăn xếp (một ngăn xếp phần cứng hoặc một ngăn xếp phần mềm)
4 Địa chỉ ISR(đoạn chương trình ngắt) được nạp vào bộ đếm chương trình
5 Bộ xử lý thực thi ISR
6 Việc hoàn thành các thao tác thực thi ISR được chỉ báo bằng lệnh
RETI(trả lại từ ngắt)
7 Bộ xử lý nạp bộ đếm chương trình với giá trị được lưu trữ trên ngăn xếp
và việc thực thi chương trình bình thường lại tiếp tục
Các thanh ghi dùng cho ngắt của ATmega32
a.Thanh ghi điều khiển ngắt chung- GICR(General Interrupt Control Register)
Bit 7…5: Bit lựa chọn ngắt, nếu bit nào được set lên 1 thì ngắt tương ứng được sử dụng b.Thanh ghi cờ ngắt chung- GIFR (General Interrupt Flag Register)
Các bit trong thanh ghi GIFR báo hiệu cho ta biết nếu một ngắt đã xuất hiện Nếu có sự thay đổi về cạnh hoặc mức logic ở ngắt nào thì cờ INTFx set thành 1 Nếu bit I trong thanh ghi SREG và INTx trong thanh ghi GICR được set 1 thì vi điều khiển sẽ nhảy đến vector ngắt đó Cờ được xóa khi mà chương trình con ngắt được thực thi Cờ có thể được đặt lại bằng cách ghi giá trị 1 vào nó
Khi sử dụng ngắt nên cẩn thận việc hai hay nhiều ngắt xảy ra cùng lúc, vì khi đó CPU thực hiện xong một ngắt rồi sau đó bỏ qua tất cả các ngắt khác cho dù các ngắt khác chưa thực hiện Do vậy chúng ta nên hạn chế việc dùng ngắt trong việc lập trình cho AVR
Trang 261.5.5 Hoạt động của bộ định thời-Timer/Counter
a.Khái niệm: Bộ định thời (Timer) là những thanh ghi có chức năng định thời và đếm
sự kiện cho bộ vi xử lý
b.Cấu tạo và nguyên tắc hoạt động
Bộ định thời là một chuỗi các Flip Flop ghép nối lại với nhau , mỗi Flip Flop là một mạch chia, chuỗi này nhận tín hiệu ngõ vào và làm nguồn xung clock Xung clock này đặt vào Flip Flop, Flip Flop chia đôi tần số xung clock Ngõ ra của xung clock thứ nhất là nguồn xung clock cho Flip Flop thứ hai, xung này cũng được chia cho 2 và cứ như thế tiếp tục cho đến Flip Flop cuối cùng Vì mỗi một bậc kế tiếp nhau đều chia cho
2 nên bộ định thời có n bậc thì tần số xung clock ở ngõ vào sẽ chia cho 2n
Ở ngõ ra cuối cùng, có một xung clock báo tràn cho bộ định thời hay còn gọi là
cờ tràn (overflow flag), cờ tràn được kiểm tra bởi phần mềm hay tạo ra một ngắt, ngắt này được gọi là ngắt tràn timer (Overflow interrupt).Ví dụ một bộ định thời 16 bit sẽ đếm từ $0000 đến $FFFF, cờ tràn được bật lên 1 khi xảy ra tràn số đếm từ $FFFF xuống $0000
c.Các chế độ hoạt động của Timer
- Chế độ thường: là chế độ hoạt động đơn giản nhất của Timer, bộ đếm sẽ tiếp tục
đếm tăng lên cho đến khi vượt quá giá trị lớn nhất TOP và sau đó sẽ được nạp lại tại giá trị BOTTOM Trong các hoạt động thông thường thì cờ tràn được thiết lập khi giá trị trong timer đạt giá trị 0 và không bị xóa đi Tuy nhiên ngắt tràn
được chấp nhận thì cờ ngắt sẽ bị xóa đi sau khi ngắt được thực hiện
- Chế độ so sánh- CTC (Clear Timer/Counter on Compare Match): Giá trị của
Timer luôn được so sánh với giá trị trong thanh ghi OCR Khi giá trị trong timer bằng giá trị trong thanh ghi OCR thì giá trị trong timer bị xóa Giá trị OCR đóng vai trò là giá trị TOP cho bộ đếm Chế độ này cũng cho phép tạo ra tần số so sánh ở đầu ra(OCx) Tuy nhiên trong chế độ này nếu giá trị nạp vào thanh ghi OCR nhỏ hơn giá trị tức thời của bộ đếm thì một so sánh sẽ lỡ nhịp, lúc đó bộ đếm sẽ đếm lên tới giá trị lớn nhất rồi rơi xuống giá trị 0 trước khi một so sánh
mới được thực hiện
- Chế độ fast PWM (Pulse Width Modulator): Cho phép tạo ra sóng có tần số cao,
bộ đếm sẽ đếm từ giá trị đáy(Bottom) đến giá trị lớn nhất(max) Trong chế độ không đảo thì đầu ra của chân so sánh OCn sẽ bị xóa khi có phép toàn so sánh